1.环境准备
测试环境: python3.8 ,httprunner版本为2.5.7
pip install httprunner==2.5.7
![](https://img-blog.csdnimg.cn/img_convert/e305d91462ec9b388f764e84d31d7a62.png)
检查安装结果:
httprunner -V
创建项目
使用 httprunner命令创建一个项目。
httprunner --startproject HttpRunnerDemo
![](https://img-blog.csdnimg.cn/img_convert/cf3bc87e387f6a4ebb182660a4464942.png)
安装过程中出现下方的报错,可以执行这个命令解决。执行完,再重新安装HttpRunner。
python -m pip install markupsafe==2.0.1
![](https://img-blog.csdnimg.cn/img_convert/63d6b2489b772a2f85417084f9141878.png)
创建之后得到的目录是这样的:
├─api├─reports├─testcases└─testsuites
![](https://img-blog.csdnimg.cn/img_convert/d39d7290f69b8b04eb2de12f48bd895e.png)
文件作用
下面来看下生成的几个文件都是做什么的:
api: 定义单个接口的用例
testcases:一个测试用例,多个接口组合调用
testsuites:一个测试套,多个测试用例组合调用
debugtalk.py:每个项目有且仅有一个,项目的根路径标识,存放自定义的 Python 方法,测试用例中的自定义方法都在此定义。
env:环境变量文件,在此存放测试项目的全局环境变量。当然你也可以在测试用例和测试套中进行不同级别的环境变量定义。
api
![](https://img-blog.csdnimg.cn/img_convert/6b6deebfc585e5b4bd0cc8647342f6b4.png)
testcase
![](https://img-blog.csdnimg.cn/img_convert/c21888af12bc29d94b5bc1b692b57967.png)
testsuite
![](https://img-blog.csdnimg.cn/img_convert/f27879eb71dcc047efa526c7c4dcf0c1.png)
env
![](https://img-blog.csdnimg.cn/img_convert/ed55284c4b571df2a666fd8c6e27e058.png)
debugtalk
![](https://img-blog.csdnimg.cn/img_convert/24a545501a8382fd02f0963787938335.png)
2. 测试网站介绍
https://pity.fun/#/
pity是一款专注于api自动化的工具,采用 Python+ FastApi+ React开发。
![](https://img-blog.csdnimg.cn/img_convert/f562568b0440aa1a09e71100705416e2.png)
建议本地启动项目进行测试。
![](https://img-blog.csdnimg.cn/img_convert/fef5a326769ddb0e72d7e740ea855b89.png)
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
![](https://img-blog.csdnimg.cn/img_convert/e7de8f8a8bd82a3674e35e9dbf56748c.png)
测试报告
![](https://img-blog.csdnimg.cn/img_convert/cd0ee8e15c6f1d33e318434da96a88f6.png)
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的情况
![](https://img-blog.csdnimg.cn/img_convert/0581d6e8202164b5d1180f9173d35b6c.png)
去掉env的情况
![](https://img-blog.csdnimg.cn/img_convert/bc2a40a445f30e08b6506f73f7af9b39.png)
测试报告
添加env通过的展示
![](https://img-blog.csdnimg.cn/img_convert/78ed140cf4d1635677b40e4ca3e4c44b.png)
去掉env报错的情况
![](https://img-blog.csdnimg.cn/img_convert/459be5198b057770ec20b869b8b134d0.png)
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
![](https://img-blog.csdnimg.cn/img_convert/c4b8e230063558ab7e8cd6e5418847de.png)
测试报告
![](https://img-blog.csdnimg.cn/img_convert/2b90e90bfa80b4d29f72e3d62b39fb12.png)
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
测试报告
![](https://img-blog.csdnimg.cn/img_convert/754e8a1a7f8efad11afedad5d30b57fa.png)
使用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
![](https://img-blog.csdnimg.cn/img_convert/418c972949f3977ecb025df80b3cf336.png)
报告展示
![](https://img-blog.csdnimg.cn/img_convert/3596c1405f03af021fa54dbd6b5516c5.png)
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
报告展示
![](https://img-blog.csdnimg.cn/img_convert/b02d2ffb28c27189836126bb5a95959e.png)
7.测试总结
api ---testcase--testsuit
![](https://img-blog.csdnimg.cn/img_convert/39011713128eb6a6ac2219b70891b66c.png)
8. 参考资料
httprunner视频讲解
https://www.bilibili.com/medialist/detail/ml1760693098
文档代码地址
https://gitee.com/rdtest/code2022/tree/master/HttpRunnerDemo