Requests接口测试-对cookies的操作处理(三)
我们大家都知道cookie是有时效的,会存在一个过期现象。如果cookie不生效,就无法访问后续的其他接口,如何解决这个问题呢?我们可以借助unittest单元测试框架的测试固件来帮助我们解决。废话不多说了,来看一下整个过程的实现,整体代码解析如下:测试固件的作用是可以保证每次服务器返回的session是最新的,避免的失效问题,方便其他接口调用。
@classmethod
def setUpClass(cls):
r = requests.post(
'http://xxxxxxx:20080/auth/login',
data={"username":'system',"password":"123456"})
with open('cookie','w') as f:
f.write(r.cookies['session'])
@classmethod
def tearDownClass(cls):
pass
定义一个readCookie方法,目的是方便读取写入文件中的cookie。
def readCookie(self):
with open('cookie','r') as f:
return f.read()
两条接口测试用例,都带上登陆成功后的cookie,另外测试用例的命名要以test开头。
def test_getInfo(self):
r =requests.get('http://xxxxxx:20080/settings/option/cloud/data',
cookies={"session":self.readCookie()})
return r.json()
def test_getData(self):
r=requests.get('http://xxxxxx:20080/settings/option/ipaddr/data',
cookies={"session":self.readCookie()})
return r.json()
整体代码的实现:
import requests
import unittest
class CookieGet(unittest.TestCase):
@classmethod
def setUpClass(cls):
r = requests.post(
'http://xxxxxxxx:20080/auth/login',
data={"username":'system',"password":"123456"})
with open('cookie','w') as f:
f.write(r.cookies['session'])
@classmethod
def tearDownClass(cls):
pass
def readCookie(self):
with open('cookie','r') as f:
return f.read()
def test_getInfo(self):
r =requests.get('http://xxxxxxx:20080/settings/option/cloud/data',
cookies={"session":self.readCookie()})
return r.json()
def test_getData(self):
r=requests.get('http://xxxxxxxx:20080/settings/option/ipaddr/data',
cookies={"session":self.readCookie()})
return r.json()
if __name__ == '__main__':
unittest.main()
我们可以找一个互联网项目进行实战一下cookie的操作,比如登陆人人网,有兴趣的可以去尝试一下,我把整个测试代码发出来,方便大家去参考:
'''Cokkie的获取以及实战'''
data={'email':'xxxxxx@qq.com','icode':'','origURL':'http://www.renren.com/home',
'domain':'renren.com','key_id':'1','captcha_type':'web_login',
'password':'658ad9d22407ed607048fc41f388cec8798a77e61a29935b24ba909a1aa89923',
'rkey':'9e75e8dc3457b14c55a74627fa64fb43','f':'http%3A%2F%2Freg.renren.com%2Fxn6218.do%3Fss%3D10756%26rt%3D27'}
def renLogin():
'''获取登陆后返回的cookie'''
r=requests.post(url='http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2018661516954',
data=data)
return r.cookies
def info():
'''查看信息'''
data={'month':'7','requestToken':'-505719466','_rtk':'ad9c53b0'}
r=requests.post('http://sc.renren.com/scores/loadBornInfo',
data=data,
cookies=renLogin())
print(r.text)
info()
将喜欢的一切留在身边,这便是努力的意义。