【发布时间】:2016-11-30 06:05:39
【问题描述】:
我有一些 python 代码和一堆 pytest 测试。
我预计会失败的一些测试(也就是说,我正在测试错误处理,所以我传递了应该导致我的代码抛出异常的输入。)
为了做到这一点,我有这样的代码:
CF_TESTDATA =[('data/1_input.csv', 'data/1_input.csv', 'utf-8'),
pytest.mark.xfail(('data/1_input_unknown_encoding.txt', '', 'utf-8')),
('data/1_input_macintosh.txt', 'data/1_converted_macroman.csv', 'macroman')]
@pytest.mark.parametrize('input_file, expected_output, encoding', CF_TESTDATA)
def test_convert_file(testdir, tmpdir, input_file, expected_output, encoding):
'''
Test the function that converts a file to UTF-8.
'''
...
这里的想法是这个测试的第二次运行,input_file = 'data/1_input_unknown_encoding.txt',我预计被测代码会失败。
这似乎工作正常,当我从命令行运行时,pytest 告诉我测试已经失败。我可以按照调试器中的代码查看它是否引发了预期的异常。所以这一切都很好。
但 Jenkins 将这个测试显示为已跳过。当我查看输出时,我看到了以下消息:
Skip Message
expected test failure
为什么测试显示为已跳过?似乎测试运行,并且按预期失败。这与跳过的测试不同。
【问题讨论】:
-
当您从 Jenkins 运行时,您是否从与交互式运行相同的当前目录运行它?
-
我猜 Jenkins 会读取 JUnitXML 输出?我猜JUnitXML 根本没有办法说xfail,所以pytest 使用skip。但我真的不知道。
-
@TheCompiler 是 jenkins junit 插件读取 junit xml。 junit xml 包含一个类似
<skipped message="the skipped message">的标签,用于跳过或预期的失败测试。该消息可以是来自 skip() 调用中消息的自定义消息。在 xfail 或 xpass 的情况下,消息由 pytest 设置为“预期的测试失败”或“xfail 标记的测试意外通过”。
标签: python unit-testing jenkins pytest