🍦 会话保持-token
有的网站登录需要token鉴权,是啥意思呢,现在有两个接口,一个接口是登录,一个接口是提交订单,那你怎么保证,提交登录这个用户是登录状态呢。登录成功的接接口会在response里面返回token,我们拿到token之后再把它放到订单接口的请求头里面,这样一个流程就实现了登录的鉴权。
🍦 会话保持权-cookie
同token,只不过cookie不是再response里面,直接是返回结果的.cookie.然后订单接口的时候传参,参数直接加上cookie这个值。
🍦 会话保持 requests Session模块
会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie。怎么用呢
session = requests.session()url = "https://easy-mockhome,avzhg,com:10443/mock/61922bfd6e616600281c7c3e/test/1oginjson ={'user": "user","password': "123"}
result = session.post(url, json=json, verify=False)tek=result.json().get('data').get('cookie")
session.headers.update({'toker': tok})
print("接口一打印:",session.headers)
Url = "https://easy-mock,home,gyzhg.com:10443/mock/61922bfd6e616680281c7c3e/test/logout
json={}
result = session.post(url,json=json, verify=False)print("换口二打印:",session.headers)
可以看到headers都是一样的,这样就实现了会话保持
🍦 使用装饰器实现会话保持
接下来使用装饰器实现,首先登录是一个装饰器,其他函数是被装饰器的。我们要做什么呢,每次登录的时候去检查登录状态,如果登录了就不操作,如果没有登录就需要去做登录操作。这是一个登录的装饰器
def login(fun):
def login_true(*args, **kwargs):
if session.headers.get('token') is None:
url = 'https://easy-mock.home.gyzhg.com:10443/mock/61922bfd6e616600201c7c3e/test/login'json ={'user': args[0],'password': args[1]}
result =session.post(url,json=json, verify=False)tok = result.json().get('data').get('cookie')session.headers.update({'token': tok})
print('login',json,result.json())
fun(*args,**kwargs)
else:
print('用户已经登录")
fun(*args, **kwargs)
return login_true
登录之后我把token塞进到了headers里面。接下来是一个购买的接口,我想切换用户,所以我传了两个参数。
@login
def buy(user, password):
url = 'https://easy-mock.home.gyzhg.com:10443/mock/61922bfd6e616600201c7c3e/test/buy
json = {}
result =session.post(url,json=json,verify=False)
assert result.json().get('data').get('message')== 'success'
print('buy',result.json())
return result.json()
看一下效果
流程是现在有两个函数,一个是购买操作,一个是退出操。调用顺序是这样的
if__name__ =='__main__'print(buy('user','123'))print(logout())print(buy('user','123'))
购买传入两个参数,再退出,再去购买 看一下结果。
E:\python3.8\python.exe E:/test locust/11.25.py('login', i'user': 'user', "password': "123', i'data': i'status': 200, 'cookie’: "ERTYUCLLL@#$$^==’}}, ('buy', i'data': i'statu('用户已经登录’,('logout",{'data':{'status':200,'message':'注销成功"}}))('login', f'user': 'user’, "pasword': "123'+, i'data': i'status’: 2, 'cookie’: 'ERTYUCLLL@$;^==’, ('buy', {'data': i'status
可以看到首先是登录,登录之后去下单,然后退出,再去登录,再去下单。现在就实现了会话保持的装饰器。