pytest命令行传递参数excelpath实现数据驱动

简介: pytest命令行传递参数excelpath实现数据驱动

我们可以在命令行中使用pytest传递自定义参数excelpath,然后在测试脚本中获取excelpath的路径,然后解析成数据集批量执行。


一、代码实现


import pytest
def pytest_addoption(parser):
    parser.addoption("--excelpath", action="store", default=None, help="The Excel path that stores test datas.")
@pytest.fixture
def excelpath(request):
    return request.config.getoption("--excelpath")
def test_get_cases(excelpath):
    print(f'excelpath: {excelpath}')
    # values = parse_excel(excelpath)
    # return values
    return [1, 2, 3]  # demo for values
@pytest.mark.parametrize('case', test_get_cases(excelpath))
def test_runner(case):
    print(case)


二、Demo验证


命令行中运行:

python -m pytest tests/test_cases.py --excelpath=path/to/excel -s


运行结果:

=========================================================================================================================================================== test session starts ===========================================================================================================================================================
platform win32 -- Python 3.9.18, pytest-7.4.0, pluggy-1.0.0
rootdir: D:\BaiduSyncdisk\xyouwen-workspace\ddautotest
plugins: dependency-0.5.1
collecting ... excelpath: <function excelpath at 0x0000011F8261E940>
collected 4 items                                                                                                                                                                                                                                                                                                                           
tests\test_cases.py excelpath: path/to/excel
.1
.2
.3
.
============================================================================================================================================================ warnings summary ============================================================================================================================================================= 
tests/test_cases.py::test_get_cases
  D:\ProgramFiles\anaconda3\envs\ddautotest\lib\site-packages\_pytest\python.py:198: PytestReturnNotNoneWarning: Expected None, but tests/test_cases.py::test_get_cases returned [1, 2, 3], which will be an error in a future version of pytest.  Did you mean to use `assert` instead of `return`?
    warnings.warn(
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
====================================================================================================================================================== 4 passed, 1 warning in 0.02s 


三、最终代码


避免警告提示,可以在代码中添加:

pytestmark = pytest.mark.filterwarnings("ignore::pytest.PytestReturnNotNoneWarning")


完整代码为:

import pytest
pytestmark = pytest.mark.filterwarnings("ignore::pytest.PytestReturnNotNoneWarning")
def pytest_addoption(parser):
    parser.addoption("--excelpath", action="store", default=None, help="The Excel path that stores test datas.")
@pytest.fixture
def excelpath(request):
    return request.config.getoption("--excelpath")
def test_get_cases(excelpath):
    print(f'excelpath: {excelpath}')
    # values = parse_excel(excelpath)
    # return values
    return [1, 2, 3]  # demo for values
@pytest.mark.parametrize('case', test_get_cases(excelpath))
def test_runner(case):
    print(case)
目录
相关文章
|
4月前
|
Python
`cmd`模块是Python标准库中的一个模块,它提供了一个简单的框架来创建命令行解释器。
`cmd`模块是Python标准库中的一个模块,它提供了一个简单的框架来创建命令行解释器。
|
5月前
|
Python
python命令行传递参数的两种方式
python在命令行运行.py文件时,如何在命令行传递参数给运行程序,python默认提供了sys模块的系统参数属性实现接收命令行中的外部参数。 另一种则是通过argparse模块实现的,argparse模块可以实现事先对命令行参数的初始化,更加的便于命令行参数的管理。
|
4月前
|
存储 Python 容器
`click`是一个用于构建命令行接口的Python包,它提供了简单、可组合的命令行解析器。
`click`是一个用于构建命令行接口的Python包,它提供了简单、可组合的命令行解析器。
|
6月前
|
存储 开发者 Python
Python中的argparse模块:命令行参数解析的利器
Python中的argparse模块:命令行参数解析的利器
60 2
|
6月前
|
数据采集 数据处理 开发工具
argparse是你的好帮手:快速编写自动化脚本、测试脚本、数据处理脚本
argparse是你的好帮手:快速编写自动化脚本、测试脚本、数据处理脚本
|
Python
python中动态导入文件的方法
python中动态导入文件的方法
349 0
python中动态导入文件的方法
|
测试技术 C++ Python
【pytest】pytest的几种运行方式,尤其最后一种调试很方便
【pytest】pytest的几种运行方式,尤其最后一种调试很方便
|
Python
【Python】__all__的作用/模块导入
【Python】__all__的作用/模块导入
77 0
|
测试技术
python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(优化版)
python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(优化版)
310 0
python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(优化版)
|
测试技术
pytest conftest.py和fixture的配合使用
pytest conftest.py和fixture的配合使用