欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pytest使用fixture實(shí)現(xiàn)token共享的方法

 更新時間:2023年11月02日 10:07:23   作者:測試界媛姐  
同學(xué)們在做pytest接口自動化時,會遇到一個場景就是不同的測試用例需要有一個登錄的前置步驟,登錄完成后會獲取到token,用于之后的代碼中,本文給大家介紹Pytest使用fixture實(shí)現(xiàn)token共享的方法,感興趣的朋友一起看看吧

同學(xué)們在做pytest接口自動化時,會遇到一個場景就是不同的測試用例需要有一個登錄的前置步驟,登錄完成后會獲取到token,用于之后的代碼中。首先我先演示一個常規(guī)的做法。

首先在conftest定義一個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']

在測試用例方法中引入這個方法,所有用到token,都需要使用login這個方法。

def test_user(login):
    token = login # 通過login獲取token
    ......
def test_address(login):
    token = login # 通過login獲取token
    ......

通過上面的方法,可以解決接口使用token的需求,不過這么做每次都會先執(zhí)行l(wèi)ogin接口,有沒有一種方法可以只執(zhí)行一次login接口,后面的接口就不調(diào)用login接口了呢。經(jīng)過老武測試,其實(shí)是可以做到的。

思路:login接口使用緩存,當(dāng)有token的時候就使用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為目錄中一個存放token的文件路徑,自己定義。
    with open(login_path, 'wb') as f:
        pickle.dump(login_info, f)
        f.close()

上面代碼完成了token的寫入,當(dāng)沒有token的時候token寫入到文件中。如果有token,我們就不需要執(zhí)行登錄操作,直接使用文件中的token,這個時候代碼需要繼續(xù)改造。方法開始時判斷當(dāng)前是否存在保存token的文件,如果有則獲取token,不再執(zhí)行登錄的操作。再增加一個讀取文件內(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']
# 增加一個讀取文件的方法
def get_login_info():
    with open(login_path, 'rb') as f:
        data = pickle.load(f)
        f.close()
        return data

以上工作已經(jīng)完成了90%,再來個收尾就完美了。每次執(zhí)行用例結(jié)束后把存token文件刪除,不然生成了一個token,代碼判斷token文件存在,就不會去調(diào)用登錄接口。token一但過期,用例就會執(zhí)行失敗。

在conftest定義一個方法,每次執(zhí)行用例都清理一下token文件。要注意級別是session級別哦。

@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)文章

最新評論