Python 3.x 如何基于我使用@pytest.mark.skipif设置的self.skip_标志跳过测试

Python 3.x 如何基于我使用@pytest.mark.skipif设置的self.skip_标志跳过测试,python-3.x,pytest,Python 3.x,Pytest,我想根据我在setup方法中所做的检查跳过几个测试用例。 安装程序只应运行一次,如果skip_flag设置为TRUE,则应跳过所有测试用例 我试过使用skipif。但这并没有帮助 class TestTmp: @pytest.fixture(autouse=True) def更新(自我,请求): first\u time=request.config.cache.get('first\u time',True) 如果第一次: self.skip_标志=False request.config.c

我想根据我在setup方法中所做的检查跳过几个测试用例。 安装程序只应运行一次,如果
skip_flag
设置为TRUE,则应跳过所有测试用例

我试过使用skipif。但这并没有帮助

class TestTmp:
@pytest.fixture(autouse=True)
def更新(自我,请求):
first\u time=request.config.cache.get('first\u time',True)
如果第一次:
self.skip_标志=False
request.config.cache.set('first_time',False)
如果为真:
self.skip_标志=真
其他:
self.skip_标志=False
def跳过测试(自):
如果self.skip_标志:
返回真值
其他:
返回错误
@pytest.mark.skipif(跳过测试,reason=“skip”)
def测试一(自身):
断言正确
@pytest.mark.skipif(跳过测试,reason=“skip”)
def测试_twp(自身):
断言错误
@pytest.mark.skipif(跳过测试,reason=“skip”)
def测试_三(自):
断言正确
现在,即使
skip_测试
false
,测试用例也会被跳过。
我无法在
skipif(skip_test(self),reason='skip')
内进行调用,因为
self
无法访问,
skipif
decorator中指定的条件在实际测试执行开始之前的测试收集阶段进行评估,这意味着您的
update
fixture尚未调用,并且尚未设置
skip\u标志

可用于在设置或测试执行期间强制跳过测试执行

另外,由于希望setup方法只运行一次,所以可以将fixture的范围设置为
session
scope

class TestTmp:
@fixture(autouse=True,scope=“session”)
def更新(自我,请求):
first\u time=request.config.cache.get('first\u time',True)
如果第一次:
request.config.cache.set('first_time',False)
pytest.skip(“跳过原因”)
def测试一(自身):
断言正确
def测试_twp(自身):
断言错误
def测试_三(自):
断言正确

正如hoefling在评论中提到的那样,
skipif
装饰器中指定的条件在测试收集阶段本身进行评估,该阶段发生在实际测试执行开始之前,这意味着您的
更新
装置尚未被调用,并且
跳过标志
尚未设置

可用于在设置或测试执行期间强制跳过测试执行

另外,由于希望setup方法只运行一次,所以可以将fixture的范围设置为
session
scope

class TestTmp:
@fixture(autouse=True,scope=“session”)
def更新(自我,请求):
first\u time=request.config.cache.get('first\u time',True)
如果第一次:
request.config.cache.set('first_time',False)
pytest.skip(“跳过原因”)
def测试一(自身):
断言正确
def测试_twp(自身):
断言错误
def测试_三(自):
断言正确

pytest.mark.skipif
是一名装饰师。它将在模块导入时评估一次,不再评估。但是,您可以使用跳过测试,例如,在您的设备中,如果条件为:pytest.skip(“跳过此测试是因为这个和那个”)
pytest.mark.skipif
是一个装饰程序。它将在模块导入时评估一次,不再评估。但是,您可以使用跳过测试,例如,在您的夹具中,如果条件为:pytest.skip(“跳过此测试是因为这个和那个”)