我在使用py.test进行单元测试时遇到了一个小问题。
我使用py.test来运行测试并输出junitxml测试报告。 这个xml报告在jenkins中导入并生成很好的统计信息。
当我使用派生自unittest.TestCase的测试类时, 我使用以下方法跳过预期的失败:
@ unittest.skip(“Bug 1234:这不起作用”)
选择此测试时,此消息也会显示在jenkins中。
当我不使用unittest.TestCase类时,例如使用py.test参数化功能, 我使用以下方法跳过预期的失败:
@ pytest.mark.xfail(reason =“Bug 1234:这不起作用”,run = False)
但是这个原因实际上并没有在詹金斯中显示出来,而是会说:
跳过消息
预期的测试失败
我该如何解决这个问题?
答案 0 :(得分:2)
我使用这一行解决了它作为测试的第一行:
pytest.skip(“Bug 1234:这不起作用”)
我宁愿使用其中一个pytest装饰器,但这样做。
答案 1 :(得分:1)
我有一个类似的问题,除了我有一个不同的Jenkins消息,并且无法分辨哪个测试被跳过。
事实证明,如果模块中唯一的测试是跳过测试,那么jenkins就不会在测试结果列表中显示测试(使用装饰器或jr-be的解决方案)。您可以看到在总结果中有一个跳过的测试,但无法确定跳过的测试所在的测试或模块。
为了解决这个问题(确定黑客解决方案),我回到我的测试中使用装饰器并添加了一个虚拟测试(因此有1个测试运行,1个测试被跳过):
@pytest.skip('SONIC-3218')
def test_segments_create_delete(self, api):
logging.info('TestCreateDeleteSegments.test_segments_create_delete')
def test_dummy(self, api):
'''
Dummy test to see if suite will display in jenkins if one
test is run and 1 is skipped (instead of having only skipped tests)
'''
logging.info('TestCreateDeleteSegments.test_dummy')
对我而言,因为我宁愿进行一次额外的虚拟测试,也能找到我跳过的测试。