1.HttpRunner是什么样的框架
HttpRunner是一款面向HTTP(S)协议的通用开源测试框架,支持3种格式的用例:YAML/JSON/Pytest代码,即可实现自动化测试、持续集成等多种测试需求。
可以支持的接口协议:HTTP(S)
不支持的接口协议:websocket、dubbo等其它
HttpRunner3与其他框架对比有哪些优势?
HttpRunner的优势在于上手容易(不用太多代码量)只需维护YAML/JSON脚本即可实现接口自动化
Httprunner3可以直接写Pytest风格的测试用例
当然复杂的场景需借助debugtalk.py写辅助函数完成
HttpRunner 的设计 & 实现
充分复用优秀的开源项目,不追求重复造轮子
借鉴优秀(开源)项目
3.主要特性(能做什么,不能做什么)
①.继承Requests的全部特性,轻松实现HTTP(S)的各种测试需求
②.以YAML或JSON格式定义测试用例,Pytest以简洁优雅的方式运行。
③.在HAR支持下记录并生成测试用例。
④.支持variables/extract/validate/hooks机制,以创建非常复杂的测试方案。
⑤.使用debugtalk.py插件,任何功能都可以在测试用例的任何部分使用。
⑥.使用jmespath,提取和验证json响应从未如此简单。
⑦.有了Pytest,数百个插件随时可用。
⑧.使用Allure,测试报告可以非常强大。
⑨.通过重复使用Locust,您可以进行性能测试,而无需进行额外的工作。
⑩.支持CLI命令,与CI/CD完美结合。
4.YAML/JSON/Pytest用例示例
①yaml结构testcase
②JSON格式的testcase
JSON和YAML在线转换
JSON和YAML在线转换 在线转换
③Pytest格式示例
总结
Httprunner3.x可以支持3种格式脚本
-Json
-Yaml
-Pytest
Json和Yaml差异不大,2个可以互相转
Httprunner3.x最大的特点是基于Pytest框架了,
官方建议尽量写Pytest风格脚本,
pycharm等编辑器会带出对应方法(避免关键字单词记不住的问题)
1.Windows10
2.Pythonv3.9.X(强烈建议使用Python3.6及以上版本 不要python 3.10)
3.HttpRunnerv3.1.6(目前最新版)
4.Pycharm
1.pip安装HttpRunner,不指定版本,默认为最新版本
pip install httprunner
2.如果安装超时,可以加豆瓣下载源–index-url
# 指定一个版本
pipinstallhttprunner==3.1.6--index-urlhttps://pypi.douban.com/simple
hrun -h
har2case -h
hmake -h
4.pip卸载HttpRunner
pip uninstall httprunner
检查版本
安装完成后,检查我们的版本,注意版本号,一定要一样
hrun-V
>pip3 show har2case
如果没有安装har2case 可以手动再次安装
命令介绍-h
httprunner -h
需注意的是这里用的是httprunner命令(并不是hrun)
startproject创建项目
>httprunner startproject demo
make是把JSON/yaml测试用例转换为pytest测试用例。需要指定yaml/JSON文件路径或者文件夹路径。执行后生产对应的pytest用例
run执行用例
>httprunner run testcases
run命令实际上有两个动作,一个是把JSON/yaml测试用例转换为pytest测试用例,同make
另一个是用pytest执行测试用例
抓包生成 .har 文件
> har2case -2y login.har
-2y参数是设置转成.yml格式的脚本,如果不加这个参数,默认转成json格式 运行用例 .yml格式脚本生成后,接下来使用hrun运行用例
> hrun test_login_demo.yml
生成 json 格式脚本
> har2case -2j demo.har
har2case默认生成json格式的脚本
生成 Pytest 格式脚本
> har2case logino.har
不带参数直接转 Pytest 用例
–filter 和 --exclude(其实用处不是很大,可以直接在fiddler工具上删掉不要的请求 Fiddler 会话框选中不要的请求 Remove)
可以使用filter参数,过滤 url 包含xxx.com的内容,如只转包含127.0.0.1的 url 请求
> har2case demo.har --filter 127.0.0.1
也可以使用exclude来过滤,除xxx.com以外的内容
> har2case demo.har --exclude xxxx.com
如果保存的会话有多个请求
使用–filter参数,过滤 url 包含xxx.com的内容
>har2case -2y C:\Users\dell\Desktop\duo.har --filter http://49.235.92.12:7005/
>har2case -2y C:\Users\dell\Desktop\duo.har
httprunner 3.x 版本弱化了api层的概念,直接在 testcase 中写 request 请求,如果是单个请求,也可以直接写成一个 testcase 。每个 testcase 必须具有两个类属性:config 和 teststeps
Httprunner发送请求是基于requests库
request中的描述形式requests.request完全相同
当使用data传值时,入参为object类型,在发送前,request将参数前置处理,在body中处理成格式为k1=v1&k2=v2 格式,content_type:application/x-www-form-urlencoded(注意:当如上字典多层嵌套时,只能解析到第一层,value值必须为字符串,否则会解析出错)
当request使用json传值时,入参为json字符串,在发送前,request将参数前置处理,在body中处理成格式为json字符串,content_type:application/json
1.get请求不带参数/api/test/demo Yaml示例
2.get请求带参数(params) yaml演示
/api/v1/goods?page=1&size=2
base_url 是部署接口项目环境地址
部署环境地址和端口是有可能会变的
http://49.235.92.12:8201/api/test/demo
部署环境: 包含http协议 、 ip(49.235.92.12)或域名 、 端口8201(不写打开默认80) http://49.235.92.12:8201
接口地址:只端口后面的参数 /api/test/demo /api/v1/goods
部署环境是可以变的,比如test环境,uat 环境,pre环境 接口地址不变
如果不开代理工具如fiddler,直接请求是没问题的
打开fiddler代理工具,会报: requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:841)
TRequest 默认 verify: False 忽略对证书的校验
Post请求参数类型 content-type:application/x-www-form-urlencoded
案例
/api/v4/login
Content-Type: application/x-www-form-urlencoded
username=test&password=123456
Request 发请求传data参数
teststeps 中变量对当前 step 有效
config 中变量在整个 yaml 中都生效
Variables 声明变量 $var 引用变量
变量优先级:如果 Config 和 Step 中都有同一变量
Step变量> Config变量
validate 校验结果
使用 jmespath 提取 JSON 响应正文并使用预期值进行验证。