Pytest使用fixture實(shí)現(xiàn)token共享的方法
同學(xué)們在做pytest接口自動(dòng)化時(shí),會(huì)遇到一個(gè)場景就是不同的測試用例需要有一個(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']在測試用例方法中引入這個(gè)方法,所有用到token,都需要使用login這個(gè)方法。
def test_user(login):
token = login # 通過login獲取token
......
def test_address(login):
token = login # 通過login獲取token
......通過上面的方法,可以解決接口使用token的需求,不過這么做每次都會(huì)先執(zhí)行l(wèi)ogin接口,有沒有一種方法可以只執(zhí)行一次login接口,后面的接口就不調(diào)用login接口了呢。經(jīng)過老武測試,其實(shí)是可以做到的。
思路:login接口使用緩存,當(dāng)有token的時(shí)候就使用token,就不調(diào)用login接口了,如果沒有則調(diào)用login接口,再把token緩存起來。
那需要對上面login的方法進(jìn)行改造,增加save_token方法,將token存起來。引入pickle模塊,用來寫數(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的寫入,當(dāng)沒有token的時(shí)候token寫入到文件中。如果有token,我們就不需要執(zhí)行登錄操作,直接使用文件中的token,這個(gè)時(shí)候代碼需要繼續(xù)改造。方法開始時(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%,再來個(gè)收尾就完美了。每次執(zhí)行用例結(jié)束后把存token文件刪除,不然生成了一個(gè)token,代碼判斷token文件存在,就不會(huì)去調(diào)用登錄接口。token一但過期,用例就會(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python Paramiko創(chuàng)建文件目錄并上傳文件詳解
Paramiko是一個(gè)用于進(jìn)行SSH2會(huì)話的Python庫,它支持加密、認(rèn)證和文件傳輸?shù)裙δ?本文旨在詳細(xì)指導(dǎo)新手朋友如何使用Python的Paramiko庫來創(chuàng)建遠(yuǎn)程文件目錄并上傳文件,希望對大家有所幫助2024-10-10
Python通過列表創(chuàng)建DataFrame的常見方法
本文介紹了通過列表創(chuàng)建DataFrame的多種方法,包括單層/嵌套列表、指定索引、處理不均勻長度,并建議使用字典構(gòu)建鍵對關(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à)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Python如何調(diào)用另一個(gè)類的方法和屬性
在Python面向?qū)ο缶幊讨?類與類之間的交互是非常常見的場景,本文將詳細(xì)介紹在Python中一個(gè)類如何調(diào)用另一個(gè)類的方法和屬性,大家可以根據(jù)需要進(jìn)行選擇2025-08-08
Python實(shí)現(xiàn)多種場景下查找并高亮Word文檔中的文本
在處理長篇 Word 文檔時(shí),快速定位關(guān)鍵信息并將其突出顯示是一項(xiàng)非常實(shí)用的技能,本文將深入探討如何使用 Python 實(shí)現(xiàn)多種場景下的 Word 文檔文本查找與高亮功能,有需要的小伙伴可以了解下2026-03-03
OpenCV中resize函數(shù)插值算法的實(shí)現(xiàn)過程(五種)
最新版OpenCV2.4.7中,cv::resize函數(shù)有五種插值算法:最近鄰、雙線性、雙三次、基于像素區(qū)域關(guān)系、蘭索斯插值。感興趣的可以了解一下2021-06-06
使用Python實(shí)現(xiàn)兩組數(shù)據(jù)縱向排序
在數(shù)據(jù)處理和分析中,排序是一項(xiàng)非常基礎(chǔ)且重要的操作,本文將詳細(xì)介紹如何使用Python對兩組數(shù)據(jù)進(jìn)行縱向排序,即每一列分別進(jìn)行排序,同時(shí)保持?jǐn)?shù)據(jù)的對應(yīng)關(guān)系,需要的可以參考下2024-12-12

