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
2.在測(cè)試用例方法中引入這個(gè)方法,所有用到token,都需要使用login這個(gè)方法。
通過上面的方法,可以解決接口使用token的需求,不過這么做每次都會(huì)先執(zhí)行l(wèi)ogin接口,有沒有一種方法可以只執(zhí)行一次login接口,后面的接口就不調(diào)用login接口了呢。經(jīng)過老武測(cè)試,其實(shí)是可以做到的。
思路:login接口使用緩存,當(dāng)有token的時(shí)候就使用token,就不調(diào)用login接口了,如果沒有則調(diào)用login接口,再把token緩存起來。
那需要對(duì)上面login的方法進(jìn)行改造,增加save_token方法,將token存起來。引入pickle模塊,用來寫數(shù)據(jù)。
上面代碼完成了token的寫入,當(dāng)沒有token的時(shí)候token寫入到文件中。如果有token,我們就不需要執(zhí)行登錄操作,直接使用文件中的token,這個(gè)時(shí)候代碼需要繼續(xù)改造。方法開始時(shí)判斷當(dāng)前是否存在保存token的文件,如果有則獲取token,不再執(zhí)行登錄的操作。再增加一個(gè)讀取文件內(nèi)容的方法get_login_info
以上工作已經(jīng)完成了90%,再來個(gè)收尾就完美了。每次執(zhí)行用例結(jié)束后把存token文件刪除,不然生成了一個(gè)token,代碼判斷token文件存在,就不會(huì)去調(diào)用登錄接口。token一但過期,用例就會(huì)執(zhí)行失敗。
在conftest定義一個(gè)方法,每次執(zhí)行用例都清理一下token文件。要注意級(jí)別是session級(jí)別哦。