接口自动化测试框架封装目的:
简化自动化框架的落地,提高投入和产出比,只要一个人封装好框架,另外的测试通过写yaml测试用例即可实现接口自动化
1.统一请求的封装
去除多余重复的代码
可跨py文件实现通过一个session来自动关联有cookie的接口
设置统一公共参数,统一文件处理,统一异常处理,统一日志监控,统一的用例校验等
import requests
class RequestUtil:
sess = requests.session();
def send_all_request(self,**kwargs):
#处理公共参数
total_headers= {
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,kog=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
for key,value in kwargs.items():
if key == 'headers':
kwargs["headers"].update(total_headers)
res = RequestUtil.sess.request(**kwargs)
return res
class Test_api:
def test_login(self):
headers = {
'Content - Type': 'application/json',
'Accept': ' * / * '
}
res=
RequestUtil().send_all_request(method=method,url=url,json=jsondata,headers=headers)
data = {"token":jsonpath.jsonpath(res.json(),'$.data.token',)[0]}
write_yaml(data)
print(data)
print(res.json())
2.数据和代码分离实现数据驱动
将测试数据与测试代码完全分离,提高代码复用性,便于维护和扩展测试用例
直接把测试数据写入yaml文件,写一个读取yaml文件的方法即可访问数据
读取yaml文件前需要线安装pyyaml和导入yaml模块
在common目录下新建yaml_util.py文件
读取yaml文件方法
def read_testcasecreatAC(yaml_path):
with open("test_creatActivity.yaml",encoding="utf-8")as f:
value = yaml.safe_load(f)
return value
- 数据提取:
- URL:caseinfo["request"]["url"]
- 方法:caseinfo["request"]["method"]
- 数据:caseinfo["request"]["json"]
- 头部:caseinfo["request"]["headers"]
@pytest.mark.parametrize("caseinfo", read_testcasecreatAC("test_creatActivity.yaml"))
def test_creatActivity(self,caseinfo):
url = caseinfo["request"]["url"]
method = caseinfo["request"]["method"]
headers = caseinfo["request"]["headers"]
headers["User_token"] = read_yaml("token")
e = headers["User_token"]
json= caseinfo["request"]["json"]
res = RequestUtil().send_all_request(method=method,url=url,json=json,headers=headers)
res.status_code == 200
- 动态传参:从yaml读取token值并更新请求数据
- 用例结构:
- 参数传递:caseinfo参数接收yaml中的数据字典
- 读取方法:使用@pytest.mark.parametrize装饰器读取yaml文件
- feature:表示接口所属模块
- story:接口名称
- title:用例标题
- request:包含method、url等请求信息
- validate:断言内容
yaml文件数据用例:
-
feature: 抽奖系统
story: 创建活动接口
title: 验证创建活动接口正常返回
request:
method: post
url: http://82.157.143.27:8083/activity/create
json:
activityName: "抽奖测试"
description: "测试"
activityPrizeList:
- prizeId: 26
prizeAmount: 1
prizeTiers: "FIRST_PRIZE"
- prizeId: 25
prizeAmount: 1
prizeTiers: "SECOND_PRIZE"
activityUserList:
- userId: 61
userName: "李向阳"
- userId: 60
userName: "张三"
headers:
User_token: ""
Content-Type: 'application/json'
Accept: "application/json"
validate: null