首页 > 代码库 > [python测试框架] http接口测试框架
[python测试框架] http接口测试框架
https://testerhome.com/topics/5631
- Http 接口测试框架 (思路 + 实现中 + 开源 + 可能难产)
- Http 接口测试框架疑问解答
- Fiddler 保存会话 (请求)
说明
由于部分内容涉及公司机密,已用字母替换,不影响阅读
实际效果
- 验证1000个接口平均耗时6s(看机器配置及网速)
- 第一次投入使用,马上发现5个接口异常并且该验证过程不到30s的时间
框架的下一步
-
目前已兼容我们公司所有app
-
response body全字段验证(含字段类型)
- 已有思路
-
字段变化导致2个大问题
- 由原本int(0/1)变成了布尔型
- 时间戳长度由10位突然变成13位
-
尽量避免日常监控中跑接口对外网数据/用户的影响
- 目前做法是屏蔽相关接口
- 目前状态
- 跑接口时创建的数据id有变化,然而删除接口还是调用老的id去删除,导致数据删除不到
- 改进
- 拦截创建数据的response body取出对于id
- 拦截删除接口request body,传入上一步拦截的id
最新框架图(红色部分未完成)
部分代码
配置文件
http接口测试框架配置信息
tester = tester
project = A
versionName = 2.2.2
versionCode = 237
host = a-webapi.test.b.com
getTokenHost = http://a-webapi.test.b.com/api/System/GetToken
loginHost = http://a-webapi.test.b.com/api/User/LoginV2
loginInfo = Phone=13750199962&Password=FGgIwe5oCdk%3D
SessionsPath = D:\Fiddler Sessions
ApiURL = http://apihelper.b.com/Home/API/c
# SpecialSessions >> 屏蔽的接口
SpecialSessions = [‘GetToken‘, ‘LoginV2‘, ‘LogOut‘, ‘BookingV2‘]
启动测试入口
"""
运行api测试总入口
"""
import sessions.Request
def launcher_api_test():
"""
1.获取接口列表
2.与本地sessions对比
3.差异化文件,是否继续
3.1否 继续录制接口
3.2是 开始跑接口
:return:
"""
r = sessions.Request.Request(0) # 0 >> A 1 >> B
r.start()
if __name__ == "__main__":
launcher_api_test()
头部、登录接口
def __get_token_header(self):
"""
生成token头部
:return:
"""
des = self.__get_token_des()
arr = (des, self.conf[‘systemType‘], self.conf[‘Model‘], self.conf[‘Release‘], self.conf[‘DeviceId‘],
self.conf[‘versionCode‘], self.conf[‘versionName‘], self.conf[‘AppBuild‘], self.conf[‘DeviceOS‘], "0")
authorization = self.AUTHORIZATION_TOKEN % arr
headers = {‘Content-Type‘: ‘application/x-www-form-urlencoded; charset=utf-8‘, ‘Authorization‘: authorization}
response = self.session.post(self.conf[‘getTokenHost‘], headers=headers)
if json.loads(response.text)[‘StatsCode‘] == 200:
data1 = json.loads(response.text)[‘Data‘]
self.time = data1[‘Time‘]
self.TOKEN_NAME = data1[‘TokenName‘]
self.TOKEN_VALUE = data1[‘TokenValue‘]
else:
print("GetToken失败,请手动检查")
utils.HandleJson.HandleJson.print_json(response.text)
def __login_session(self):
"""
调用登录接口,这样后面的接口都能正常访问了
:return:
"""
url_login = self.conf[‘loginHost‘]
headers = self.__get_session_header(url_login.split(‘api/‘)[-1])
data_login = r‘%s‘ % self.conf[‘loginInfo‘]
response = self.session.post(url_login, headers=headers, data=data_login)
if json.loads(response.text)[‘StatsCode‘] == 200:
data1 = json