python-pytest 命令行运行输入自定义参数

本文介绍如何在运行pytest时通过命令行传递服务器名称作为参数。参照官方文档,可以实现根据命令行选项传递不同值给测试函数。提供了一个`conftest.py`的实例,运行命令为`pytest --ip_type=abc`。

需求

需要在运行时指定服务器,即服务器名称参数化

官方文档

https://docs.pytest.org/en/latest/example/simple.html
–>
Pass different values to a test function, depending on command line options

实例代码

conftest.py 文件

def pytest_addoption(parser):
    parser.addoption(
        "--ip_type", action="store", default="test_terminal",
在 `pytest` 中,命令行参数使用 `-`(单横线)和 `--`(双横线)的区别遵循 Unix/Linux 命令行的一般约定,主要体现在 **短选项(short option)** 和 **长选项(long option)** 的语法上。 --- ### ✅ 简要结论: | 符号 | 含义 | 示例 | 说明 | |------|------|------|------| | `-` | 单字符短选项(single-character short option) | `-v`, `-x`, `-s` | 只能跟一个字母,简洁快速 | | `--` | 多字符长选项(long option) | `--verbose`, `--collect-only`, `--tb=short` | 更具可读性,适合复杂参数 | --- ### 📌 详细解释与示例 #### 1. 使用 `-` 的短选项(Short Options) - 用于简写形式的命令行参数- 通常是一个字母。 - 可以合并使用(如 `-vsx` 等价于 `-v -s -x`)。 ```bash pytest -v # 显示详细输出(verbose) pytest -s # 允许打印(捕获 stdout 输出) pytest -x # 遇到第一个失败就停止 pytest -vs # 同时启用 verbose 和 打印功能 ``` > ⚠️ 注意:不是所有字母都有意义,只有 pytest 定义过的才有效。 --- #### 2. 使用 `--` 的长选项(Long Options) - 是完整拼写的参数名,更具可读性。 - 不可合并,必须单独写。 - 支持带等号赋值。 ```bash pytest --verbose # 等同于 -v pytest --version # 显示 pytest 版本 pytest --collect-only # 只收集测试用例,不执行 pytest --tb=short # 精简 traceback 格式 pytest --junitxml=report.xml # 输出 JUnit XML 报告 pytest --markers # 显示所有可用的标记(markers) ``` --- ### 🔁 对应关系举例 | `-` 形式 | `--` 形式 | 功能说明 | |---------|-----------|--------| | `-v` | `--verbose` | 增加输出详细程度 | | `-q` | `--quiet` | 减少输出 | | `-s` | (无直接对应) | 允许 print 输出(属于 capture 控制) | | `-x` | `--exitfirst` | 第一次失败时退出 | | `-k` | `--keyword` | 按关键字筛选测试用例 | | `-m` | `--mark` | 按标记运行测试 | | `-l` | `--showlocals` | 在 traceback 中显示局部变量 | > 例如: > ```bash > pytest -k "login" # 运行包含 login 的测试 > pytest --keyword="login" # 等价写法 > ``` --- ### ❗ 特殊情况说明 #### ✅ `--` 的另一个用途:分隔参数 有时 `--` 被用来 **分隔 pytest 自身参数和传递给测试脚本的参数**(即避免歧义)。 ```bash pytest tests/ -- -v ``` 这里的 `-v` 是传给测试函数的?还是 pytest 的? 实际上,**`--` 之前的是 pytest 参数,之后的是环境或应用参数**。但注意:pytest 并不会自动处理 `--` 后的内容,除非你在代码中解析 `sys.argv`。 更常见的是用于调试场景: ```bash pytest --pdb -- tests/test_debug.py::test_something ``` --- ### 🧩 自定义插件中的 `-` vs `--` 如果你开发 pytest 插件,可以在 `pytest_addoption(parser)` 中定义自己的选项: ```python def pytest_addoption(parser): parser.addoption( "-C", "--config", action="store", default=None, help="自定义配置文件路径" ) ``` 这样就可以使用: ```bash pytest -C config.yml # 或 pytest --config=config.yml ``` --- ### ✅ 最佳实践建议 | 场景 | 推荐方式 | |------|----------| | 日常调试 | 使用 `-v -s` 快速输入 | | CI/CD 脚本 | 使用 `--verbose --junitxml=...` 提高可读性 | | 文档/分享命令 | 使用 `--` 长选项,便于理解 | | 组合操作 | 可以混合使用:`pytest -v --collect-only test_file.py` | --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值