Pytest使用fixture實(shí)現(xiàn)token共享的方法
同學(xué)們?cè)谧鰌ytest接口自動(dòng)化時(shí),會(huì)遇到一個(gè)場(chǎng)景就是不同的測(cè)試用例需要有一個(gè)登錄的前置步驟,登錄完成后會(huì)獲取到token,用于之后的代碼中。首先我先演示一個(gè)常規(guī)的做法。
首先在conftest定義一個(gè)login的方法,方法返回token
@pytest.fixture(scope="function")
def login():
header = {
"Content-Type": "application/json"
}
data = {
"username": "test",
"password": "test"
}
login_info = requests.post(url='http://.../login',json=data).json()
return login_info['token']在測(cè)試用例方法中引入這個(gè)方法,所有用到token,都需要使用login這個(gè)方法。
def test_user(login):
token = login # 通過(guò)login獲取token
......
def test_address(login):
token = login # 通過(guò)login獲取token
......通過(guò)上面的方法,可以解決接口使用token的需求,不過(guò)這么做每次都會(huì)先執(zhí)行l(wèi)ogin接口,有沒(méi)有一種方法可以只執(zhí)行一次login接口,后面的接口就不調(diào)用login接口了呢。經(jīng)過(guò)老武測(cè)試,其實(shí)是可以做到的。
思路:login接口使用緩存,當(dāng)有token的時(shí)候就使用token,就不調(diào)用login接口了,如果沒(méi)有則調(diào)用login接口,再把token緩存起來(lái)。
那需要對(duì)上面login的方法進(jìn)行改造,增加save_token方法,將token存起來(lái)。引入pickle模塊,用來(lái)寫(xiě)數(shù)據(jù)。
import pickle
@pytest.fixture(scope="function")
def login():
......
# 增加緩存方法
save_token(login_info['token'])
return login_info['token']
def save_token(token):
# login_path為目錄中一個(gè)存放token的文件路徑,自己定義。
with open(login_path, 'wb') as f:
pickle.dump(login_info, f)
f.close()上面代碼完成了token的寫(xiě)入,當(dāng)沒(méi)有token的時(shí)候token寫(xiě)入到文件中。如果有token,我們就不需要執(zhí)行登錄操作,直接使用文件中的token,這個(gè)時(shí)候代碼需要繼續(xù)改造。方法開(kāi)始時(shí)判斷當(dāng)前是否存在保存token的文件,如果有則獲取token,不再執(zhí)行登錄的操作。再增加一個(gè)讀取文件內(nèi)容的方法get_login_info
import pickle
@pytest.fixture(scope="function")
def login():
if os.path.exists(login_info):
return get_login_info(login_info)
else:
......
# 增加緩存方法
save_token(login_info['token'])
return login_info['token']
# 增加一個(gè)讀取文件的方法
def get_login_info():
with open(login_path, 'rb') as f:
data = pickle.load(f)
f.close()
return data以上工作已經(jīng)完成了90%,再來(lái)個(gè)收尾就完美了。每次執(zhí)行用例結(jié)束后把存token文件刪除,不然生成了一個(gè)token,代碼判斷token文件存在,就不會(huì)去調(diào)用登錄接口。token一但過(guò)期,用例就會(huì)執(zhí)行失敗。
在conftest定義一個(gè)方法,每次執(zhí)行用例都清理一下token文件。要注意級(jí)別是session級(jí)別哦。
@pytest.fixture(scope='session', autouse=True)
def clear_login_file():
if os.path.exists(login_path):
logger.info("清理token文件")
os.remove(login_path)到此這篇關(guān)于Pytest使用fixture實(shí)現(xiàn)token共享的文章就介紹到這了,更多相關(guān)Pytest使用fixture內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python Paramiko創(chuàng)建文件目錄并上傳文件詳解
Paramiko是一個(gè)用于進(jìn)行SSH2會(huì)話的Python庫(kù),它支持加密、認(rèn)證和文件傳輸?shù)裙δ?本文旨在詳細(xì)指導(dǎo)新手朋友如何使用Python的Paramiko庫(kù)來(lái)創(chuàng)建遠(yuǎn)程文件目錄并上傳文件,希望對(duì)大家有所幫助2024-10-10
Python通過(guò)列表創(chuàng)建DataFrame的常見(jiàn)方法
本文介紹了通過(guò)列表創(chuàng)建DataFrame的多種方法,包括單層/嵌套列表、指定索引、處理不均勻長(zhǎng)度,并建議使用字典構(gòu)建鍵對(duì)關(guān)系數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧2025-07-07
Django給表單添加honeypot驗(yàn)證增加安全性
這篇文章主要介紹了Django給表單添加honeypot驗(yàn)證增加安全性的方法,幫助大家更好的理解和學(xué)習(xí)使用Django框架,感興趣的朋友可以了解下2021-05-05
opencv3/C++實(shí)現(xiàn)視頻背景去除建模(BSM)
今天小編就為大家分享一篇opencv3/C++實(shí)現(xiàn)視頻背景去除建模(BSM),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
Python如何調(diào)用另一個(gè)類的方法和屬性
在Python面向?qū)ο缶幊讨?類與類之間的交互是非常常見(jiàn)的場(chǎng)景,本文將詳細(xì)介紹在Python中一個(gè)類如何調(diào)用另一個(gè)類的方法和屬性,大家可以根據(jù)需要進(jìn)行選擇2025-08-08
Python實(shí)現(xiàn)多種場(chǎng)景下查找并高亮Word文檔中的文本
在處理長(zhǎng)篇 Word 文檔時(shí),快速定位關(guān)鍵信息并將其突出顯示是一項(xiàng)非常實(shí)用的技能,本文將深入探討如何使用 Python 實(shí)現(xiàn)多種場(chǎng)景下的 Word 文檔文本查找與高亮功能,有需要的小伙伴可以了解下2026-03-03
OpenCV中resize函數(shù)插值算法的實(shí)現(xiàn)過(guò)程(五種)
最新版OpenCV2.4.7中,cv::resize函數(shù)有五種插值算法:最近鄰、雙線性、雙三次、基于像素區(qū)域關(guān)系、蘭索斯插值。感興趣的可以了解一下2021-06-06
使用Python實(shí)現(xiàn)兩組數(shù)據(jù)縱向排序
在數(shù)據(jù)處理和分析中,排序是一項(xiàng)非?;A(chǔ)且重要的操作,本文將詳細(xì)介紹如何使用Python對(duì)兩組數(shù)據(jù)進(jìn)行縱向排序,即每一列分別進(jìn)行排序,同時(shí)保持?jǐn)?shù)據(jù)的對(duì)應(yīng)關(guān)系,需要的可以參考下2024-12-12

