赞
踩
一、HttpRunner简介:
HttpRunner 是一款面向HTTP(S) 协议的通用测试框架,只需编写维护一份YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。
HttpRunner 是一个基于Python 开发的测试框架,可以运行在macOS、Linux、Windows 系统平台上。
HttpRunner 支持Python 3.4 及以上的所有版本,并使用Travis-CI 进行了持续集成测试,测试覆盖的版本包括2.7/3.4/3.5/3.6/3.7。虽然HttpRunner 暂时保留了对Python 2.7 的兼容支持,但强烈建议使用Python 3.4 及以上版本。
HttpRunner 3.x最大的改变是执行用例用的是 python 的 pytest 框架,支持3种格式的用例:YAML/JSON/pytest 代码
对比 HttpRunner 2.x 以前版本,早期版本用的是 unittest 框架,只支持2种格式的用例: YAML/JSON
二、HttpRunner核心特性:
继承 Requests 的全部特性,轻松实现 HTTP(S) 的各种测试需求;
采用 YAML/JSON 的形式描述测试场景,保障测试用例描述的统一性和可维护性
借助辅助函数(debugtalk.py),在测试脚本中轻松实现复杂的动态计算逻辑
支持完善的测试用例分层机制,充分实现测试用例的复用
测试前后支持完善的 hook 机制
响应结果支持丰富的校验机制
基于HAR 实现接口录制和用例生成功能(har2case)(Fiddler抓包,生成HAR文件)
结合 Locust 框架,无需额外的工作即可实现分布式性能测试
执行方式采用 CLI 调用,可与Jenkins 等持续集成工具完美结合
测试结果统计报告简洁清晰,附带详尽统计信息和日志记录
极强的可扩展性,轻松实现二次开发和Web 平台化
三、在HttpRunner 自动化测试项目中,主要存在如下几类文件:
YAML/JSON(必须):测试用例文件,一个文件对应一条测试用例
debugtalk.py(可选):脚本函数,存储项目中逻辑运算函数
该文件存在时,将作为项目根目录定位标记,其所在目录即被视为项目工程的根目录(当前工作目录CWD);该文件不存在时,运行测试的路径将被视为当前工作目录CWD
测试用例文件中的相对路径(例如.csv)均需基于当前工作目录CWD
运行测试后,测试报告文件夹(reports)会生成在当前工作目录CWD
.env(可选):存储项目环境变量
.csv(可选):项目数据文件,用于进行数据驱动
reports(自动生成):运行后自动生成,无需创建
- pip3 install httprunner
-
- #如果之前装过低版本的,可以加 -U 参数升级到最新版
- pip3 install httprunner -U
检验是否安装成功:
hrun -V
也可以查看详情:
pip show httprunner
安装 HttpRunner 后,以下 5 个命令会写入系统环境变量配置。
1.hrun:指令 httprunner run 的别名,用于运行YAML/JSON/Pytest 测试用例。
hrun 文件名称
2.hmake: 指令 httprunner make 的别名,将 YAML/JSON 用例转换成 pytest 用例。
3.har2case:指令 httprunner har2case 的别名,将 HAR 文件转换YAML/JSON 用例。
har2case XXXXX.har py文件
har2case XXXXX.har -2y yaml文件
har2case XXXXX.har -2j json文件
4.locust: 利用 locust 运行性能测试。
六、参数设置
1. 支持的合法的请求方式method
GET、POST、PUT、PATCH、DELETE,忽略大小写,推荐使用大写。
2. 支持的请求参数类型
json,指定json请求参数
data,指定x-www-form-urlencoded参数
params,指定查询字符串参数
3. 支持的断言方式
eq、equals、==、is,相等断言
lt、less_than,小于
le、less_than_or_equals,小于等于
gt、greater_than,大于
ge、greater_than_or_equals,大于等于
contains,包含
4. 支持的断言方式实际值
status_code,提取响应状态码
cookies,提取cookies信息
headers,提取请求头信息
content、 text、json,提取响应数据,如果接口返回的是json数据,那么这三个获取均类似于Python中字典或者嵌套字典的列表。取值用json.key来取值
ok,当前的请求是否成功
url,提取请求url信息
1. base_url
我们可以把url前面公共的地方提取为base_url,简化url的写法。
# 如果有设置base_url会指定拼接一个完整的url路径
- # 如果有设置base_url会指定拼接一个完整的url路径
- base_url: 'http://127.0.0.1:8000'
-
- request:
- # url: 'http://127.0.0.1:8000/user/login/'
- url: '/user/login/'
2. 设置参数
在variables中设置变量的值,调用时使用$变量名即可。
注意:定义变量之后,可以在定义变量下方的任意地方调用,一般在当前文件中才能调用
- variables:
- # 变量key: 变量的值
- uname: 'aaron123'
- passwd: '123456'
- status: 200
- ...
- json:
- username: $uname
- passwd: $passwd
- validate:
- - eq: ["status_code", $status]
3. env变量
在项目根路径下的.env文件中也可以定义变量,使用key=value的方式去定义。
在.env文件中定义的变量,可以在任意文件中调用
建议数据库相关配置、base_url、常用用户数据等配置在环境变量中
- USERNAME=aaron123
- PASSWORD=123456
在api/demo_api.yml文件中调用。使用${ENV(变量名)}
调用。
- json:
- username: ${ENV(USERNAME)}
- password: ${ENV(PASSWORD)}
4. debugtalk函数
我们如果想要给某个变量添加动态的值,可以在项目根路径下的debugtalk.py文件中定义函数。
debugtalk.py文件中的函数可以在任意yaml配置文件中调用。
- def random_generate_user_agent():
- user_agent_list = ["Mozilla/5.0 Aaron", "Mozilla/5.0 Aaron1", "Mozilla/5.0 Aaron2",
- "Mozilla/5.0 Aaron3"]
- return random.choice(user_agent_list)
然后在需要的地方调用函数,实现动态数据。
调用方式为${方法名()}。
User-Agent: "${random_generate_user_agent()}"
此时,User-Agent的值就会随机从user_agent_list中取出。
5. 用例依赖
如果当前有一个用例需要先登录才能正确请求,那么我们就需要在testcases/demo_testcase.yml文件中添加用例依赖关系。
- # 定义全局配置信息
- # a.定义teststeps中公共信息
- config:
- name: "测试获取项目列表数据接口"
-
- # 定义每个测试步骤
- teststeps:
- -
- name: "先登录"
- # 导入需要执行的用例的yml路径
- api: "api/login_api.yml"
- # 用于提取参数并创建变量(可多个),创建的变量可以在下方任意处调用
- extract:
- # 把content响应体内的token值取出来,赋给变量token
- - token: content.token
- -
- name: "获取项目列表数据"
- api: api/projects_api.yml
在api/projects_api.yml文件中,引用前面定义的token变量。
- headers:
- Authorization: "JWT $token"
6. variables优先级顺序:
testcase config variables > teststep extract > teststep variables > api variables
建议只在一个地方使用variables,不然项目混乱,不便管理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。