利用session請求和cookie請求,token比較特殊不同於前面二者後面補上在這邊文章末尾
阿新 • • 發佈:2018-12-21
先說session吧:眾所周知http請求是無狀態的,需要靠session來維持會話,而session與cookie又緊密聯絡通過儲存在cookie裡面的sessionid;接下來講如何利用這一機制傳送請求
"""pt:1session保持傳送登陸後的介面請求"""
# coding=utf-8
import json
import requests
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
data = {"userAccount": "admin", "loginPwd": "123456"}
global session
s = requests.session()
s.post(url="http://192.168.229.128:8080/cms/manage/loginJump.do", data=data)
session =s
@classmethod
def tearDownClass(cls):
pass
def test_session(self):
datas = {'userName': 'zhangsan', 'userEmail': ' [email protected]',
'userMobile': '18871027706', 'userSex': '1','userAccount': 'dev', 'confirmPwd': '123456', 'loginPwd': '123456', 'id': ''}
conn = session.post(url="http://192.168.229.128:8080/cms/manage/saveSysUser.do", data=datas)
print conn.content
if __name__ == "__main__":
unittest.main()
結果如下:
C:\Python27\python.exe "D:\Pycharm\PyCharm 5.0.4\helpers\pycharm\utrunner.py" C:\Users\Administrator\PycharmProjects\py3project\interface\Paramters\toy.py true
Testing started at 20:38 ...
{"code":"400","msg":"儲存使用者資訊失敗,登入帳號已存在!","model":{}}
到這裡有人會說學過類我不想用全域性,不喜歡或者怕全域性亂用影響指令碼
沒錯寫過類就用類啊那就用類啊來啊互相傷害啊
"""pt2:用類傳session"""":
# coding=utf-8
import json
import requests
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
data = {"userAccount": "admin", "loginPwd": "123456"}
s = requests.session()
s.post(url="http://192.168.229.128:8080/cms/manage/loginJump.do", data=data)
cls.session = s
@classmethod
def tearDownClass(cls):
pass
def test_session(self):
datas = {'userName': 'zhangsan', 'userEmail': ' [email protected]',
'userMobile': '18871027706', 'userSex': '1','userAccount': 'dev', 'confirmPwd': '123456', 'loginPwd': '123456', 'id': ''}
"""在哪裡,在哪裡見過你"""
conn = self.session.post(url="http://192.168.229.128:8080/cms/manage/saveSysUser.do", data=datas)
print conn.content
if __name__ == "__main__":
unittest.main()
"""pt3:用cookie請求介面"""":
import requests
import json
import unittest
class Interface(unittest.TestCase):
@classmethod
def setUpClass(cls):
req = requests.post(url="http://192.168.229.128:8080/cms/manage/loginJump.do",
data={"userAccount": "admin", "loginPwd": "123456"})
global cookie
cookie = req.cookies.get_dict()
@classmethod
def tearDownClass(cls):
pass
def test_login(self):
u"登入平臺介面"
req = requests.post(url="http://192.168.229.128:8080/cms/manage/loginJump.do",
data={"userAccount": "admin", "loginPwd": "123456"})
dicts = json.loads(req.content)
try:
self.assertEqual(dicts['msg'], u"登入成功!", "status:200")
except AssertionError as e:
print(e)
else:
results = req.json()
print(json.dumps(results, sort_keys=True, indent=2, separators=(',', ': '), encoding="UTF-8", ensure_ascii=False))
def test_cookie_request(self):
u"儲存使用者介面"
datas = {'userName': 'zhangsan', 'userEmail': ' [email protected]',
'userMobile': '18871027706', 'userSex': '1','userAccount': 'dev', 'confirmPwd': '123456', 'loginPwd': '123456', 'id': ''}
conn = requests.post(url="http://192.168.229.128:8080/cms/manage/saveSysUser.do", data=datas, cookies=cookie)
result = conn.json()
print(json.dumps(result, encoding="UTF-8", ensure_ascii=False, sort_keys=True, indent=2, separators=(',', ': ')))
#
# if __name__ == "__main__":
# unittest.main()
""""pt4:補充點小故事:""""
解決下大家的介面返回亂碼問題:
通常我們寫介面
data = {"userAccount": "admin", "loginPwd": "123456"}
response =requests.post(url='xxx', data =json.dumps(data),header ={"xx": "xxx"})
或者response =requests.post(url='xxx', json=data ,header ={"xx": "xxx"})
都是處理json型別請求格式亂碼很好的解決辦法
還可以這樣解決見我另一篇文章: https://blog.csdn.net/chen498858336/article/details/83795742