当前位置: 首页 > news >正文

pytest自定义命令行参数

实际使用场景: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_valueprint('\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_proxyprint('\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_pathcmd = 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)yieldtime.sleep(6)print("stop mitm")process.kill()

测试文件

import csv
import os
import timeimport pytest
import requestsclass 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

http://www.lryc.cn/news/496760.html

相关文章:

  • c++预编译头文件
  • YOLOv8模型pytorch格式转为onnx格式
  • 电子课程开发中的典型误区
  • Docker 逃逸突破边界
  • 残差连接,就是当某一偏导等于0时,加上x偏导就是1,这样乘以1保证不失效
  • 博泽Brose EDI项目案例
  • 从科举到高考,人才选拔制度的变革与发展
  • 利用Docker一键发布Nginx-Tomcat-MySQL应用集群
  • 关于数据库数据国际化方案
  • 【系统架构设计师】高分论文:论信息系统的安全与保密设计
  • 使用Tauri创建桌面应用
  • 【docker】docker compose多容器部署
  • JS +CSS @keyframes fadeInUp 来定义载入动画
  • Seatunnel解决ftp读取json文件无法读取数组以及格式化之后的json无法解析的问题
  • Elasticsearch在liunx 中单机部署
  • 深入探索 HarmonyOS 的 Navigation 组件:灵活的页面管理与动态导航
  • 【CUDA】CUDA Hierarchy
  • 28.100ASK_T113-PRO Linux+QT 显示一张照片
  • GitLab使用中遇到的一些问题-记录
  • 【微服务】Docker
  • 【C#】书籍信息的添加、修改、查询、删除
  • Python 入门教程(2)搭建环境 | 2.4、VSCode配置Node.js运行环境
  • Spark常问面试题---项目总结
  • 【AI系统】Auto-Tuning 原理
  • AMEYA360:上海永铭电子全新高压牛角型铝电解电容IDC3系列,助力AI服务器电源高效运转
  • echarts地图立体效果,echarts地图点击事件,echarts地图自定义自定义tooltip
  • 什么是 Socket?
  • 【版本控制】SVN安装到使用一条路讲解
  • KVCKVO
  • PyQt设计界面优化 #qss #ui设计 #QMainWindow