情境: 我的一个测试用例是执行带有几个输入文件和特定输出的shell程序。我想测试这些输入/输出的不同变体,并且每个变体都保存在自己的文件夹中,即文件夹结构
/testA
/testA/inputX
/testA/inputY
/testA/expected.out
/testB
/testB/inputX
/testB/inputY
/testB/expected.out
/testC/
...
这是我运行此测试的代码:
def test_folders(self):
tfolders = glob.iglob(os.environ['testdir'] + '/test_*')
for testpath in tfolders:
testname = os.path.basename(testpath)
self.assertTrue(self.runTest(testname))
在这种情况下, testname是" testX"。它在该文件夹中使用inputs
执行外部程序,并将其与同一文件夹中的expected.out
进行比较。
问题: 一旦它遇到失败的测试,测试就会停止并获得:
Could not find or read expected output file: C:/PROJECTS/active/CMDR-Test/data/test_freeTransactional/expected.out
======================================================================
FAIL: test_folders (cmdr-test.TestValidTypes)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\PROJECTS\active\CMDR-Test\cmdr-test.py", line 52, in test_folders
self.assertTrue(self.runTest(testname))
AssertionError: False is not true
问题: 如何让它继续其余的测试并显示有多少失败? (实质上是动态创建单元测试并执行它)
由于
答案 0 :(得分:5)
这样的事情怎么样?
def test_folders(self):
tfolders = glob.iglob(os.environ['testdir'] + '/test_*')
failures = []
for testpath in tfolders:
testname = os.path.basename(testpath)
if not self.runTest(testname):
failures.append[testname]
self.assertEqual([], failures)
答案 1 :(得分:0)
将 assert 语句放在 try 块中,即使断言失败,循环也会完全迭代:
try:
assert statement
except
print("exception occurred!!")