Pytest测试框架系列 - pytest 添加自定义命令行参数

前言

我们先来考虑一下如果存在下面场景,我们在不改变代码的情况实现:

  • 一般来说公司存在几套环境,例如回归测试用例,我们需要在不同的环境进行测试,自动化用例有时候也需要支持在不同测试环境运行

我们可能想到:

  • 配置文件里面指定,在不同环境运行之前,进行测试地址修改
  • 在执行脚本命令时,动态带参数

本次我们讲解pytest框架的自定义命令行参数,也就是 在执行脚本命令时,动态带参数
这里需要用到:

  • pytest_addoption 注册参数
  • config.getoption 获取命令行参数

pytest_addoption 和 config.getoption详解

pytest框架本身使用示例:

def pytest_addoption(parser: Parser) -> None:
    parser.addoption(
        "--lsof",
        action="store_true",
        dest="lsof",
        default=False,
        help="run FD checks if lsof is available",
    )
    parser.addoption(
        "--runpytest",
        default="inprocess",
        dest="runpytest",
        choices=("inprocess", "subprocess"),
        help=(
            "run pytest sub runs in tests using an 'inprocess' "
            "or 'subprocess' (python -m main) method"
        ),
    )

parser.addoption() 常用参数说明:

  • name:自定义命令行参数的名字,就配置为:"–foo"格式;
  • action:默认action=“store”,只存储参数的值,可以存储任何类型的值,命令行参数多次使用也只能生效一个,最后一个值覆盖之前的值;
  • default:默认值。
  • choices:可以指定几个值,自定义参数必须在这几个值中选择一个,否则会报错;
  • help:对参数作用的简要说明;

使用示例

一般写在 contest.py文件里面:

# !/usr/bin/python3
# _*_coding:utf-8 _*_
""""
# @Time  :2021/7/26 22:52
# @Author  : king
# @File    :conftest.py
# @Software  :PyCharm
# @blog     :https://blog.csdn.net/u010454117
# @WeChat Official Account: 【测试之路笔记】
"""
import pytest

hosts = {
    "dev": "http://dev.xxxx.com",
    "test": "http://test.xxxx.com",
    "pre": "http://pre.xxxx.com",
    "pro": "http://pro.xxxx.com",
}

def pytest_addoption(parser):
    parser.addoption(
        "--host",
        action="store",
        default="test",
        choices=["dev", "test", "pre", "pro"],
        help="dev:表示开发环境, \
             test:表示测试环境, \
             pre: 表示预发布环境,\
             pro: 表示生产环境,\
             默认test环境"
    )

@pytest.fixture(scope='session')
def get_cmdopts(request):
    if hosts.get(request.config.getoption("--host")):
        return hosts.get(request.config.getoption("--host"))

test_addoptions.py 文件:

# !/usr/bin/python3
# _*_coding:utf-8 _*_
""""
# @Time  :2021/7/26 20:51
# @Author  : king
# @File    :test_addoptions.py
# @Software  :PyCharm
# @blog     :https://blog.csdn.net/u010454117
# @WeChat Official Account: 【测试之路笔记】
"""
import pytest

def test_option(get_cmdopts):
    print(get_cmdopts)

if __name__ == '__main__':
    pytest.main()

输入pytest -s 查看执行结果:
执行结果
输入pytest -s --host=pre 查看执行结果:
执行结果
输入pytest -s --host=demo 查看执行结果:
执行结果
结论:通过pytest_addoption 注册自定义参数和 使用config.getoption获取参数,就可以实现命令行动态获取参数

那别人怎么查看我们自己注册了那些参数呢?

我们可以通过pytest -h 查看自定义的参数:
自定义参数

总结

  • pytest_addoption 注册自定义参数详解
  • 使用config.getoption 获取自定义参数
  • 查看自定义参数列表

以上为内容纯属个人理解,如有不足,欢迎各位大神指正,转载请注明出处!

如果觉得文章不错,欢迎关注微信公众号,微信公众号每天推送相关测试技术文章
个人微信号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试之路king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值