介绍如何在项目中使用 HttpRunner 框架,从搭建框架目录,介绍 每个文件的功能,API,变量引用,提取token,断言方法
创建项目文件及虚拟环境:
mkdir http_demo # 创建文件夹
cd http_demo # 切换到 http_demo 目录下
pipenv install # 安装 虚拟环境
pipenv shell # 启动虚拟环境
pip install httprunner # 安装 httprunner 库
pip show httprunner # 查看 httprunner 版本
hrun -V # httprunner 检查版本
使用 hrun 命令创建项目结构,
(http_demo-Zx9yvHhM) hrun --startproject demo # 创建项目命令
Start to create new project: demo # 启动创建
CWD: D:\Code_py\http_demo # 创建项目位置
created folder: demo # 创建的文件名称
created folder: demo\api # 接口API文件
created folder: demo\testcases # 测试用例文件
created folder: demo\testsuites # 测试套件
created folder: demo\reports # 测试报告目录
created file: demo\debugtalk.py # python 调试文件
created file: demo\.env # 环境配置文件
介绍使用 yaml 格式文件当做测试用例
githunb 用例示例
- config:
name: "create user and check result." # 配置名称
id: create_user
base_url: "http://127.0.0.1:5000" # 基础url
variables: # 变量
uid: 9001
device_sn: "TESTCASE_CREATE_XXX"
output: # 输出
- session_token
- test: # 用例1
name: setup and reset all (override) for $device_sn. # 名称
testcase: testcases/setup.yml # api 文件目录
output: # 输出
- session_token
- test: # 用例2
name: create user and check result.
variables:
token: $session_token
testcase: testcases/deps/check_and_create.yml
在网上找到练习的接口:
登录接口https://www.apiopen.top/login?key=00d91e8e0cca2b76f515926a36db68f5&phone=13594347817&passwd=123456查询信息接口 https://www.apiopen.top/findStatistics?appKey=00d91e8e0cca2b76f515926a36db68f5
项目结构,testcases 是测试用例目录,api 是存放接口文件
编写 登录 login.yaml 接口
name: "登录"
variables:
username: $username
password: $password
key: $key
request:
url: /login?key=$key&phone=$username&passwd=$password
method: POST
# headers:
# Content-Type: "application/json"
# 请求参数是 json 的 写法如下
# json: {"key": $key,"phone": $username,"passwd": $password}
编写 查询信息 info.yaml 接口
name: "查询信息"
variables:
token: $token
request:
url: /findStatistics?appKey=$token
method: GET
# headers:
# Content-Type: "application/json"
# 请求参数是 json 的 写法如下
# json: {"appKey":$token}
编写测试接口 test_login.yaml
- config:
name: "登录后查询信息"
variables:
username: ${ENV(username)}
password: ${ENV(password)}
key: ${ENV(key)}
base_url: ${ENV(base_url)}
output:
- token
- test:
name: "登录获取 token"
api: api/login.yaml
variables:
username: $username
password: $password
key: $key
extract:
- token: content.data.key
validate:
- eq: ["status_code", 200] # 返回状态检查
- eq: ["content.data.phone", $username] # 判断返回内容中是否有这个账号
- eq: [content.msg, "成功!"] #返回 content 中msg = 操作成功 需要定位到具体元素下标
- contains: [content.msg, "成功!"] # 定位到具体元素下标,关键字进行匹配
- test:
name: "查询信息"
api: api/info.yaml
variables:
token: $token
validate:
- eq: ["status_code", 200] # 返回状态检查
- eq: [content.msg, "成功!"] #返回 content 中msg = 操作成功 需要定位到具体元素下标
- contains: [content.msg, "成功!"] # 定位到具体元素下标,关键字进行匹配
执行 测试用例
hrun testsuites\test_login.yaml --log-level debug
测试用例执行后的在 resports 目录中查看 结果:
login 接口用例的详细结果:
info 接口用例详细结果:
exteact 提取信息,用于后续接口的调用,在cmder 中能看到 提取出的 token信息
断言介绍:
一般项目中使用 -eq 精确断言 -contains 模糊断言
login 登录返回的信息
data.key 是获取到 key 相当于是 token 用户后续接口使用
code 200 是接口返回的状态
msg 成功 接口反馈的 消息
data 里面是详细信息,标识用户登录的身份信息
validate:
# 返回状态检查
- eq: ["status_code", 200]
# 判断返回内容中是否有这个账号
- eq: ["content.data.phone", $username]
#返回 content 中msg = 成功 需要定位到具体元素下标
- eq: [content.msg, "成功!"]
# 定位到具体元素下标,关键字进行匹配
- contains: [content.msg, "成功!"]
以上就是个人在项目中使用 httprunner 框架的经验,接口请求在 api 文件中编写对应的格式,测试用例,在testcases 文件中存放,测试套件(用户流程性的测试)存放在 testsuites 文件中