pytest自定義命令行參數(shù)的實(shí)現(xiàn)
實(shí)際使用場(chǎng)景:pytest運(yùn)行用例的時(shí)候,啟動(dòng)mitmdump進(jìn)程試試抓包,pytest命令行啟動(dòng)的時(shí)候,傳入mitmdump需要的參數(shù)(1)抓包生成的文件地址 (2)mitm的proxy設(shè)置
# 在pytest的固定文件中conftest.py中
def pytest_addoption(parser):
"""
自定義pytest的命令行參數(shù),@pytest.fixture配合下面的方法一起用
:param parser:
:return:
"""
parser.addoption("--mitm_path", action="store",
default="",
type=str,
help="--mitm_path:mitmproxy生成的cvs文件名稱")
parser.addoption("--mitm_proxy", action="store",
default="127.0.0.1:8080",
type=str,
help="--mitm_proxy:mitmproxy設(shè)置代理")
@pytest.fixture(scope="session", autouse=True)
def set_env_mitm_path(request):
"""
將--mitm_path從命令行中獲取放入環(huán)境變量中,給mitmdump工具用
:param request:
:return:
"""
mitm_value = request.config.getoption("--mitm_path")
os.environ['mitm_path'] = mitm_value
print('\n --mitm_path參數(shù)值:', mitm_value)
return mitm_value
@pytest.fixture(scope="session", autouse=True)
def set_env_mitm_proxy(request):
"""
將--mitm_proxy從命令行中獲取放入環(huán)境變量中,給mitmdump工具用
:param request:
:return:
"""
mitm_proxy = request.config.getoption("--mitm_proxy")
os.environ['mitm_proxy'] = mitm_proxy
print('\n --mitm_proxy參數(shù)值:', mitm_proxy)
return mitm_proxy
@pytest.fixture(scope="session")
def setup_mitmdump():
"""
pytest啟動(dòng),cmd啟動(dòng)一個(gè)mitmdump的進(jìn)程
:return:
"""
if not os.environ.get("mitm_path"):
# 命令行沒有傳入mitm_path的值,給默認(rèn)值一個(gè)
caller = os.environ.get('PYTEST_CURRENT_TEST').split(':')[-1].split(' ')[0]
mitm_path = "./testdata/" + caller + ".csv"
os.environ["mitm_path"] = mitm_path
cmd = r"mitmdump -p {}".format(os.environ.get("mitm_proxy") if os.environ.get("mitm_proxy") else '8080')
process = subprocess.Popen(cmd, creationflags=subprocess.CREATE_NEW_CONSOLE)
time.sleep(1)
yield
time.sleep(6)
print("stop mitm")
process.kill()測(cè)試文件
import csv
import os
import time
import pytest
import requests
class TestDemo:
@pytest.mark.usefixtures("setup_mitmdump")
@pytest.mark.parametrize(
"name,assert_word",
[
pytest.param("1", "smart", id="第一個(gè)"),
pytest.param("2", "smart", id="第二個(gè)")
]
)
def test_001(self, name, assert_word):
print("我是用例test_%s" % name)
url = "http://httpbin.org/get"
params = {}
headers = {"content-type": "application/json; charset=UTF-8"}
proxies = {'http': 'http://127.0.0.1:%s' % os.environ.get("mitm_proxy")} # ip地址
option = requests.get(url=url, headers=headers, params=params, proxies=proxies)
time.sleep(10)
運(yùn)行效果
pytest -s test1.py --mitm_path=D:/hf.csv
pytest -s test1.py --mitm_path=D:/hf.csv --mitm_proxy 8989

到此這篇關(guān)于pytest自定義命令行參數(shù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)pytest 命令行參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python入門指南之print()函數(shù)的N種高級(jí)用法
這篇文章深入講解了Python中print()函數(shù)的高級(jí)用法,重點(diǎn)解析了其函數(shù)簽名和參數(shù)配置,文章通過豐富的代碼示例展示了print()函數(shù)的強(qiáng)大功能,幫助開發(fā)者突破簡(jiǎn)單打印的局限,掌握更專業(yè)的輸出控制2026-06-06
手把手帶你用Python實(shí)現(xiàn)一個(gè)計(jì)時(shí)器
雖然Python是一種有效的編程語言,但純Python程序比C、Rust和Java等編譯語言中的對(duì)應(yīng)程序運(yùn)行得更慢,為了更好地監(jiān)控和優(yōu)化Python程序,今天將為大家介紹如何使用?Python?計(jì)時(shí)器來監(jiān)控程序運(yùn)行的速度,以便正對(duì)性改善代碼性能2022-06-06
安裝Keras,tensorflow,并實(shí)現(xiàn)將虛擬環(huán)境添加到j(luò)upyter?notebook
這篇文章主要介紹了安裝Keras,tensorflow,并實(shí)現(xiàn)將虛擬環(huán)境添加到j(luò)upyter?notebook,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
使用Pytest.main()運(yùn)行時(shí)參數(shù)不生效問題解決
本文主要介紹了使用Pytest.main()運(yùn)行時(shí)參數(shù)不生效問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
python使用pandas讀xlsx文件的實(shí)現(xiàn)
這篇文章主要介紹了python使用pandas讀xlsx文件的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05

