前言:前面写过一篇Pytest+Allure接口自动化测试框架搭建的博客,这篇博客学习另外一款优秀的开源的接口自动化测试框架:HttpRunner,本博客主要学习如何搭建基于HttpRunner的接口自动化测试项目
Pytest+Allure接口自动化测试框架搭建博客地址
(Python)Requests+Pytest+Allure接口自动化测试框架从0到1搭建_MRJJ_9的博客-CSDN博客
gitee仓库地址:
https://gitee.com/MRJJ_9/httprunner_project
目录
环境搭建
配置JSON文件
用例参数化
_test.py文件
查看报告
项目结构
环境搭建
安装httprunner
pip install httprunner
安装后查看常用命令
下载hrp,创建项目hrp
startproject httprunner_project
项目创建可参考下面的文章
httprunner 4.x学习 - 1 .环境准备与快速开始 - 上海-悠悠 - 博客园 (cnblogs.com)
配置JSON文件
JSON转YAML,YAML转JSON - 在线工具 - OKTools
JSON文件配置
配置url,url写到了配置文件env里,url=http://localhost:8080
参数传递,用$+变量名
填入请求方法,请求体
{"config": {"name": "验证登录接口","base_url": "${ENV(url)}","parameters": {"username": ["18999999999","","18999999999",""],"password": ["","ABCabc012!@#","ABCabc012!@#",""]},"verify": false},"teststeps": [{"name": "登录","request": {"method": "POST","url": "/test/login","headers": {},"body": "username=$username&password=$password"},"validate": [{"eq": ["status_code",200]},{"eq": ["body.code",-1]}]}]
}
用例参数化
可以使用以下格式实现用例的参数化
这种方式参数以笛卡尔积产生的组合进行传递,即产生测试用例4*4=16条
"parameters": {"username": ["18999999999","","18999999999",""],"password": ["","ABCabc012!@#","ABCabc012!@#",""]}
下面的这种格式,对应的测试用例有四条,键使用参数1-参数2的方式,里面的值是每条用例对应的传参,例如第一条用例的username对应18999999999,密码为空
"parameters": {"username-password": [["18999999999",""],["","ABCabc012!@#"],["18999999999","ABCabc012!@#"],["",""]]}
_test.py文件
自动生成的_test.py文件,里面的内容与用pytest框架写测试用例大致一样,@pytest.mark.parametrize实现参数化,发送Request请求,传递参数,进行断言,只不过HttpRunner进行了二次封装
# NOTE: Generated By HttpRunner v4.3.5
# FROM: .\testcases\login2.json
import pytest
from httprunner import HttpRunner, Config, Step, RunRequest
from httprunner import Parameters
class TestCaseLogin2(HttpRunner):@pytest.mark.parametrize("param",Parameters({"username-password": [["18999999999", ""],["", "ABCabc012!@#"],["18999999999", "ABCabc012!@#"],["", ""],]}),)def test_start(self, param):super().test_start(param)config = Config("验证登录接口").base_url("${ENV(url)}").verify(False)teststeps = [Step(RunRequest("登录").post("/test/login").with_headers(**{}).with_data("username=$username&password=$password").validate().assert_equal("status_code", 200).assert_equal("body.code", -1)),]if __name__ == "__main__":TestCaseLogin2().test_start()
查看报告
项目结构
testcases:存放生成的测试用例,需要先配置好json文件,再用命令行自动生成对应的_test.py文件,hrun login1.json,进入testcases文件夹后,将指定json文件生成_test.py文件,或者在工程目录下,执行:hrun testcases,会自动将testcases下的所有.json文件自动生成对应的_test.py文件
配置完成并生成_test.py文件后,就可以用pytest命令运行:pytest testcases --html=reports/result.html,输出在testcases下所有_test.py文件执行用例结果得到的最终测试报告
reports:存放生成的测试报告
.env:用于存放配置文件