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

Pytest多環(huán)境切換的常見方法介紹

 更新時間:2025年04月11日 15:00:16   作者:朱公子的Note  
Pytest 作為自動化測試的主力框架,如何實現(xiàn)本地、測試、預(yù)發(fā)、生產(chǎn)環(huán)境的靈活切換,本文總結(jié)了通過pytest框架實現(xiàn)自由環(huán)境切換的幾種方法,大家可以根據(jù)需要進行選擇

你是否也遇到過這種情況:本地測試通過,一到測試環(huán)境就翻車?環(huán)境變量錯亂、接口地址混亂、數(shù)據(jù)源配置丟失……這些「環(huán)境切換」問題簡直像定時炸彈,隨時引爆你的測試流程!

測試人員每天都跟不同的環(huán)境打交道,比如線上環(huán)境,測試環(huán)境,預(yù)上線環(huán)境等等,那么作為自動化測試人員寫的代碼,我們也要具備能自由切換環(huán)境的能力,那么今天小編就給大家聊一下,如何能讓我們python語言寫的測試用例可以自由切換到不同的環(huán)境下面去運行呢?

Pytest 作為自動化測試的主力框架,如何實現(xiàn)本地、測試、預(yù)發(fā)、生產(chǎn)環(huán)境的靈活切換?有沒有一種通用、實用、可復(fù)用的方案?

“Pytest如何實現(xiàn)環(huán)境切換,讓測試適應(yīng)不同場景?”這個問題曾讓我撓頭。配置文件怎么寫?參數(shù)怎么傳?能不能自動化切換而不用手動改代碼?帶著這些疑問,我開始摸索Pytest的環(huán)境管理功能。從簡單的命令行參數(shù)到復(fù)雜的配置文件,我發(fā)現(xiàn)它不僅靈活,還能無縫對接團隊協(xié)作。那么,具體該怎么操作呢?接下來,讓我們一起進入實戰(zhàn),揭開Pytest環(huán)境切換的奧秘。

今天給他大家聊一下通過pytest框架實現(xiàn)自由環(huán)境切換的幾種方法。

1.pytest-base-url

pytest有一個插件叫pytest-base-url ,是管理base_url非常好的一款插件,文檔資料鏈接:https://pypi.org/project/pytest-base-url/

下載方式:

pip install pytest-base-url

案例如下:

import requests
 
 
def test_demo(base_url):
    resp = requests.get(base_url)
    status_code = resp.status_code
    assert status_code == 200

第1種使用方式是終端添加--base-url這個命令,如下所示:

第2種使用方式是在pytest.ini配置文件種去配置base_url,然后自動讀取url的數(shù)據(jù),這樣就不用添加--base-url這個命令行參數(shù)了:

命令行直接運行pytest 即可。

2.hooks函數(shù)

pytest有個hooks函數(shù),可以自定義命令行參數(shù),一般在conftest.py中去引用。

Conftest.py中寫pytest_addoption這個hooks函數(shù),可以自定義命令行參數(shù),base_url只能對一個url地址進行傳遞,那么有的項目不僅需要多項目請求的url地址進行不同環(huán)境的切換,還需要對mysql的url地址進行不同的切換,這個時候就可以用自定義命令,定義不同的命令行參數(shù),這樣我們在執(zhí)行pytest的時候就可以自由進行傳遞。

代碼如下:

通過pytest_addoption這個hooks函數(shù),設(shè)置了兩個命令行參數(shù),一個是--mysql-url,另一個是--project-url,help后面是對這兩個命令行的解釋,解釋說明這兩個命令行代表什么含義

import pytest
 
 
def pytest_addoption(parser):
    parser.addoption(
        "--mysql-url", action="store", help="這里可以傳遞mysql的url地址"
    )
    parser.addoption(
        "--project-url", action="store", help="這里可以傳遞項目的url地址"
    )

通過fixture函數(shù)中的request參數(shù)去讀取命令行中傳遞的參數(shù),賦值給一個變量,就可以在pytest中隨便使用。

@pytest.fixture(scope='class')
def get_url(request):
    mysql_url = request.config.getoption('--mysql-url')
    project_url = request.config.getoption('--project-url')
    return mysql_url, project_url

項目代碼如下:

fixture函數(shù)的調(diào)用,直接把fixture的名字當成參數(shù)傳遞到測試用例里面即可

import requests
 
 
def test_demo(get_url):
    mysql_url = get_url[0]
    print('mysql_url的地址是{}'.format(mysql_url))
    
    project_url = get_url[1]
    resp = requests.get(project_url)
    status_code = resp.status_code
    
    assert status_code == 200

運行測試的命令為:

pytest -s --mysql -url 192.168.1.11--project-url http://www.example.com

如下圖所示:

3.yml和fixture

通過 yml文件 和 fixture 進行配合使用,首先在項目目錄下面創(chuàng)建一個conf.yml,然后里面去手動配置現(xiàn)在要運行的環(huán)境,截圖如下:

