1.环境准备
测试环境: python3.8 ,httprunner版本为2.5.7
pip install httprunner==2.5.7
检查安装结果:
httprunner -V
创建项目
使用 httprunner命令创建一个项目。
httprunner --startproject HttpRunnerDemo
安装过程中出现下方的报错,可以执行这个命令解决。执行完,再重新安装HttpRunner。
python -m pip install markupsafe==2.0.1
创建之后得到的目录是这样的:
├─api├─reports├─testcases└─testsuites
文件作用
下面来看下生成的几个文件都是做什么的:
api: 定义单个接口的用例
testcases:一个测试用例,多个接口组合调用
testsuites:一个测试套,多个测试用例组合调用
debugtalk.py:每个项目有且仅有一个,项目的根路径标识,存放自定义的 Python 方法,测试用例中的自定义方法都在此定义。
env:环境变量文件,在此存放测试项目的全局环境变量。当然你也可以在测试用例和测试套中进行不同级别的环境变量定义。
api
testcase
testsuite
env
debugtalk
2. 测试网站介绍
https://pity.fun/#/
pity是一款专注于api自动化的工具,采用 Python+ FastApi+ React开发。
建议本地启动项目进行测试。
3.httprunner登录-api
代码演示
# login_api.ymlname: pity登录request: url: http://127.0.0.1:7777/auth/login method: POST headers: Content-Type: "application/json" json: "username": "tester" "password": "tester"extract: - code: "json.code"validate: - eq: ["$code", 0]
执行测试
hrun D:\code2022\HttpRunnerDemo\api\login_api.yml
测试报告
4.httprunner环境变量-env
代码演示
# login_api2.ymlname: pity登录request: url: ${ENV(base_url)}/auth/login method: POST headers: Content-Type: "application/json" json: username: ${ENV(USERNAME)} password: ${ENV(PASSWORD)}extract: - code: "json.code"validate: - eq: ["$code", 0]
env添加如下配置:
USERNAME=testerPASSWORD=testerbase_url=http://127.0.0.1:7777
执行测试
hrun D:\code2022\HttpRunnerDemo\api\login_api2.yml
添加env的情况
去掉env的情况
测试报告
添加env通过的展示
去掉env报错的情况
5.httprunner用例关联-testcase
以 登录-----> 查询项目列表为例。
用户登录-api
# login_api2.ymlname: pity登录request: url: ${ENV(base_url)}/auth/login method: POST headers: Content-Type: "application/json" json: "username": $username "password": $passwordextract: - msg: "json.msg"validate: - eq: ["$msg", "$expect_msg"]
查询项目-api
# userlist_api.ymlname: 查询用户信息request: url: ${ENV(base_url)}/project/list method: GET headers: Content-Type: "application/json" token: "$token" params: page: 1 size: 8extract: - code: "json.code"validate: - eq: ["$code", 0]
登录+查询-testcase
# userlist_testcase.ymlconfig: name: "登录+查询用户信息" variables: username: ${ENV(USERNAME)} password: ${ENV(PASSWORD)} base_url: "${ENV(base_url)}"teststeps:- name: login step 1 api: D:\code2022\HttpRunnerDemo\api\login_api2.yml extract: - token: json.data.token- name: search step 2 api: D:\code2022\HttpRunnerDemo\api\userlist_api.yml headers: Content-Type: "application/json" token: $token
执行测试
hrun D:\code2022\HttpRunnerDemo\testcases\userlist_testcase.yml
测试报告
6.httprunner用例数据驱动
代码演示
api
# login_api3.ymlname: pity登录request: url: ${ENV(base_url)}/auth/login method: POST headers: Content-Type: "application/json" json: "username": $username "password": $passwordextract: - msg: "json.msg"validate: - eq: ["$msg", "$expect_msg"]
testcase
# login_ddt.ymlconfig: name: "pity登录"teststeps:- name: login_ddt api: D:\code2022\HttpRunnerDemo\api\login_api3.yml
直接参数化-testsuit
代码演示
# login_ddt_testsuit.ymlconfig: name: "login testsuite"testcases:- name: call demo_testcase with data 1 testcase: D:\code2022\HttpRunnerDemo\testcases\login_ddt.yml parameters: username-password-expect_msg: - ["tester","tester","登录成功"] - ["tester1","tester1","用户名或密码错误"] - ["tester12","tester12","预期失败的用例"]
执行测试
hrun D:\code2022\HttpRunnerDemo\testsuites\login_ddt_testsuite.yml
测试报告
使用csv驱动-testsuit
代码演示
# login_ddt.ymlconfig: name: "pity登录"teststeps:- name: "$case_name" api: D:\code2022\HttpRunnerDemo\api\login_api3.yml
# login.csvcase_name,username,password,expect_msgtester登录,tester,tester,登录成功,tester1登录,tester1,tester1,用户名或密码错误woody登录,woody,123456,登录成功
# # login_ddt_csv.yml config: name: "demo testsuite"testcases:- name: $case_name testcase: D:\code2022\HttpRunnerDemo\testcases\login_ddt.yml parameters: case_name-username-password-expect_msg: ${P(data/login.csv)}
执行测试
hrun D:\code2022\HttpRunnerDemo\testsuites\login_ddt_csv.yml
报告展示
debugtal驱动-testsuit
代码演示
# debugtalk.pydef get_login_ddt(): result=[ {"case_name": "tester", "username": "tester","password":"tester", "expect_msg": "登录成功"}, {"case_name": "tester1", "username": "tester1","password":"tester1", "expect_msg": "用户名或密码错误"}, {"case_name": "tester12","username":"tester12", "password":"tester12","expect_msg": "预期失败的用例"} ] return result
#login_ddt_debugtalk.ymlconfig: name: "demo testsuite"testcases:- name: $case_name testcase: D:\code2022\HttpRunnerDemo\testcases\login_ddt.yml parameters: case_name-username-password-expect_msg: ${get_login_ddt()}
执行测试
hrun D:\code2022\HttpRunnerDemo\testsuites\login_ddt_debugtalk.yml
报告展示
7.测试总结
api ---testcase--testsuit
8. 参考资料
httprunner视频讲解
https://www.bilibili.com/medialist/detail/ml1760693098
文档代码地址
https://gitee.com/rdtest/code2022/tree/master/HttpRunnerDemo