目录
HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求
一、安装
前提条件:已安装python(自用的3.5)
dos命令行输入:pip install httprunner
验证安装成功:
C:\Users\Administrator>hrun -V
2.5.9
二、脚本录制
开源项目:
1、http://erp2.hzb-it.com/
2、https://github.com/macrozheng/mall
https://www.macrozheng.com/admin/index.html#/login
1、charles录制
打开charles,过滤掉其他域名
抓取场景: 登录—>组织—>职位管理—>新增职位为:初级测试工程师
回到charles,把js、css静态文件清除:选中-右键-clear(如果没有,就忽略)
把接口全选导出,保存文件类型为HTTP Archive(.har)
2、F12脚本录制
三、脚本生成
1、har转换为json脚本
将HAR转换为默认的JSON脚本,dos命令行输入:har2case 文件名.har(先切换到文件目录,在输入,文件我放到桌面了,执行后可以看到一个同名的json文件)
2、har转换为yml脚本
将HAR转换为YAML脚本,dos命令行输入:har2case -2y 文件名.har(执行后可以看到一个同名的yml文件)
生成的文件
四、执行脚本
注:由于录制脚本时,新增了岗位初级测试工程师,所以列表中删除后再去执行脚本,否则执行脚本后会提示职位已存在,又或者直接在录制的json文件中修改为其他名称都可以
dos命令行输入:hrun 文件名.json 或hrun 文件名.yml
五、查看报告
点击log,可以查看接口的请求和返回数据
六、httpruner接口自动化项目架构
创建项目命令:hrun --startproject 新项目名称
桌面会显示刚创建的testpro的文件夹
使用pycharm打开,目录结构如下
- api:存放yml文件,接口定义
- reports:存放测试报告
- testcases:存放测试用例
- testsuites:测试套件
- .env:存放环境变量
引用方式:在YAML/JSON脚本中,${ENV(变量名)}获取环境变量 - .gitignore 当项目使用git做版本控制的时候,添加在此文件中的文件不会被git管理
- debugtalk.py:项目中逻辑运算辅助函数
① 编写常见功能和业务相关的函数,使得测试用例中可以引用函数,实现一些动态的计算逻辑,如获取时间戳、生成随机数、处理签名等
② 编写hook函数,使得测试用例执行前后可以调用钩子函数,实现测试的准备和清理工作,如初始化某个请求参数、修改响应结果的某个值等
引用方式:在 YAML/JSON 格式的测试用例中,通过${func()}的方式引用
注:
① 文件存在时,其所在目录被视为项目工程根目录
② 该文件不存在时,运行测试的所在路径被视为项目工程根目录
1、编写接口描述(api)
模板样例demo_api.yml
name: demo api
variables:
var1: value1
var2: value2
request:
url: /api/path/$var1
method: POST
headers:
Content-Type: "application/json"
json:
key: $var2
validate:
- eq: ["status_code", 200]
模板说明
- name:接口名称
- variables:变量信息,格式为key: value(注意冒号后面有一个空格)
- request:请求信息
- url:请求地址
- method:请求方法
- headers:请求头
- json:请求参数 ,格式为key: value,value一般引用变量或函数,格式为:${var}、 ${value}
- validate:结果断言
2、编写测试用例(testcases)
模板样例demo_testcase.yml
config:
name: "demo testcase"
variables:
device_sn: "ABC"
username: ${ENV(USERNAME)}
password: ${ENV(PASSWORD)}
base_url: "http://127.0.0.1:5000"
teststeps:
-
name: demo step 1
api: path/to/api1.yml
variables:
user_agent: 'iOS/10.3'
device_sn: $device_sn
extract:
- token: content.token
validate:
- eq: ["status_code", 200]
-
name: demo step 2
api: path/to/api2.yml
variables:
token: $token
模板说明
config:整个测试用例的全局配置
name:测试用例名称,测试报告会显示该名称
variables:全局变量
base_url:访问地址,一般写域名host
teststeps:测试步骤,下面以列表形式编写一个或多个测试步骤,并且每一个测试步骤前面有‘-’
name:测试步骤名称,测试报告会显示该名称
api:引用接口描述文件,相对路径从根目录开始
variables:局部变量,优先于全局变量,若此处填写了局部变量,则会覆盖config中的variables全局变量
extract:从响应结果中提取参数,并保存到变量中,给其他测试步骤引用
validate:结果断言
打开上面生成的login.yml文件
config:
name: testcase description
variables: {}
teststeps:
- name: /app/common/login
request:
data:
password: '123'
username: admin
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36
method: POST
url: http://erp2.hzb-it.com/app/common/login
validate:
- eq:
- status_code
- 200
- eq:
- headers.Content-Type
- application/json;charset=UTF-8
- eq:
- content.msg
- 提交成功
- eq:
- content.errCode
- 0
部分参考:https://blog.csdn.net/dad22211/article/details/133893006