然后在創(chuàng)建一個conftest.py,里面定義兩個fixture函數(shù),一個用來讀取conf.yml里面的內(nèi)容,另一個用來配置具體的環(huán)境信息

比如qa環(huán)境,release環(huán)境,然后通過conf.yml里面配置的qa還是release,來讀取project_url 和 mysql_url,截圖如下:

import pytest
import yaml
 
 
@pytest.fixture(scope="session")
def config():
    with open('./conf.yml', 'r', encoding='utf-8') as f:
        conf = yaml.load(f.read(), Loader=yaml.FullLoader)
    return conf
 
 
@pytest.fixture(scope="session")
def env_vars(config):
    env = config["env"]
    mapping = {
        "qa": {
            "project_url": "http://121.42.15.146:9090",
            "mysql_url": "192.168.1.1"
        },
        "release": {
            "project_url": "https://release.com",
            "mysql_url": "127.0.0.1"
        }
    }
    project_url = mapping[env]["project_url"]
    mysql_url = mapping[env]["mysql_url"]
    return mysql_url, project_url

項目代碼(還是之前的測試用例)如下:

import requests
 
 
def test_demo(env_vars):
    mysql_url = env_vars[0]
    print('mysql_url的地址是{}'.format(mysql_url))
    
    project_url = env_vars[1]
    resp = requests.get(project_url)
    status_code = resp.status_code
    
    assert status_code == 200

命令行運行方式,正常運行即可,截圖如下:

結(jié)論

隨著 CI/CD 流水線普及,多環(huán)境并存已成常態(tài)。測試人員面臨的環(huán)境復(fù)雜度越來越高,若不能實現(xiàn)配置統(tǒng)一、切換自如,將嚴重拖慢測試效率,甚至引發(fā)線上事故。

環(huán)境切換看似是小問題,實則影響自動化測試流程的穩(wěn)定性與擴展性。掌握 Pytest 中的配置管理,就等于掌握了自動化測試的方向盤。

總的來說,Pytest的環(huán)境切換通過命令行參數(shù)、配置文件和插件支持,讓測試靈活適應(yīng)各種場景。從單人開發(fā)到團隊協(xié)作,它都能大幅提升效率。這不僅是技術(shù)實踐,更是現(xiàn)代測試思維的體現(xiàn)。掌握環(huán)境切換,你的測試流程將更加順暢,代碼質(zhì)量也能更上一層樓。

測試環(huán)境千萬條,配置管理第一條;配置不統(tǒng)一,Bug淚兩行。

以上就是Pytest多環(huán)境切換的常見方法介紹的詳細內(nèi)容,更多關(guān)于Pytest多環(huán)境切換的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python3+PyQt5泛型委托詳解

    python3+PyQt5泛型委托詳解

    這篇文章主要為大家詳細介紹了python3+PyQt5泛型委托的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python+OpenCV實現(xiàn)角度測量的示例代碼

    Python+OpenCV實現(xiàn)角度測量的示例代碼

    本文介紹如何使用python語言實現(xiàn)角度測量,程序包括鼠標選點、直線斜率計算、角度計算三個子程序和一個主程序,感興趣的可以了解一下
    2022-03-03
  • tensorflow中的梯度求解及梯度裁剪操作

    tensorflow中的梯度求解及梯度裁剪操作

    這篇文章主要介紹了tensorflow中的梯度求解及梯度裁剪操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 深入理解Python3中的http.client模塊

    深入理解Python3中的http.client模塊

    這篇文章主要介紹了關(guān)于Python3中http.client模塊的相關(guān)資料,文中介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • Python 爬蟲模擬登陸知乎

    Python 爬蟲模擬登陸知乎

    這篇文章主要介紹了Python 爬蟲模擬登陸知乎的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • Java byte數(shù)組操縱方式代碼實例解析

    Java byte數(shù)組操縱方式代碼實例解析

    這篇文章主要介紹了Java byte數(shù)組操縱方式代碼實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 淺談python對象數(shù)據(jù)的讀寫權(quán)限

    淺談python對象數(shù)據(jù)的讀寫權(quán)限

    下面小編就為大家?guī)硪黄獪\談python對象數(shù)據(jù)的讀寫權(quán)限。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • python?subprocess.run()、subprocess.Popen()、subprocess.check_output()

    python?subprocess.run()、subprocess.Popen()、subprocess.check

    Python的subprocess模塊是用于創(chuàng)建和管理子進程的模塊,本文主要介紹了python?subprocess.run()、subprocess.Popen()、subprocess.check_output(),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • 淺談使用Python內(nèi)置函數(shù)getattr實現(xiàn)分發(fā)模式

    淺談使用Python內(nèi)置函數(shù)getattr實現(xiàn)分發(fā)模式

    這篇文章主要介紹了淺談使用Python內(nèi)置函數(shù)getattr實現(xiàn)分發(fā)模式,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python判斷回文鏈表的方法

    Python判斷回文鏈表的方法

    這篇文章主要介紹了Python判斷回文鏈表,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01

最新評論