如何在跳过 Pytest 类时避免参数化?

问题描述 投票:0回答:1

我有两个 Pytest 类:一个测试类非常快,另一个测试类较慢,通过函数调用参数化自身并在多个测试中重用该资源。

我的问题是,当通过

pytest test.py -k "Quick"
运行较快的测试时,我必须等待较慢的测试被参数化,然后才能运行指定的测试。

class TestQuick:
    def test_quick(self): pass

@pytest.mark.parametrize('num', get_nums())
class TestSlow
    def test_1(self, num): pass
    def test_2(self, num): pass

def get_nums():
    inputs = range(100)
    with multiprocess.Pool(10) as pool:
        return list(pool.map(IO_fn, # takes a lot of time
                             inputs))

我试过使用

@pytest.mark.parametrize('num', get_nums(), indirect=True
),但我无法让它工作。

我也尝试在

@pytest.fixture(scope='class')
上使用
IO_fn
,这是几乎在那里除了:

  1. 我失去了使用多处理加速收集
    nums
    的关键能力。
  2. 我希望我的测试输出按
    TestSlow/num/test
    分组,而不仅仅是
    TestSlow/test
    .
  3. 的平面目录
python pytest lazy-evaluation parametrize
1个回答
0
投票

有点“肮脏”的黑客来解析输入参数并在遇到

Quick
标签时停止执行长进程:

import sys
import pytest


def get_nums():
    if sys.argv[-1] == 'Quick':
        return []
    inputs = range(100)
    with multiprocess.Pool(10) as pool:
        return list(pool.map(IO_fn, inputs))


class TestQuick:
    def test_quick(self): pass


@pytest.mark.parametrize('num', get_nums())
class TestSlow:
    def test_1(self, num): pass

    def test_2(self, num): pass

测试:

pytest test.py -k "Quick"
——跑得快

pytest test.py -k "Slow"
— 运行缓慢

© www.soinside.com 2019 - 2024. All rights reserved.