我有一个带有3个测试的测试文件。测试需要一个通过命令行传递的参数。在运行pytest --serial-port [port name]时,它说“收集了15项”。虽然应该只有3!
test_xyz.py
import os
import time
import serial
from plot import plot_file
def test_abc(serial_port):
# test code here
def test_xyz(serial_port):
# test code here
def test_pqr(serial_port):
# test code hereconftest.py
def pytest_addoption(parser):
parser.addoption("--serial-port", help="Target serial port")
parser.addoption('--count', default=1, type='int', metavar='count',
help='Run each test the specified number of times')
def pytest_generate_tests(metafunc):
if "serial_port" in metafunc.fixturenames:
serial_port = metafunc.config.getoption("serial_port")
if serial_port:
metafunc.parametrize("serial_port", serial_port)
else:
raise EnvironmentError('Target serial port not specified. Use --serial-port [serial port]')环境:Python3.8.1 Pytest 5.3.5
发布于 2020-03-03 13:21:49
您可能正在使用由5位数字组成的串口运行pytest,如下所示:
pytest --serial-port 12345
您的test_xyz.py中有3个函数。
那么到底发生了什么?您正在参数化串行端口,这是一个字符串。这些测试实际上是使用serial_port = "1"到serial_port = "5"的值运行的。
conftest.py中的这一行将导致测试被调用5*3次。
metafunc.parametrize("serial_port", serial_port)您可以将conftest更改为:
import pytest
def pytest_addoption(parser):
parser.addoption("--serial-port", help="Target serial port")
parser.addoption('--count', default=1, type='int', metavar='count',
help='Run each test the specified number of times')
@pytest.fixture(scope='session')
def serial_port(request):
port = request.config.option.serial_port
if port is None:
pytest.skip()
return porthttps://stackoverflow.com/questions/60505953
复制相似问题