在做接口自动化时,大部分的接口都需要保持登录状态才可以操作,针对不同项目的处理方式不同,这篇主要记录使用session来保持登录状态的处理。主要从两个方面来介绍:设置全局session和其他接口进行调用。
1.利用登录接口设置一个全局的session,登录成功后return session,其他接口调用的登录的session,使session保持一致性
import requests
import json
import settings
s = requests.Session() # 设置session全局变量
class LoginSession:
# url和登录数据可以写死或者写在配置文件中数据和代码分离,根据具体项目需求灵活变动
url = settings.PROJECT_HOST + settings.INTERFACE['wechat_login']
mobile = settings.WECHAT_LOGIN_DATA['mobile']
openId = settings.WECHAT_LOGIN_DATA['openId']
def login(self):
"""
登录session
"""
data = {
'mobile': self.mobile,
'openId': self.openId
}
# from表单的形式传参,需要将参数转换一下 # 注意请求参数的请求格式,这里是from表单形式的
data = json.dumps(data)
# 对于headers根据不同项目有不同的方式,可参考接口文档或者询问api开发,也可以根据抓包进行分析
headers = {'Content-Type': 'application/json'}
headers.update(settings.CUSTOM_HEADERS['v1'])
res = s.post(url=self.url, data=data, headers=headers).json()
return s
# 创建一个具体对象,方便调用
LSession = LoginSession().login()
2.其他接口进行调用时导入LSession,使用LSession代替request请求接口
from common.test import LSession
import settings
def baseinfo():
"""查询用户信息"""
url = settings.PROJECT_HOST + settings.INTERFACE['baseinfo']
headers = settings.CUSTOM_HEADERS['v1']
res = LSession.get(url=url, headers=headers).json()
return res
print(baseinfo())