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

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

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

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

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

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

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

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

1.pytest-base-url

pytest有一個(gè)插件叫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這個(gè)命令,如下所示:

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

命令行直接運(yùn)行pytest 即可。

2.hooks函數(shù)

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

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

代碼如下:

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

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

通過fixture函數(shù)中的request參數(shù)去讀取命令行中傳遞的參數(shù),賦值給一個(gè)變量,就可以在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

項(xiàng)目代碼如下:

fixture函數(shù)的調(diào)用,直接把fixture的名字當(dāng)成參數(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

運(yùn)行測試的命令為:

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

如下圖所示:

3.yml和fixture

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

然后在創(chuàng)建一個(gè)conftest.py,里面定義兩個(gè)fixture函數(shù),一個(gè)用來讀取conf.yml里面的內(nèi)容,另一個(gè)用來配置具體的環(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

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

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

命令行運(yùn)行方式,正常運(yùn)行即可,截圖如下:

結(jié)論

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

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

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

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

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

相關(guān)文章

  • python3+PyQt5泛型委托詳解

    python3+PyQt5泛型委托詳解

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

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

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

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

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

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

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

    Python 爬蟲模擬登陸知乎

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

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

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

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

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

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

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

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

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

    Python判斷回文鏈表的方法

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

最新評論