在 TestCase 的 setUp
函数中,我将成员变量 is_type
设置为 True 或 False。我在类中有一些测试,如果值为 false,则不应运行这些测试。我不知道如何使用 skipif
功能来做到这一点。
@py.test.mark.skipif( not ???.is_type )
def test_method(self):
...
self
对 ???
不起作用,因为它还不在对象中。如何引用 is_type
变量?更完整的例子:
class DBTest(unittest.TestCase):
def setUp(self):
self.is_dynamo = os.environ.get( 'TEST_DB', '' ) == 'Dynamo'
def test_account_ts(self):
if not self.is_dynamo:
return
...
如何将
if not self.is_dynamo
转换为 py.test skipif 条件? 最佳答案
正如您所提到的,您不能在 skipif
标记中引用实例,因为该实例尚不存在。
我会保持简单并执行以下操作:
@pytest.mark.skipif(os.environ.get('TEST_DB') != 'Dynamo')
def test_dynamo():
db = MyDatabaseWithDynamo(is_dynamo=True)
# Some assertion or other.
您也可以在类上使用
@pytest.mark.skipif
。关于这个特性的 documentation 有一些很好的例子。其中许多与检查部分环境以决定应该跳过哪些测试有关。这听起来与您的用例非常相似,所以我会说您的公司很好。
但是,如果正如您在下面的评论中所说,您想避免使用全局变量,则可以从任何地方引发
pytest.skip
异常。下面我是在一个装置中进行的,我认为它可以使测试设置与测试用例很好地分开。有关更多可能性,请参阅 the documentation。这是我的测试文件:
import os
import pytest
class MyDatabaseWithDynamo(object):
def __init__(self, is_dynamo):
pass
@pytest.fixture
def database():
is_dynamo = os.environ.get('TEST_DB') == 'Dynamo'
if not is_dynamo:
raise pytest.skip()
return MyDatabaseWithDynamo(is_dynamo=True)
def test_db(database):
pass
这是测试输出:
$ py.test test_foo.py
======================================= test session starts =======================================
platform darwin -- Python 2.7.5 -- py-1.4.20 -- pytest-2.5.2
collected 1 items
test_foo.py s
==================================== 1 skipped in 0.01 seconds ===================================
关于python - 如何使用 py.test skipif 检查成员变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22603562/