接口自动化测试框架封装目的:
简化自动化框架的落地,提高投入和产出比,只要一个人封装好框架,另外的测试通过写yaml测试用例即可实现接口自动化
1.统一请求的封装
去除多余重复的代码
可跨py文件实现通过一个session来自动关联有cookie的接口
设置统一公共参数,统一文件处理,统一异常处理,统一日志监控,统一的用例校验等
import requestsclass 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: posturl: http://82.157.143.27:8083/activity/createjson:activityName: "抽奖测试"description: "测试"activityPrizeList:- prizeId: 26prizeAmount: 1prizeTiers: "FIRST_PRIZE"- prizeId: 25prizeAmount: 1prizeTiers: "SECOND_PRIZE"activityUserList:- userId: 61userName: "李向阳"- userId: 60userName: "张三"headers:User_token: ""Content-Type: 'application/json'Accept: "application/json"validate: null