一.什么是Httprunner
1.HttpRunner是面向HTTP(S)协议的通用测试框架,只需编写维护一份YAML/JSON脚本
1.1.即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求
2.核心特征
2.1.继承Requests的全部特性,轻松实现HTTP(S)的各种测试需求
2.2.测试用例与代码分离,采用YAML/JSON的形式描述测试场景,保障测试用例具备可维护性
2.3.测试用例支持分层机制,充分实现测试用例的复用
2.4.测试用例支持参数化和数据驱动机制
2.5.使用skip机制实现对测试用例的分组执行控制
2.6.支持热加载机制,在文本测试用例中轻松实现复杂的动态计算逻辑
2.7.基于HAR实现接口录制和用例生成功能(har2case)
2.8.结合Locust框架,无需额外的工作即可实现分布式性能测试
2.9.执行方式采用CLI调用,可与Jenkins等持续集成工具完结合
2.10.测试结果统计报告简洁清晰,附带详尽统计信息和日志记录
2.11.具有可扩展性,便于扩展实现Web平台化(HttpRunnerManager)
二.HttprunnerV4版本
1.开发语言:Golang+Python
2.脚本转换工具:HAR/Postman/Swagger/Curl
3.脚本格式类型:YAML/JSON/pytest/gotest
4.脚本执行引擎:Go自研+Python pytest
5.接口测试报告:html自研(Go template)+pytest-html/allure
6.性能测试引擎:Go Boomer
7.运行环境依赖:Go引擎无需依赖、pytest引擎依赖Python3.7+
8.安装部署方式:curl/wget/pip
三.版本对比(V1/V2/V3/V4)
四.V4版本的GO&Python功能对比
五.HttprunnerV4.3.5框架与unittest&pytest框架的区别
1.使用语言和用途
2.学习曲线和复杂性
3.功能和特性
4.优劣势总结
六.Httprunner下载
1.一键安装部署(MAC)
$ bash -c "$(curl -ksSL https://httprunner.com/script/install.sh)"
1.1.如报错提示:无权限则使用sudo命令进行安装
sudo bash -c "$(curl -ksSL https://httprunner.com/script/install.sh)"
1.2.检查httprunner安装版本:httprunner -V or hrun -V
1.3.检查hrp是否安装成功:hrp -h
2.通过pip安装:(通用Mac&Windows)
2.1.建议:安装到虚拟环境下,这样可切换使用不同版本的httprunner
//指定版本安装,不加默认下载最新
pip install httprunner==4.3.5
//“V”一定要大写,不然如下图报错
2.2.查看版本:hrun -V
2.3.解决方法
//更新升级pip
2.3.1.python -m pip install --upgrade pip
2.3.2.升级后依然下载失败,可能pip源内找不到httprunner(Windows常见),更新pip的镜像源即可
//豆瓣镜像源
pip install -i https://pypi.douban.com/simple httprunner
//清华大学镜像源
pip install -i https://pypi.tuna.tsinghua.edu.cn httprunner
七.hrp下载
1.安装httprunnerV4.3.5后,还无法使用hrp命令行工具,需要下载编译产物
1.1.在GitHub Releases页面中自行选择版本进行下载
2.配置hrp的环境变量
2.1.Mac:打开终端进入配置
//如果使用的是bash shell
2.2.vim ~/.bash_profile
//如果使用的是zsh shell
2.3.vim ~/.zshrc
2.4.进入后添加环境变量:(vim:敲“i”->Enter进入编辑)
export PATH="/usr/local/hrp/bin:$PATH"
## /usr/local/hrp/bin/hrp 为hrp的文件路径 保存并关闭文件
## (vim:保存退出=>Esc-->:wq-->Enter 保存并退出)
2.5.生效配置:
source ~/.bash_profile
source ~/.zshrc
2.6.验证环境变量配置: hrp -h or hrp -v
3.配置hrp的环境变量
3.1.Windows:将下载的包解压后的hrp.exe放在C盘httprunner文件目录下(自定义目录)
3.2.在【我的电脑=>属性=>高级系统设置=>环境变量=>系统变量】,在PAHT下新
增变量:C:\\httprunner确认保存即可
3.3.验证环境变量配置:hrp -h or hrp -v
八.创建手脚架项目
1.使用命令hrp startproject demo新增httprunner项目并命名为demo
九.录制生成HAR文件
1.采用Charles等抓包工具制HAR文件,以及Chrome等浏览器均可以导出HAR格式的文件
十.将录制生成的HAR转换生成测试用例
1.HttpRunner4.x将所有的转换功能都集中在hrp convert一个指令中
1.1.通过执行hrp convert -h可以查询该指令的功能简介、用法和各个选项的介绍
# 将HAR文件默认转换成转换成Json文件--文件名为xxx_test.json
hrp convert --from-har xxx.har
# 将HAR文件转换成YAML文件--文件名为xxx_test.yaml
hrp convert --from-har xxx.har --to-yaml
# 将HAR文件转换成Json文件--文件名为xxx_test.json
hrp convert --from-har xxx.har --to-json
# 将HAR文件转换成pytest文件
hrp convert --from-harxxx.har --to-pytest
2.注释
2.1.执行hrp convert --from-har xxx.har --to-pytest命令
2.2.会先将xxx.har转化成xxx_test.json
2.3.然后再将xxx_test.json转化成xxx_test_test.py
3.hrp convert指令支持指定目录输出,--output-dir后接测试用例的期望输出目录的路径
3.1.用于将转换生成的测试用例输出到对应的文件夹
# 输入文件到当前目录下的demo/cases文件夹中
hrp convert --from-har xxx.har --to-pytest --output-dir demo/cases
4.执行测试用例:JSON/YAML(/pytes)类型的测试用例文件,httprunnerV4.x使用hrp run命令执行
hrp run xxx.json ##执行json测试用例
hrp run xxx.yaml ##执行yaml测试用例
hrp run testcases/ ##执行testcases文件下所有测试用例
4.1.pytest文件可通过pytest命令执行改测试用例文件:pytest xxx.py
4.2.目前的HttpRunner支持运行pytest的测试用例进行接口测试
4.3.由于HttpRunner wraps pytest,因此pytest所有的参数都可以与hrp命令一起使用
十一.手工编写测试用例
1.pytest,YAML和JSON格式的测试用例完全等价,包含的信息内容也完全相同
2.在httprunner中,测试用例组织主要基于三个概念
2.1.测试用例集(testsuite):
对应一个YAML/JSON/Python文件,包含单个或多个测试用例文件
通俗来讲,测试用例集就是「一堆」测试用例
对应地,HttpRunner 除了支持指定单个文件来运行某一测试用例
也支持指定多个文件或指定文件夹来运行一整个测试用例集
2.2.测试用例(testcase):
对应一个YAML/JSON/Python文件,包含单个或多个测试步骤
2.3.测试步骤(teststep):
对应YAML/JSON/Python中teststeps下的一个节点
描述单次接口测试的全部内容,包括发起接口请求、解析响应结果、检验结果等
3.pytest,YAML和JSON格式的测试用例,用例结构整体结构都包含两部分
3.1.config:每个测试用例都必须有config部分,作为整个测试用例的全局配置项,用于配置用例
3.2.teststeps:包含测试步骤相关信息,测试用例存在顺序关系
3.2.1.运行时将从前往后依次运行各个测试步骤,其中步骤可以引用其他测试用例
十二.手工编写测试用例–示例
1.创建request.yaml文件
2.创建request.py文件
十三.手工编写测试用例–实例
1.创建homepage.yaml文件
2.创建homepage.py文件
十四.变量variables
1.声明变量和引用是经常用到的,引用变量方式有两种:$var或${var}
1.1.通过关键字variables定义变量主要在config和step中
2.这两者的区别
2.1.在config中定义的变量为全局变量的,范围比较大
2.1.1.也就是整个测试用例(testcase)的所有地方都可以引用
2.2.在step中定义的变量为局部变量,范围比较小,局限于当前测试步骤(teststep)
3.注释:
3.1.config全局变量和ste局部变量名最好不要相同
3.1.1.当出现相同时,step变量优先级大于config变量
十五.提取extract返回结果
1.extract:V4支持2种响应结果字段提取方式
1.1.jmespath表达式:响应结果为JSON结构,采用jmespath表达式进行参数提取
1.2.正则表达式(regex):返回的非JSON格式,可以用正则表达式(regex)提取
2.extract提取的对象有5种类型
2.1.headers:从响应 headers 中提取字段,例如 headers.name
2.2.cookies:从响应 cookies 中提取字段,例如 cookies.Token
2.3.body:从响应 body 中提取字段,例如 body.args.foo1
2.4.status_code:提取响应状态码,例如 200、404
2.5.proto:提取协议类型,例如 “HTTP/2.0”、“HTTP/1.1”
十六.断言validate
1.断言validate:使用jmespath提取JSON响应正文(text/html格式用正则表达式提取)并使用预期值进行验证
2.提取结果:jmespath表达式或正则表达式提取
3.预期值:这里也可以使用指定的预期值、变量或函数引用
4.断言方式
十七.辅助函数-debugtalk
1.v4支持go语言和Python语言写辅助函数
1.1.在根目录编辑debugtalk.py文件写辅助函数实现自动化生成动态参数
十八.辅助函数-debugtalk–引用(与引用变量方式一致)
1.实例:homepage.yaml
十九.参数化parameters
1.实现参数化使用parameters关键字,数据源有三种方式
1.1.在yaml文件中直接写测试数据源,最为简单,适合参例表比较少的场景
1.2.测试数据源写到csv文件,该种方式需要准备CSV数据文件,适合数据量比较大的情况
1.3.自定义函数,函数返回列表形式数据,该种方式最为灵活
1.3.1.可通过自定义Python函数实现任意场景的数据驱动机制
1.3.2.当需要动态生成参数列表时也需要选择该种方
2.单个参数进行参数化
3.关联性参数化:常用-账号密码
4.笛卡尔积组合
4.1.假如测试用例中定义多个参数
4.1.1.那么测试用例在运行时会对参数进行笛卡尔积组合,覆盖所有参数组合情况
账号有4种[admin1, admin2, admin3, admin4]
密码有4种 ["123456", "123456", "123456", "123456"]
用笛卡尔积组合的话,就是4*4=16种组合
5.CSV文件:对于CSV数据源文件,需要遵循如下几项约定的规则
5.1.CSV文件中的第一行必须为参数名称,从第二行开始为参数值,每个(组)值占一行
5.2.若同一个CSV文件中具有多个参数,则参数名称和数值的间隔符需实用英文逗号
5.3.在YAML/JSON文件引用CSV文件时,文件路径为基于项目根目录(debugtalk.py所在路径)的相对路径
6.外部函数(debugtalk)
6.1.用debugtalk.py中自定义的函数生成参数列表,生成的参数列表必须为list of dict 的数据结构
6.2.需对user_id进行参数化数据驱动,那么就可以在debugtalk.py中定义一个函数,返回参数列表
二十.环境变量.env
1.在前面最初新建httprunner项目后,在根目录下自动生成.env文件
1.1.V4版本中内置了函数ENV读取环境变量的值,可直接使用${ENV(key)}进行引用
二十一.原生HTML测试报告
1.V4版本自带原生的html测试报告,可通过hrp run -h得知:hrp run <用例> -g
1.1.(不管在那个目录下运行,同一根目录会生成results文件件)
二十二.Allure测试报告
二十三.Allure下载及安装
1.下载安装Allure
2.配置环境变量(Windows&Mac)
3.验证环境变量是否配置成功: allure --version 显示版本信息则配置成功
4.在Python中下载allure-pytest插件:pip install allure-pytest
二十四.Allures使用
1.执行用例并生成报告:存放路径,--clean-alluredir清空历史数据
pytest <用例> -s -q --alluredir ./results --clean-alluredir
2.运行后可以看到生成了txt,json,xml等格式的文件,还未生成HTML格式
3.接着可执行:allure generate report/ -o results/html --clean
二十五.其他
1.引用其他用例
2.upload文件上传:需要2个依赖包
pip install requests_toolbelt filetype
3.将测试报告发送邮件及发送到群聊
4.后续计划
4.1.补充完善yaml接口用例
4.2.与Jenkins集成实现定时执行
4.3.Httprunner4.3.5+Locust 实现性能压测
4.4.Httprunner4.3.5+Locust+Grafana实现性能监控