httprunner框架(上)
一、什么是Httprunner?
1.httprunner是一个面向http协议的通用测试框架,以前比较流行的是2.X版本。
2.他的思想是只需要维护yaml/json文件就可以实现接口自动化测试,性能测试,线上监控,持续集成。
3.架构图
二、httprunner的设计理念
1.充分复用开源项目,不追求重复的造轮子,而是将市面上强大的轮子转成战车,降低框架的开发成本以及学习成本。
2.遵循约定大于临时配置的准则。(合同,考勤)
3.配置文件组织测试用例。
三、httprunner环境安装
1.python环境:3.6.2
2.安装httprunner:pip install httprunner
验证:hrun -V
3.必须知道的5个httprunner的命令:
httprunner:主命令,用于所有功能
hrun:用于运行yaml/json/pytest测试用例。
hmake:用于将yaml/json测试用例转化成pytest文件。
har2case:用于将har文件转化成yaml/json/pytest测试用例。
locusts:用于性能测试
四、httprunner快速上手
1.使用抓包工具:fiddler、charles操作一遍抓包。导出har文件。
2.通过har2case命令把har文件转化成yaml/json/pytest文件格式。
har2case get.har 生成pytest文件格式的测试用例
har2case get.har -2y 生成yaml格式的测试用例
har2case get.har -2j 生成json格式的测试用例
运行:
hrun get.yml
hrun get.json
hrun get_test.py
发现运行完成之后py文件里面的断言自动的去掉了,说明不管是运行yml、json其实最终都会重新成py文件运行。
五、YAML测试用例结构分析
每一个测试用例都是一个list of dict(字典列表)结构,其中包括config【配置】和teststeps【步骤】
[{},{},{}]
yml文件内容介绍:
cofig:配置
name:用例名称
variables:全局变量
:是否开启https验证
teststeps:步骤
name: /cgi-bin/token 步骤名称
request: 请求
headers: 请求头
Accept: '*/*
'
Accept-Encoding: gzip, deflate, br
Cache-Control: no-cache
Connection: keep-alive
Host: api.weixin.qq.com
Postman-Token: 50f8bb1a-7826-49f8-835e-ec889063b7cc
User-Agent: PostmanRuntime/7.28.0
method: GET 请求方式
params: 请求参数
appid: wx74a8627810cfa308
grant_type: client_credential
secret: e40a02f9d79a8097df497e6aaf93ab80
url: https://api.weixin.qq.com/cgi-bin/token 请求路径
validate:断言
- eq:
- status_code
- 200
eq:
-headers.Content-Type
-application/json; encoding=utf-8
六、接口关联
在request标签下加一个extract标签提取返回值,通过content或body提取。
extract:
aaa: content.access_token
然后通过$变量名使用
params:
access_token: $aaa
七、动态参数:通过debugtalk.py的热加载的方式实现。
第一步:创建一个debugtalk.py文件,然后再里面写一个函数。
第二步:在yaml文件中通过${函数名()}的方式调用。
八、环境变量
开发环境,测试环境,线上环境。预发布环境。
在config下加入:
base_url:
九、全局变量
config下的variables是全局变量
teststeps:下的variables是局部变量
- name: /cgi-bin/tags/update
有两种写法:
1.换行的键值对
2.{}的方式
十、生成HTML格式的报告
hrun httprunners --html=httprunners/report.html
就是pytest里面pytest-html插件的报告一模一样。
httprunner框架(中)
一、httprunner常规的关键字详解
httprunner测试用例的结构
config:配置
name:名称
variables:全局变量
verify:https协议
base_url:环境变量
teststeps:步骤
name:步骤名称
request:请求
headers:请求头
method:请求方式
params:参数
url:请求路径
cookie:cookie信息
json:用于发送http请求正文
data:用于发送http请求正文
extract:提取(通过content或body提取,json提取器。支持正则表达式提取。)
validate:断言
eq相等
equals相等
str_eq(str(a)=str(b))
lt:小于
le:小于或等于
gt:大于
ge:大于或等于
contains:包含
简化:
name:接口名称
request:请求
headers:请求头
method:请求方式
data:参数
url:请求路径
cookie:cookie信息
extract:提取(通过content或body提取,json提取器。支持正则表达式提取。)
validate:断言
equals相等
str_eq(str(a)=str(b))
contains:包含
二、httprunner接口自动化项目架构
先要切换到项目的根目录,使用:httprunner startproject 项目名(没有虚拟环境)
har:存放har文件
reports:存放报告
testcases:存放测试用例
api:存放yml文件,接口定义。
data:数据驱动
testsuites:测试套件
.env:存放环境变量
.gitignore 当你的项目使用git做版本控制的时候,添加在此文件中的文件不会被git管理。
debugtalk,py实现热加载。
分层架构:三层
1.接口定义层(api):为了更好的管理接口描述,每个一个接口定义都应该尽量的能够单独运行。
2.测试用例层(testcases)
3.测试套件层(testsuites)
关系:testcases调用api层(使用api关键字),testsuites调用testcases层(使用 testcase关键字)。
三、环境变量
环境变量可以写入.env文件
然后在api接口定义层里面使用:${ENV(变量名)}获取环境变量。
httprunner框架(下)
一、httprunner如何实现数据驱动
3.X开始,使用parameters定义数据源。应用于测试用例层。
第一种:直接在脚本里面指定参数列表,最简单。适合于参数比较少的情况。
1 config:
2 name: 测试用例
3 parameters:
4 appid‐grant_type‐secret‐assert_str:
5 ‐ ["wx74a8627810cfa308","client_credential","e40a02f9d79a8097df497e6aaf9
3ab80","access_token"]
6 ‐ ["","client_credential","e40a02f9d79a8097df497e6aaf93ab80","errcode"]
7 ‐ ["wx74a8627810cfa308","","e40a02f9d79a8097df497e6aaf93ab80","errmsg"]
8 teststeps:
9 ‐ name: 获得token鉴权码API
10 api: api/get_token.yml
第二种:使用CSV文件,适合于参数较大的情况。
1 config:
2 name: 测试用例
3 parameters:
4 appid‐grant_type‐secret‐assert_str: ${P(data/get_token_data.csv)}
5 teststeps:
6 ‐ name: 获得token鉴权码API
7 api: api/get_token.yml
csv文件内容:
1 appid,grant_type,secret,assert_str
2 "wx74a8627810cfa308","client_credential","e40a02f9d79a8097df497e6aaf93ab8
0","access_token"
3 "","client_credential","e40a02f9d79a8097df497e6aaf93ab80","errcode"
4 "wx74a8627810cfa308","","e40a02f9d79a8097df497e6aaf93ab80","errmsg"
注意:
1.csv文件中第一行必须放参数名称,并且参数名称必须和测试用例里面的名称一致。
2.csv文件第二行放数据,每一组数据占一行。
3.parameters指定的参数顺序可以不一致,个数也可以不一致。
第三种:使用函数生成数据,适用于数据变化大的情况。
1 config:
2 name: 测试用例
3 parameters:
4 appid‐grant_type‐secret‐assert_str: ${get_token_data()}
5 teststeps:
6 ‐ name: 获得token鉴权码API
7 api: api/get_token.yml
函数代码:
1 #生成数据
2 def get_token_data():
3 return [
4
{"appid":"wx74a8627810cfa308","grant_type":"client_credential","secret":"e4
0a02f9d79a8097df497e6aaf93ab80","assert_str":"access_token"},
5 {"appid": "", "grant_type": "client_credential", "secret": "e40a02f9d79a
8097df497e6aaf93ab80","assert_str": "errcode"},
6 {"appid": "wx74a8627810cfa308", "grant_type": "", "secret": "e40a02f9d79
a8097df497e6aaf93ab80","assert_str": "errmsg"}
7 ]
二、httprunner文件上传
前提条件:需要安装如下两个包
pip install requests_toolbelt filetype
pip install "httprunner[upload]"
三、如何生成allure报告
第一步:
1.官网下载allure文件:Releases · allure-framework/allure2 · GitHub
2.下载之后解压到非中文的目录
3.把bin路径配置到系统变量path中:D:\BaiduNetdiskDownload\allure-2.13.7\allure-2.13.7\bin(注意分号不要是中文的)
第二步:
安装allure报告:pip install allure-pytest
验证:allure --version
注意:可能需要重启pycharm。
第三步:
1.在reports目录下生成temps目录,并且在temps目录下生产临时的json格式的临时报告。
1 os.system("hrun testsuites/test_suites.yml ‐‐alluredir=reports/temps ‐‐clean‐alluredir")
加上--clean-alluredir表示:每执行一次把原来的清除。
2.根据临时json报告生成allure报告
1 os.system("allure generate reports/temps ‐o reports/allures ‐‐clean")
加上--clean表示:每执行一次把原来的清除。
四、接口自动化框架文件对应关系
一个接口对应一个yaml文件,一个yaml文件对应一个csv文件。
优点:相对来说比较成熟,唯一的,不需要写脚本。
缺点:规则太难了,小心翼翼,报错机制不完善。有些功能不齐全。