本文为博主原创,未经许可严禁转载。
本文链接:https://blog.csdn.net/zyooooxie/article/details/113784217
前面分享了一篇 bearer token的接口 使用工具去请求,这次来说下 我是咋设计接口自动化测试框架的。
这是接口自动化测试框架的 category, 有兴趣 可以看看。
个人博客:https://blog.csdn.net/zyooooxie
需求
- 第一篇说到:登录后,在获取token时,2个模块 是要分别跑2个内部接口的;
- 我还是想用我写好的一套框架 : 详见【一】到【九】 ;
- 能够跑通即可【我只是为了练习】
requests.session() 用法
项目整体设计
代码
login_with_token.py
Bearer Token接口 重点在header;
class LoginWithToken(object):
def __init__(self, token=None):
# token 传cashLoan\largeLoan\None
self.token = token
@staticmethod
def login_app():
s = requests.session()
login_url = "https://zyooooxie/login.do"
login_dict = {
"deviceType": "zyooooxie",
"password": "zyooooxie",
"phoneNumber": "zyooooxie",
"deviceBrand": "zyooooxie"
}
res = s.post(login_url, data=login_dict, verify=False) # TODO 开了Fiddler抓包
if res.json()['data']['uid'] == 50010833:
print('登录成功')
return s
def get_token(self, session: Session):
if self.token is None:
return
if self.token == 'cashLoan':
print('执行cashLoan 获取token')
url_token = "https://zyooooxie/loan/cash/redirection/status.do"
header_token = {
"vc": "zyooooxie",
"dt": "zyooooxie"
}
method_token = 'post'
elif self.token == 'largeLoan':
print('执行largeLoan 获取token')
url_token = "https://zyooooxie/large/loan/redirection/status.do"
header_token = {
"dt": "zyooooxie",
"appVersion": "zyooooxie"
}
method_token = 'get'
else:
raise Exception('token字段值 传参有误')
res_token = session.request(method_token, url_token, headers=header_token, verify=False)
bearer_token = res_token.json()['data']['accessToken']
session.headers.update({
'Authorization': 'Bearer ' + bearer_token})
return session
test_cash_loan包
File:conftest.py
@pytest.fixture(scope='class')
def session_with_token():
lwt = LoginWithToken('cashLoan')
yield lwt.get_token(lwt.login_app())
print('退出 cashLoan')
File:test_cash.py
class TestCasesCash(object):
gl_excel_data = CommonFunctions.read_excel(r'D:\git\abc\zyooooxie\test_cash_loan\cash.xlsx', sheet_index=0)
@pytest.mark.parametrize('data', gl_excel_data)
def test_cash(self, data, session_with_token):
Log.debug(data)
feature, story, title, url, method, request_header, request_data, expected_data, remark, description, \
setup, teardown, need_setup_teardown, sql_select, sql_delete, re_extractor, account, function_extractor = data
if method == 'data':
res = SessionSendReq(session_with_token).send_post_data(test_url=url, test_header=json.loads(request_header),
new_data=json.loads(request_data))
assert res.text.find(expected_data) != -1
test_large_loan包
File:conftest.py
@pytest.fixture(scope='module')
def session_with_token():
lwt = LoginWithToken('largeLoan')
yield lwt.get_token(lwt.login_app())
print('largeLoan 退出')
File:test_large.py
class TestCasesLarge(object):
gl_excel_data = CommonFunctions.read_excel(r'D:\git\abc\zyooooxie\test_large_loan\large.xlsx', sheet_index=0)
@pytest.mark.parametrize('data', gl_excel_data)
def test_cash(self, data, session_with_token):
Log.debug(data)
feature, story, title, url, method, request_header, request_data, expected_data, remark, description, \
setup, teardown, need_setup_teardown, sql_select, sql_delete, re_extractor, account, function_extractor = data
if method == 'get':
res = SessionSendReq(session_with_token).send_get(test_url=url, test_header=json.loads(request_header),
params_data=json.loads(request_data))
assert res.text.find(expected_data) != -1
执行结果
本期分享到此;
下期 看能不能分享下 大佬的代码+思路;
交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie