一、安装
1.1python环境
建议安装3.x版本,贴一个国内镜像地址,可以自行选择
1.2httprunner安装
执行以下命令pip install httprunner
默认安装最新版本,笔者安装的2.4的版本,可以使用这条命令指定版本pip install httprunner==版本号
安装之后使用hrun -V
查看版本号,打印版本号则安装成功
二、脚手架介绍
2.1 安装脚手架
2.x版本执行hrun --startproject 项目名称
3.x和4.x请执行httprunner --startproject 项目名称
2.2脚手架项目介绍
脚手架类似vue的脚手架,默认给了一个最基本的项目格式
文件/夹 | 意义 |
api | 独立定义的接口 yml/json 文件 |
reports | 执行后自动生成的测试报告文件 |
testcases | 测试用例文件 |
testsuites | 测试用例集文件 |
.env | 定义环境变量 |
.gitgnore | 定义托管到git时忽略的文件 |
debugtalk.py | 编写外部处理函数,可以在用例子中被调用 |
三、项目实践
3.1 api文件实践
默认的yml如下
name: demo api # 接口名称 variables: # 这个文件下的全局参数 var1: value1 # 自定义的参数 自定义的key-value模式 在后面可以引用 ${key} var2: value2 request: #一个请求 url: /api/path/$var1 # ip+端口+地址 method: POST # 请求方法 get post delet put ... headers: # 定义请求头 Content-Type: "application/json" # 请求头参数 json: # post请求的body key: $var2 validate: # 断言request的请求响应状态是否为200 - eq: ["status_code", 200]
这里我们自定义一个,此接口是笔者的网站接口,读者需要自行准备接口,直接用百度的也可以
login.yml文件
name: 登录接口-正向用例 variables: # 全局变量 只能在这个yml中使用 password: zz102073 id: 102073 login_url: http://47.92.52.220:8088/login/login base_url: ip+端口 request: # 参数信息 # 可以使用全局变量写法 # url: $login_url # url: /login/login url: /login/login # 调用py的函数 # User-Agent: ${get_user_agent()} method: POST headers: Content-Type: "application/json" json: id: $id # 环境变量 在.env文件中创建 标准写法为大写 调用格式${ENV(变量名)} password: $password # 全局变量 validate: # 断言使用 - eq: ["status_code", 200] # - {"check":"status_code","comparator":"eq","expect":200} # - {"check":"content","comparator":"contains","expect":"msg"}
.env文件
ID=2021102073 PASSWORD=zz102073
debugtalk.py
def get_user_agent(): user_agent = ["测试1","测试2","测试3"] return random.choice(user_agent)
可以看见一些新的用法
- 定义了
base_url
之后可以在后文中使用 - ${ENV(变量名)}可以引用全局变量
- 如果要使用自定义的py函数,直接${get_user_agent()}就可以,
执行hrun api/login.yml
,后面是相对路径的地址,可以看见打印了相关信息
测试报告
3.2 testcase场景串联案例
实际测试中,很多接口可能要使用前面接口的参数,这里演示一个
config: name: "获取题目信息配置" # 就近覆盖 不以api中为基准 base_url: ip+端口 teststeps: - name: 登录 api: api/login.yml extract: #会覆盖后面api中的token - token: headers.Authorization - name: 获取题目列表信息 api: api/get_problem_list.yml
注意
- 上面的base_url会就近覆盖
- teststeps下面的每一个短横线就是一个api文件中的接口
- extract表示下面的参数会保存下来,在获取题目列表信息的接口中会引用他,如下
同样执行hrun 相对路径
可以得到测试报告
3.3 testsuites案列
login.yml
config: name: "登录接口套件" base_url: "http://47.92.52.220:8088" testcases: - name: 登录接口套件 testcase: testcases/login.yml parameters: #方式一 直接在当前文件添加 # - title-id-password-status_code: # - ["正常登录","2021102073","zz102073",200] # - ["密码错误","2021102073","z102073",200] #方式二 用csv文件 默认全部是str类型,数据转换有问题 # - title-id-password-status_code: ${P(datas/account.csv)} #方式三 最佳实践 使用函数 - title-id-password-status_code: ${get_accounts()}
代码解释: 介绍了三种引入测试用例的方法,因为每个接口的测试用例可能存在几十个,parameters表示下面的是参数,用短横线分割
方式一
直接在当前文件添加,一眼懂,不解释
方式二
引用csv文件 默认全部是str类型,如果你的数据是int或者其他类型会报错
这里在项目里新建了一个data目录,一个account.cvs文件,这个格式可以引用${P(datas/account.csv)}
title,id,password,status_code 正常登录,2021102073,zz10273,200 密码错误,2021102073,z10273,200
方式三
使用py代码,实际操作中应该使用代码生成测试用例
def get_accounts(): # 嵌套字典的列表 可以通过程序自动生成 accounts = [ {"title":"正常登录","id":"2021102073","password":"zz102073","status_code":200} ] return accounts
四、补充说明
fidder使用
如果有大量接口需要自动化测试,手动编写yml文件十分繁琐,可以使用抓包工具得到har文件,通过har2case 目标文件 -2y
将har文件转换为yml文件
debug打印
可以使用hrun 目标文件 --log-level debug
将打印级别调为debug模式,看见更多信息
httprunner官方
https://httprunner.com/docs/quickstart/详细可以阅读官方文件,以及更多断言写法