背景:因为把传入接口参数、组建测试用例、执行测试用例和发送报告,都放入一个.py文件对于接口的使用非常不灵活就需要数据和接口业务进行分离让代码之间的 耦合性降低。和实现接口的分层管理,所以需要对代码进行封装处理。 接口分层思想: cms_api:组建并发送接口请求 config:放所有接口的入参信息 report:放置运行所有测试用例生成的报告 run:自动加载所有的测试用例、并且运行 testcase:继承unittest单元测试框架、组建接口测试用例 utils:工具类、发送邮件和生成报告模块
接口分层思想:
cms_api:组建并发送接口请求
config:放所有接口的入参信息
report:放置运行所有测试用例生成的报告
run:自动加载所有的测试用例、并且运行
testcase:继承unittest单元测试框架、组建接口测试用例
utils:工具类、发送邮件和生成报告模块
(1)接口自动化测试框架分层结构:
1.1 第一个模块 cofing
Cms_cofing 模块是存放接口的必要信息
组建接口:url地址,data、headers
下面我们定义了三个接口请求参数;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | # cms_api:组建并发送接口请求 # config:放所有接口的入参信息 # report:放置运行所有测试用例生成的报告 # run:自动加载所有的测试用例、并且运行 # testcase:继承unittest单元测试框架、组建接口测试用例 # utils:工具类、发送邮件和生成报告模块 # 构建一个接口请求需要哪些参数: # Cms环境中的接口 # 1、登录接口 logjump_url = 'http://129.226.122.199/:8080/cms/manage/loginJump.do' logjump_data = { 'userAccount' : 'admin' , 'loginPwd' : 123456 } logjump_headers = { 'Content-Type' : 'application/x-www-form-urlencoded' } # 2、用户管理接口 UserList_url = 'http://129.226.122.199:8080/cms/manage/queryUserList.do' UserList_data = { 'startCreateDate' :'' , 'endCreateDate' :'', 'searchValue' : '', 'page' : 1 } UserList_headers = { 'Content-Type' : 'application/x-www-form-urlencoded' } # 3、搜索用户接口 list_url = 'http://129.226.122.199:8080/cms/manage/queryUserList.do' list_data = { 'startCreateDate' :'' , 'endCreateDate' :'' , 'searchValue' : 'ZSAN' , 'page' : 1 } list_haeders = { 'Content-Type' : 'application/x-www-form-urlencoded' } |
1.2第二模块快 cms_api
cms_api:组建并发送接口请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | '' ' 组建接口的请求 '' ' # 通过封装一个工具类来组建接口请求 # import requests # session=requests.Session() #创建一个对象保持向下接口会话 # from Cms_cofing.cmsapi import * # class C_api(object): # def __init__(self): # pass # def logjump(self): #构建了一个登录接口 # rep=session.post(url=logjump_url,data=logjump_data,json=logjump_headers) # # return rep # # print(rep.text) # js=rep.json() #转换成为js格式 # return js # def userlist(self):#用户管理接口 # rep=session.post(url=UserList_url,data=UserList_data,json=UserList_headers) # # return rep # print(rep.text) # def list(self):#用户搜索接口 # rep=session.post(url=list_url,data=list_data,json=list_haeders) # # return rep # print(rep.text) # if __name__ == '__main__': # cms=C_api()#创建一个对象 # cms.logjump()#对象调用登录接口 # cms.userlist()#对象调用用户管理接口 # cms.list()#对象调用搜索接口 |
三、
# testcase:继承unittest单元测试框架、组建接口测试用例
断言:
# utils:工具类、发送邮件和生成报告模块\
coifng.ini文件
#python 中做关联接口
import requests #接口模块
import re #正则匹配模块
class C_api: #定义一个类
def cs(self): # 省份接口
url='http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportProvince'
header={'Content-Type': 'application/x-www-form-urlencoded'}
rep=requests.post(url=url,data=header)
#print (rep.text) #拿到了所有的省
r =re.findall('<string>(.+?)</string>',rep.text)
# print type(r) #<type 'list'>
# 在当前路径中匹配一次或者多次对应的值,匹配到后不贪婪
return r
def fun(self): #城市接口
a =self.cs() #方法的传递
c_url='http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity'
data={'byProvinceName':a[16]} #通过索引来取省份当中城市接口的入参
c_header={'Content-Type': 'application/x-www-form-urlencoded'}
rep=requests.post(url=c_url,data=data,json=c_header)
print (rep.text)
if __name__ == '__main__':
C =C_api() #创建一个对象
# C.cs()
C.fun() #对象调用城市接口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架