В pytest, как пропустить или xfail определенные светильники?
у меня есть сильно фиксированная тестовая функция, которая терпит неудачу (как и должно быть) с определенными входами крепления. Как я могу это указать? Это то, что я делаю сейчас, и, возможно, есть лучший способ. Я довольно новичок в py.test
поэтому я был бы признателен за любые советы.
следующая часть - все входные светильники. Кстати, example_datapackage_path
определена в conf.test
@pytest.fixture(params=[None, 'pooled_col', 'phenotype_col'])
def metadata_key(self, request):
return request.param
@pytest.fixture(params=[None, 'feature_rename_col'])
def expression_key(self, request):
return request.param
@pytest.fixture(params=[None, 'feature_rename_col'])
def splicing_key(self, request):
return request.param
@pytest.fixture
def datapackage(self, example_datapackage_path, metadata_key,
expression_key, splicing_key):
with open(example_datapackage_path) as f:
datapackage = json.load(f)
datatype_to_key = {'metadata': metadata_key,
'expression': expression_key,
'splicing': splicing_key}
for datatype, key in datatype_to_key.iteritems():
if key is not None:
resource = name_to_resource(datapackage, datatype)
if key in resource:
resource.pop(key)
return datapackage
@pytest.fixture
def datapackage_dir(self, example_datapackage_path):
return os.path.dirname(example_datapackage_path)
и вот сам тест.
def test_from_datapackage(self, datapackage, datapackage_dir):
import flotilla
from flotilla.external import get_resource_from_name
study = flotilla.Study.from_datapackage(datapackage, datapackage_dir,
load_species_data=False)
metadata_resource = get_resource_from_name(datapackage, 'metadata')
expression_resource = get_resource_from_name(datapackage,
'expression')
splicing_resource = get_resource_from_name(datapackage, 'splicing')
phenotype_col = 'phenotype' if 'phenotype_col'
not in metadata_resource else metadata_resource['phenotype_col']
pooled_col = None if 'pooled_col' not in metadata_resource else
metadata_resource['pooled_col']
expression_feature_rename_col = 'gene_name' if
'feature_rename_col' not in expression_resource
else expression_resource['feature_rename_col']
splicing_feature_rename_col = 'gene_name' if
'feature_rename_col' not in splicing_resource
else splicing_resource['feature_rename_col']
assert study.metadata.phenotype_col == phenotype_col
assert study.metadata.pooled_col == pooled_col
assert study.expression.feature_rename_col
== expression_feature_rename_col
assert study.splicing.feature_rename_col == splicing_feature_rename_col
что я хотел бы сделать это в metadata_key
, сказал, что когда параметр pooled_col
или phenotype_col
, что он потерпит неудачу. Я заглянул в pytest: пропустить и xfail: дело с тестами, которые не могут добиться успеха, но он только говорил о skip
и xfail
для параметризованного теста, но не приспособлений.
1 ответов
в своем datapackage
или expression_key
светильники вы можете использовать pytest.xfail
и pytest.skip
как рассказали здесь. Например:
@pytest.fixture
def datapackage(self, example_datapackage_path, metadata_key,
expression_key, splicing_key):
if metadata_key == 'pooled_col':
pytest.skip('metadata key is "pooled_col"')
...
вы также можете использовать pytest.mark.xfail
в параметрах приспособления, как в следующем примере:
@pytest.fixture(params=['a', pytest.mark.xfail('b'), 'c'])
def fx1(request):
return request.param
def test_spam(fx1):
assert fx1
если вы предпочитаете пропустить эти тесты, это, кажется, работает:
@pytest.fixture(
params=['a', pytest.mark.skipif(True, reason='reason')('b'), 'c'])
def fx1(request):
return request.param
def test_spam(fx1):
assert fx1