python简单接口测试框架
2021-01-09 本文已影响0人
非鱼2018
python接口测试使用requests库,实际使用当中,其实套路都是类似的,比如,前置的登录,再访问某个接口获得权限
而且同一个项目中,header的content-type基本都是相同的,比如都是json,请求数据类型也基本类似,常用的无非也就是post请求,和get请求,因此可以将最基本的登录,以及最基本的发送请求封装成基础类,
编写业务接口用例时,只需要使用组合类,传递不同的数据以及解析返回内容即可
框架代码
# coding=utf-8
# 接口测试框架
import requests
from requests.exceptions import RequestException
import json
import sys
class InerfaceLoginError(Exception):pass #自定义异常
class Login: #登录
login_url = 'http://mytest.login.com' #定义登录的url以及用户密码等
login_data = {"username": "feiyu1009",
"password": 123456,
"verify": True
}
session = requests.Session() #使用session会话维持
access_url = "http://mytest.route"
def __init__(self, username='feiyu1009', password=123456): #默认用户,如果不同用户,实例化login时可传递不同用户密码
self.username = username
self.password = password
def login(self):
Login.login_data.update(username=self.username, password=self.password)
response = Login.session.post(Login.login_url, Login.login_data)
if response.status_code == 200:
print("登录成功")
else:
print("登录失败")
raise InerfaceLoginError()
def get_access(self): #访问接口获取对应权限
Login.session.get(self.access_url)
def get_session(self):
self.login()
self.get_access()
return Login.session #返回登录后的session
class SendRequest:
headers = {"Content-Type": "application/json;charset=utf-8"}
def __init__(self, session, url, data=None,request_type='GET'):
self.session = session
self.url = url
self.data = data
self.request_type=request_type
def send_get(self):
try:
response = self.session.get(self.url, self.data)
if response.status_code == 200:
return response.json()
return None
except RequestException:
return None
def send_post(self):
try:
response = self.session.post(self.url, json.dumps(self.data), SendRequest.headers)
if response.status_code == 200:
return response.json()
return None
except RequestException:
return None
def __call__(self): #定义call方法,实现只要传递request_type,内部判断使用send_get还是send_post
if self.request_type.upper()='POST':
self.send_post()
elsif self.request_type.upper()='GET':
self.send_get()
业务用例代码,只需要编写业务接口用例即可
class QueryData:
query_url = ""
post_data = """ {"name": "aaa", "status": true, "type": null}"""
def __init__(self):
self.login = Login().get_session()
def query_data(self, query_name):
json_data = json.loads(QueryData.post_data)
json_data.update(name=query_name)
sr = SendRequest(self.login, QueryData.query_url, json_data,'post')
#response = sr.send_post()
response =sr()
return response
#省略实际的返回结果校验
if __name__ == '__main__':
qa = QueryData()
qa.query_data('feiyu1009')