pytest自定义命令行参数的实现
作者:chenchen_nini
本文主要介绍了在使用pytest运行测试用例时,通过传递自定义命令行参数来启动mitmdump进程进行抓包,具有一定的参考价值,感兴趣的可以了解一下
实际使用场景:pytest运行用例的时候,启动mitmdump进程试试抓包,pytest命令行启动的时候,传入mitmdump需要的参数(1)抓包生成的文件地址 (2)mitm的proxy设置
# 在pytest的固定文件中conftest.py中 def pytest_addoption(parser): """ 自定义pytest的命令行参数,@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设置代理") @pytest.fixture(scope="session", autouse=True) def set_env_mitm_path(request): """ 将--mitm_path从命令行中获取放入环境变量中,给mitmdump工具用 :param request: :return: """ mitm_value = request.config.getoption("--mitm_path") os.environ['mitm_path'] = mitm_value print('\n --mitm_path参数值:', mitm_value) return mitm_value @pytest.fixture(scope="session", autouse=True) def set_env_mitm_proxy(request): """ 将--mitm_proxy从命令行中获取放入环境变量中,给mitmdump工具用 :param request: :return: """ mitm_proxy = request.config.getoption("--mitm_proxy") os.environ['mitm_proxy'] = mitm_proxy print('\n --mitm_proxy参数值:', mitm_proxy) return mitm_proxy @pytest.fixture(scope="session") def setup_mitmdump(): """ pytest启动,cmd启动一个mitmdump的进程 :return: """ if not os.environ.get("mitm_path"): # 命令行没有传入mitm_path的值,给默认值一个 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()
测试文件
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="第一个"), pytest.param("2", "smart", id="第二个") ] ) 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)
运行效果
pytest -s test1.py --mitm_path=D:/hf.csv
pytest -s test1.py --mitm_path=D:/hf.csv --mitm_proxy 8989
到此这篇关于pytest自定义命令行参数的实现的文章就介绍到这了,更多相关pytest 命令行参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!