当前位置:   article > 正文

【HttpRunner学习总结1】HttpRunner3.0

httprunner3.0

一、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(自动生成):运行后自动生成,无需创建

四、环境安装

  1. pip3 install httprunner
  2. #如果之前装过低版本的,可以加 -U 参数升级到最新版
  3. 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路径

  1. # 如果有设置base_url会指定拼接一个完整的url路径
  2. base_url: 'http://127.0.0.1:8000'
  3. request:
  4. # url: 'http://127.0.0.1:8000/user/login/'
  5. url: '/user/login/'

2. 设置参数
在variables中设置变量的值,调用时使用$变量名即可。

注意:定义变量之后,可以在定义变量下方的任意地方调用,一般在当前文件中才能调用

  1. variables:
  2. # 变量key: 变量的值
  3. uname: 'aaron123'
  4. passwd: '123456'
  5. status: 200
  6. ...
  7. json:
  8. username: $uname
  9. passwd: $passwd
  10. validate:
  11. - eq: ["status_code", $status]

3. env变量
在项目根路径下的.env文件中也可以定义变量,使用key=value的方式去定义。
在.env文件中定义的变量,可以在任意文件中调用

建议数据库相关配置、base_url、常用用户数据等配置在环境变量中

  1. USERNAME=aaron123
  2. PASSWORD=123456

在api/demo_api.yml文件中调用。使用${ENV(变量名)}调用。

  1. json:
  2. username: ${ENV(USERNAME)}
  3. password: ${ENV(PASSWORD)}

4. debugtalk函数
我们如果想要给某个变量添加动态的值,可以在项目根路径下的debugtalk.py文件中定义函数。

debugtalk.py文件中的函数可以在任意yaml配置文件中调用。

  1. def random_generate_user_agent():
  2. user_agent_list = ["Mozilla/5.0 Aaron", "Mozilla/5.0 Aaron1", "Mozilla/5.0 Aaron2",
  3. "Mozilla/5.0 Aaron3"]
  4. return random.choice(user_agent_list)

然后在需要的地方调用函数,实现动态数据。
调用方式为${方法名()}。

User-Agent: "${random_generate_user_agent()}"

此时,User-Agent的值就会随机从user_agent_list中取出。

5. 用例依赖
如果当前有一个用例需要先登录才能正确请求,那么我们就需要在testcases/demo_testcase.yml文件中添加用例依赖关系。

  1. # 定义全局配置信息
  2. # a.定义teststeps中公共信息
  3. config:
  4. name: "测试获取项目列表数据接口"
  5. # 定义每个测试步骤
  6. teststeps:
  7. -
  8. name: "先登录"
  9. # 导入需要执行的用例的yml路径
  10. api: "api/login_api.yml"
  11. # 用于提取参数并创建变量(可多个),创建的变量可以在下方任意处调用
  12. extract:
  13. # 把content响应体内的token值取出来,赋给变量token
  14. - token: content.token
  15. -
  16. name: "获取项目列表数据"
  17. api: api/projects_api.yml

在api/projects_api.yml文件中,引用前面定义的token变量。

  1. headers:
  2. Authorization: "JWT $token"

6. variables优先级顺序:
testcase config variables > teststep extract > teststep variables > api variables

建议只在一个地方使用variables,不然项目混乱,不便管理。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/609078
推荐阅读
相关标签
  

闽ICP备14008679号