1.安装
pip3 install httprunner==3.1.9
2.创建httprunner测试引擎
安装完成后会自带hrun,httprunner命令,用于运行测试用例,管理操作等.
3.项目结构
api目录:用于存放接口的最小单元(正向用例)
reports目录:存放测试报告
testcases:处理接口的复杂执行逻辑,如接口依赖的用例
testsuites:用于批量执行用例,可以实现数据驱动测试
.env:存放全局环境变量
debugtalk.py:定义python函数,处理动态参数
4.接口示例
test_engine/api/login_api.yml
# name 指定当前用例名称
name: 登录接口
# variables:指定当前文件中用例的变量
variables:
username: jeanet
pwd: 123456
# request:指定当前接口的配置信息
request:
url: http://127.0.0.1:8000/projects/projects/
method: GET
headers:
Authorization: "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjU4MzEzMTEzLCJpYXQiOjE2NTgzMDk1MTMsImp0aSI6IjViOWU0Y2IyMzIxYTQxYmU5MjhlOGNlNDVjNGVlMjM2IiwidXNlcl9pZCI6MX0.HRERsmwZxmmo2vjCO2B0DRMhPvLsACHc7OCllClXPRc"
# 指定请求体为json格式数据时的请求头
Content-Type: "application/json"
# 指定请求体为form表单格式数据时的请求头
# Content-Type: "application/x-www-form-urlencoded"
# json: 指定请求体为json格式数据
# json:
# username: $username
# password: $pwd
# data:指定请求体为form表单格式数据
# data:
# username: $username
# password: $pwd
# params: 指定路径中的查询字符串参数格式
params:
page: 1
size: 3
# validate:指定校验器
validate:
- eq: ["json.results.0.id", 8]
5.执行测试
5.1 hrun xx命令行执行
hrun 用例文件的绝对路径
hrun xxxx/test_engine/api/login_api.yml
5.2 python程序执行
创建执行文件test_engine/run.py
from httprunner.api import HttpRunner
hrun = HttpRunner()
hrun.run(r'/Users/jeanettian/test_platform/test_platform/test_engine/api/login_api.yml')
print(hrun._summary)
运行
6.base_url:
当设置了base_url后,在request部分的url无需使用$base_url,在测试时如果检测到有base_url变量,会自动进行拼接.
7 .env中的环境变量使用
通过${ENV(变量名)}引用.env文件中定义的全局环境变量
8.debugtalk.py的使用
9.testcases的使用
## test_engine/api/login_api.yml
# name 指定当前用例名称
name: 登录接口
base_url: ${ENV(base_url)}
# variables:指定当前文件中用例的变量
variables:
username: ${ENV(USERNAME)}
pwd: ${ENV(PASSWORD)}
# request:指定当前接口的配置信息
request:
url: /user/login/
method: POST
headers:
# Authorization: "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjU4MzEzMTEzLCJpYXQiOjE2NTgzMDk1MTMsImp0aSI6IjViOWU0Y2IyMzIxYTQxYmU5MjhlOGNlNDVjNGVlMjM2IiwidXNlcl9pZCI6MX0.HRERsmwZxmmo2vjCO2B0DRMhPvLsACHc7OCllClXPRc"
# 指定请求体为json格式数据时的请求头
Content-Type: "application/json"
# 指定请求体为form表单格式数据时的请求头
# Content-Type: "application/x-www-form-urlencoded"
# json: 指定请求体为json格式数据
json:
username: $username
password: $pwd
# data:指定请求体为form表单格式数据
# data:
# username: $username
# password: $pwd
# params: 指定路径中的查询字符串参数格式
# params:
# page: 1
# size: 3
# validate:指定校验器
validate:
- eq: ["status_code", 200]
## test_engine/api/projects_list_api.yml
name: "获取项目列表数据接口"
variables:
base_url: ${ENV(base_url)}
token: $token
request:
url: $base_url/projects/projects
method: GET
headers:
Authorization: "Bearer $token"
Accept: "application/json"
params:
page: 2
size: 3
validate:
- eq: ["status_code", 200]
## test_engine/testcases/project_list_case.yml
config:
name: "获取项目列表数据接口测试"
variables:
username: ${ENV(USERNAME)}
password: ${ENV(PASSWORD)}
base_url: ${ENV(base_url)}
teststeps:
-
name: "先登录"
api: test_engine/api/login_api.yml
variables:
user_agent: 'iOS/10.3'
extract:
- token: content.token
-
name: "获取项目列表数据接口"
api: test_engine/api/projects_list_api.yml
运行测试
10. testsuites使用
可批量执行测试用例,可数据驱动
## test_engine/testsuites/all_testsuite.yml
## test_engine/api/login_api.yml
csv及debugtalk.py函数进行参数化