背景: 我用 Python 编写 Squish GUI 测试。我尝试尽可能将测试代码设为 Pythonic 和 DRY,因此我将所有重复代码移至单独的类/模块中。
问题定义: test.verify 或 assert 语句告诉调试器停止在语句所在的那一行,在大多数情况下,这是带有单个测试步骤详细信息的模块。此行在手动运行期间在 Eclipse 中显示,并由 Jenkins 中的自动测试输出。
要真正查看测试失败的原因,最好在带有断言的过程的调用点停止调试器。然后测试人员/GUI 开发人员可以发现 GUI 上的哪些操作会导致问题以及检查的内容。
例子:
test_abstract.py
class App():
def open_file(self, filename):
pass # example
def test_file_content(content):
# squish magic to get file content from textbox etc.
# ...
test.verify(content in textBoxText)
test_file_opening.py
def main():
app = App()
app.open_file('filename.txt')
app.test_file_content('lorem')
由于 test.verify() 调用测试失败,调试器停止并指向 test_abstract.py 文件。它实际上没有说明导致此测试失败的测试步骤。
有没有办法告诉调试器忽略测试失败的直接位置,并让它显示调用测试过程的位置。我正在寻找在通用测试文件本身中不需要太多代码的优雅方式。
不是理想的解决方案: 现在我没有在抽象模块中使用 test.verify 并在特定的测试用例代码中调用它。广义测试函数返回一个用 * 解包的元组 (test_result, test_descriptive_message_with error):
def test_file_content(content):
# test code
return (result, 'Test failed because...')
测试用例代码包含:
test.verify(*test_file_content('lorem'))
这很好用,但是每个测试用例代码都必须包含很多 test.verify(*... 并且测试开发人员必须记住它。更不用说它看起来很湿...(不是 DRY)。