gpt4 book ai didi

python - 为什么 py.test 将我的 xfail 测试显示为已跳过?

转载 作者:行者123 更新时间:2023-12-04 16:45:39 25 4
gpt4 key购买 nike

我有一些 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

为什么测试显示为跳过?似乎测试运行,并按预期失败。这与跳过测试不同。

最佳答案

答案是我错误地使用了 xfail。它不应该用于预期测试失败。它不会那样做。如果测试失败或不失败,则记录为通过。

我需要做的是更改测试以捕获我期望的异常,如果未抛出异常则出错。然后我将删除 xfails。

xfail 似乎适用于您的测试暂时失败的情况,并且您希望您的测试套件通过。所以它与其说是期待失败,不如说是不在乎失败。

虽然测试仍在运行,但不会检查结果,因此报告显示此测试已被跳过是合理的。

我的测试现在看起来像这样:

# Test the run function. 
ex1 = False
try:
result = main.run(base_dir + '/'+ input_file, \
client_config['properties'])
except ValueError as e:
ex1 = True
print e

if expect_fail:
assert ex1
else:
assert not ex1
assert filecmp.cmp(result, base_dir + '/' + expected_output), \
"Ouput file is not the same as the expected file: " + expected_output

关于python - 为什么 py.test 将我的 xfail 测试显示为已跳过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38592457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com