中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python+pytest接口自動化之token關聯登錄怎么實現

發布時間:2022-04-06 17:25:09 來源:億速云 閱讀:884 作者:iii 欄目:開發技術

今天小編給大家分享一下python+pytest接口自動化之token關聯登錄怎么實現的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    在PC端登錄公司的后臺管理系統或在手機上登錄某個APP時,經常會發現登錄成功后,返回參數中會包含token,它的值為一段較長的字符串,而后續去請求的請求頭中都需要帶上這個token作為參數,否則就提示需要先登錄。

    這其實就是狀態或會話保持的第三種方式token

    一. 什么是token

    token 由服務端產生,是客戶端用于請求的身份令牌。第一次登錄成功時,服務端會生成一個包含用戶信息的加密字符串token,返回給客戶端并保存在本地,后續客戶端只需要帶上token進行請求即可,無需帶上用戶名密碼。

    token原理簡單概括如下:

    • 用戶首次登錄成功后,服務端會生成一個token值,服務端會將它保存保存在數據庫中,同時也會將它返回給客戶端;

    • 客戶端拿到token值后,保存在本地;

    • 后續客戶端再次發送除登錄外的其他請求時,會把保存在本地的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": "sh44ljjl08s32730djsh44ljjl08s32730djsh44ljjl08s32730djsh44ljjl08s32730djsh44ljjl08s32730djsh44ljjl08s32730dj"
    }

    在對扎樣的項目做接口自動化測試時,需要先請求登錄接口拿到token,再去請求別的接口。每次請求其他接口時先請求一次登錄接口,這樣做雖然可行,但這樣不僅會降低自動化的執行效率,而且每次都請求登錄也會對服務器資源造成浪費。

    這里介紹如下兩種處理思路。

    1. 思路一

    在執行用例之前,先請求登錄接口,并將返回的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文件的讀寫這樣的函數單獨封裝在某個模塊中,供其他模塊調用,這樣會代碼會更加清晰簡潔。

    2. 思路二

    利用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接口自動化之token關聯登錄怎么實現

    以上就是“python+pytest接口自動化之token關聯登錄怎么實現”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    晋州市| 水富县| 富平县| 桓台县| 南澳县| 青岛市| 嘉善县| 曲水县| 政和县| 彰武县| 防城港市| 上饶县| 武功县| 当阳市| 伊宁市| 垫江县| 伊金霍洛旗| 台州市| 黄石市| 大方县| 同德县| 和龙市| 洛宁县| 郓城县| 岳阳县| 新乡市| 邳州市| 偏关县| 桃园市| 刚察县| 砚山县| 韶山市| 东宁县| 天祝| 马公市| 延边| 边坝县| 汨罗市| 泰州市| 云南省| 桐庐县|