前言:前面写过一篇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:用于存放配置文件