最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python+pytest接口自動化之token關聯(lián)登錄的實現(xiàn)

 更新時間:2022年04月06日 15:41:56   作者:給你一頁白紙  
公司某管理后臺系統(tǒng),登錄后返回token,接著去請求其他接口時請求頭中都需要加上這個token,否則提示請先登錄,今天通過本文給大家介紹下python+pytest接口自動化之token關聯(lián)登錄的實現(xiàn),感興趣的朋友一起看看吧

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

這其實就是狀態(tài)或會話保持的第三種方式token。

一. 什么是token

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

token原理簡單概括如下:

  • 用戶首次登錄成功后,服務端會生成一個token值,服務端會將它保存保存在數(shù)據(jù)庫中,同時也會將它返回給客戶端;
  • 客戶端拿到token值后,保存在本地;
  • 后續(xù)客戶端再次發(fā)送除登錄外的其他請求時,會把保存在本地的token值作為參數(shù)一起發(fā)送給服務端;
  • 服務端收到客戶端的請求后,會拿發(fā)送過來的token值與保存在數(shù)據(jù)庫中的token值進行比較;
  • 如果兩個token值相同, 則說明當前用戶處于登錄狀態(tài);
  • 如果數(shù)據(jù)庫中沒有這個token值或者token值已經生效,則需用戶重新登錄。

二. token場景處理

公司某管理后臺系統(tǒng),登錄后返回token,接著去請求其他接口時請求頭中都需要加上這個token,否則提示請先登錄。

請求該系統(tǒng)的登錄接口如下:

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": "sh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730dj"
}

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

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

1. 思路一

在執(zhí)行用例之前,先請求登錄接口,并將返回的token值存儲在文件中(如yaml文件),后續(xù)請求需要用到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,執(zhí)行測試用例時先讀取yaml文件中token值,并將token加入headers中(也有些是將token放在請求參數(shù)中,視被測試項目具體情況而定),再發(fā)送請求。

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():
    查詢個人信息(需要先登錄系統(tǒng))
    # 先從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文件的讀寫這樣的函數(shù)單獨封裝在某個模塊中,供其他模塊調用,這樣會代碼會更加清晰簡潔。

2. 思路二

利用pytest中的Fixture函數(shù),作用域設置為session,并返回token值,后續(xù)測試方法/函數(shù)調用該Fixture函數(shù)。

pytest中Fixture的使用請參考我之前的文章pytest(6)-Fixture(固件)。

1,首先,在conftest中定義一個作用域為session的Fixture函數(shù),用于請求登錄接口返回token。

import pytest
import requests
import json

@pytest.fixture(scope="session")
def get_token_fixture():
    '''
    作用域為session的fixture函數(shù),返回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):
    '''
    查詢個人信息(需要先登錄系統(tǒng))
    :return:
    '''
    # 通過Fixture函數(shù)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()

執(zhí)行測試用例結果如下:

說明思路二也是可行的,當然這里只執(zhí)行了一條測試用例,如果執(zhí)行很多的用例,效果會是怎樣還沒去驗證,大家可以試試看。

三. 總結

  • 相對于Session/Cookies來說,請求量較大或者涉及第三方接口的系統(tǒng),使用token更適合。
  • 有些項目token是放在請求頭中發(fā)送的,而有一些項目則是放在請求參數(shù)里發(fā)送的,做接口自動化時要明確是哪種方式。
  • 接口自動化處理token時這兩種思路可任選一種,如果使用pytest框架的話建議嘗試思路二。

到此這篇關于python+pytest接口自動化(13)-token關聯(lián)登錄的文章就介紹到這了,更多相關python接口自動化token關聯(lián)登錄內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python內置函數(shù)issubclass()的具體使用

    Python內置函數(shù)issubclass()的具體使用

    issubclass()是Python中一個非常有用的內置函數(shù),它提供了一種簡單的方式來檢查類的繼承關系,本文主要介紹了Python內置函數(shù)issubclass()的具體使用,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2007-03-03
  • 一篇文章帶你了解Python中的裝飾器

    一篇文章帶你了解Python中的裝飾器

    Python中的裝飾器是你進入Python大門的一道坎,不管你跨不跨過去它都在那里,下面這篇文章主要給大家介紹了關于Python中裝飾器的相關資料,需要的朋友可以參考下
    2022-03-03
  • 在Python中使用Mako模版庫的簡單教程

    在Python中使用Mako模版庫的簡單教程

    這篇文章主要介紹了在Python中使用Mako模版庫的簡單教程,包括在Django或者Tornado框架中集成Mako的方法,需要的朋友可以參考下
    2015-04-04
  • python判斷列表的連續(xù)數(shù)字范圍并分塊的方法

    python判斷列表的連續(xù)數(shù)字范圍并分塊的方法

    今天小編就為大家分享一篇python判斷列表的連續(xù)數(shù)字范圍并分塊的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python drop方法刪除列之inplace參數(shù)實例

    Python drop方法刪除列之inplace參數(shù)實例

    這篇文章主要介紹了Python drop方法刪除列之inplace參數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • OpenCV半小時掌握基本操作之邊緣檢測

    OpenCV半小時掌握基本操作之邊緣檢測

    這篇文章主要介紹了OpenCV基本操作之邊緣檢測,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 解決pycharm修改代碼后第一次運行不生效的問題

    解決pycharm修改代碼后第一次運行不生效的問題

    這篇文章主要介紹了解決pycharm修改代碼后第一次運行不生效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • python中利用h5py模塊讀取h5文件中的主鍵方法

    python中利用h5py模塊讀取h5文件中的主鍵方法

    今天小編就為大家分享一篇python中利用h5py模塊讀取h5文件中的主鍵方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 深入解答關于Python的11道基本面試題

    深入解答關于Python的11道基本面試題

    這篇文章主要介紹了關于Python的11道基本面試題,其中單引號,雙引號,三引號的區(qū)別、Python的參數(shù)傳遞是值傳遞還是引用傳遞以及什么是lambda函數(shù)?它有什么好處?等一系列的基礎面試題,文中給出了詳細的解答,需要的朋友可以參考學習。
    2017-04-04
  • Python 如何給圖像分類(圖像識別模型構建)

    Python 如何給圖像分類(圖像識別模型構建)

    這篇文章主要介紹了Python 教你如何給圖像分類,今天的文章主要是講圖像識別模型如何構建,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06

最新評論

泉州市| 凤凰县| 开封市| 盖州市| 滦平县| 叙永县| 凌源市| 翁源县| 贺兰县| 长宁区| 江阴市| 瑞金市| 固阳县| 张家界市| 衡东县| 白山市| 正镶白旗| 腾冲县| 高要市| 宁远县| 襄城县| 弋阳县| 阿鲁科尔沁旗| 枣强县| 甘肃省| 巴彦淖尔市| 丹棱县| 常山县| 长垣县| 诸暨市| 镇雄县| 仁布县| 杭锦旗| 尚志市| 开鲁县| 屏南县| 安义县| 综艺| 石柱| 响水县| 康平县|