Pytest_Hook函數pytest_addoption(parser):定義自己的命令行參數(14-1)


考慮場景:

  1. 我們的自動化用例需要支持在不同測試環境運行,有時候在dev環境運行,有時候在test環境運行;
  2. 有時候需要根據某個參數不同的參數值,執行不同的業務邏輯;

上面的場景我們都可以通過“在命令行中輸入參數,然后用例中接收這個參數,通過判斷這個參數的值來做不同的邏輯”來實現。那么我們的需求就變為pytest中如何自定義一個命令行參數呢?這時候我們就需要用到pytest的鈎子函數:pytest_addoption

在conftest.py文件中定義命令名

新建一個conftest.py文件

然后在conftest.py文件中通過pytest_addoption方法來添加命令行參數,通過定義的fixture來獲得參數的值。

import pytest


# pytest_addoption(parser) 定義自己的命令行參數的固定寫法
def pytest_addoption(parser):
    # 定義 --env_opt 參數名
    parser.addoption("--env_opt")

    # 定義 --run_level 參數名
    # 參數說明:
    #   default:當命令行不調用參數時的默認值
    #   help:在幫助中顯示的說明
    parser.addoption("--run_level", default=1, help="執行用例的級別", action="store")


# 獲取--env_opt參數值
@pytest.fixture(scope="session")
def env_opt(request):
    return request.config.getoption("--env_opt")


# 獲取--run_level參數值
@pytest.fixture(scope="session")
def run_level(request):
    return request.config.getoption("run_level")


@pytest.fixture(scope="session", autouse=True)
def start_appium_desired(env_opt, run_level):
    print(f"\n{env_opt}")
    print(f"\n{run_level}")

上面conftest.py中新增了兩個命令行參數:--env_opt 和 --run_level,然后定義了兩個fixture,在測試用例中想要獲得參數 --env_opt 和 --run_level 的值,就可以調用 env_opt 或 run_level 函數獲取對應的值。

在用例中獲取定義命令的值

class TestDemo:

    def test_001(self, env_opt):
        print(f"\nenv_opt參數值:{env_opt}")

    def test_002(self, run_level):
        print(f"\nrun_level參數值:{run_level}")

調用定義的命令

import pytest
import os

if __name__ == '__main__':
    env = {
        "host": "127.0.0.1",
        "port": "6789"
        }

    pytest.main(["-vs", "--alluredir=./temp", f"--env_opt={env}"])
    os.system("allure generate ./temp -o ./report/ --clean")

執行結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM