<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在PC端登入公司的後臺管理系統或在手機上登入某個APP時,經常會發現登入成功後,返回引數中會包含token,它的值為一段較長的字串,而後續去請求的請求頭中都需要帶上這個token作為引數,否則就提示需要先登入。
這其實就是狀態或對談保持的第三種方式token
。
token 由伺服器端產生,是使用者端用於請求的身份令牌。第一次登入成功時,伺服器端會生成一個包含使用者資訊的加密字串token,返回給使用者端並儲存在本地,後續使用者端只需要帶上token進行請求即可,無需帶上使用者名稱密碼。
token原理簡單概括如下:
公司某管理後臺系統,登入後返回token,接著去請求其他介面時請求頭中都需要加上這個token,否則提示請先登入。
請求該系統的登入介面如下:
import requests import json headers = {"Content-Type": "application/json;charset=utf8"} url = "http://127.0.0.1:5000/login" _data = { "username": "劉德華", "password": "123456" } res = requests.post(url=url, headers=headers, json=_data).text print(res)
結果如下:
{
"code": 1000,
"msg": "登入成功!",
"token": "sh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730dj"
}
在對扎樣的專案做介面自動化測試時,需要先請求登入介面拿到token,再去請求別的介面。每次請求其他介面時先請求一次登入介面,這樣做雖然可行,但這樣不僅會降低自動化的執行效率,而且每次都請求登入也會對伺服器資源造成浪費。
在執行用例之前,先請求登入介面,並將返回的token值儲存在檔案中(如yaml檔案),後續請求需要用到token值則從該檔案。
python中yaml檔案的讀寫請參考我之前的文章Python讀寫yaml檔案(使用PyYAML庫)。
1,執行介面自動化測試框架,初始化時先請求登入介面,獲取token值,並寫入指定的yaml檔案中。
import requests import json import yaml def get_token(): ''' 請求登入介面,獲取token :return: headers = {"Content-Type": "application/json;charset=utf8"} url = "http://127.0.0.1:5000/login" _data = { "username": "劉德華", "password": "123456" } res = requests.post(url=url, headers=headers, json=_data).text res = json.loads(res) token = res["token"] return token def write_yaml(token): 寫入yaml檔案 t_data = { "token": token with open("yaml檔案路徑", "w", encoding="utf-8") as f: yaml.dump(data=t_data, stream=f, allow_unicode=True) if __name__ == '__main__': token = get_token() # 獲取token write_yaml(token) # 將token值寫入yaml檔案
2,執行測試用例時先讀取yaml檔案中token值,並將token加入headers中(也有些是將token放在請求引數中,視被測試專案具體情況而定),再傳送請求。
import requests import yaml import pytest import json def read_yaml(): ''' 讀yaml檔案 :return: with open('yaml檔案路徑', 'r', encoding='utf-8') as f: result = yaml.load(f.read(), Loader=yaml.FullLoader) token = result["token"] return token def test_check_user(): 查詢個人資訊(需要先登入系統) # 先從yaml檔案中讀取token token = read_yaml() # 再將token新增到請求頭中 headers = { "Content-Type": "application/json;charset=utf8", "token": token } url = "http://127.0.0.1:5000/users/3" res = requests.get(url=url, headers=headers).text # 返回結果為json格式,轉換為字典 res = json.loads(res) # 斷言code是否為1000 assert res["code"] == 1000 if __name__ == '__main__': pytest.main()
這裡僅僅只是舉例說明,而在實際的框架中,我們需要把這些諸如yaml檔案的讀寫這樣的函數單獨封裝在某個模組中,供其他模組呼叫,這樣會程式碼會更加清晰簡潔。
利用pytest中的Fixture函數,作用域設定為session,並返回token值,後續測試方法/函數呼叫該Fixture函數。
pytest中Fixture的使用請參考我之前的文章pytest(6)-Fixture(韌體)。
1,首先,在conftest中定義一個作用域為session的Fixture函數,用於請求登入介面返回token。
import pytest import requests import json @pytest.fixture(scope="session") def get_token_fixture(): ''' 作用域為session的fixture函數,返回token :return: ''' headers = {"Content-Type": "application/json;charset=utf8"} url = "http://127.0.0.1:5000/login" _data = { "username": "劉德華", "password": "123456" } res = requests.post(url=url, headers=headers, json=_data).text res = json.loads(res) token = res["token"] return token
2,接著,測試用例呼叫該Fixture。
def test_check_user(get_token_fixture): ''' 查詢個人資訊(需要先登入系統) :return: ''' # 通過Fixture函數g獲取et_token_fixture值,即token,再將token新增到請求頭中 headers = { "Content-Type": "application/json;charset=utf8", "token": get_token_fixture } url = "http://127.0.0.1:5000/users/3" res = requests.get(url=url, headers=headers).text res = json.loads(res) print(res) print(headers) assert res["code"] == 1000 if __name__ == '__main__': pytest.main()
執行測試用例結果如下:
說明思路二也是可行的,當然這裡只執行了一條測試用例,如果執行很多的用例,效果會是怎樣還沒去驗證,大家可以試試看。
到此這篇關於python+pytest介面自動化(13)-token關聯登入的文章就介紹到這了,更多相關python介面自動化token關聯登入內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45