使用unittest框架运行测试套件时测试用例未执行问题咨询
测试用例未执行的问题排查与修复
我帮你梳理下代码里的几个核心问题,这就是导致测试用例没跑起来的原因:
1. 测试套件被多次赋值覆盖了
你现在的代码里,先把Apa_login的测试用例加载到suite,紧接着又用Show_processmap的用例重新赋值给suite——这就相当于把之前的测试用例全丢了,最后套件里可能只剩后者(如果后者本身也没符合规范的测试方法,那就是空套件)。
正确的做法是把两个测试类的用例都添加到同一个套件里,而不是覆盖:
def suite(): suite = unittest.TestSuite() # 把两个测试类的用例都加入套件 suite.addTests(unittest.TestLoader().loadTestsFromTestCase(Apa_login)) suite.addTests(unittest.TestLoader().loadTestsFromTestCase(Show_processmap)) return suite
2. suite函数多了个多余的self参数
你的suite是个普通函数,不是类里的方法,没必要加self参数——这个参数会导致调用函数时参数不匹配,大概率会触发报错,影响套件的生成。直接把self删掉就好。
3. 运行时没调用suite函数生成套件
在主代码块里,你直接把suite(这是个函数对象)传给了runner.run(),而不是调用suite()拿到实际的测试套件实例。相当于你给了runner一个“生成套件的模板”,而不是真正的套件,自然不会执行测试。
修改后的主代码块应该是这样:
if __name__ == '__main__': runner = unittest.TextTestRunner() # 先调用函数生成实际的测试套件 test_suite = suite() runner.run(test_suite) print(test_suite)
额外要检查的点
别忘了确认你的Apa_login和Show_processmap类:
- 必须继承
unittest.TestCase,比如class Apa_login(unittest.TestCase): - 类里的测试方法必须以
test_开头,比如test_login_normal(),这是unittest识别测试用例的硬性规则,不符合的话就算加载了类也不会执行任何用例。
最后给你贴个修复后的完整代码参考:
from apa_login import Apa_login from processmap import Show_processmap import unittest, HTMLTestRunner, apa_login, processmap def suite(): suite = unittest.TestSuite() suite.addTests(unittest.TestLoader().loadTestsFromTestCase(Apa_login)) suite.addTests(unittest.TestLoader().loadTestsFromTestCase(Show_processmap)) return suite if __name__ == '__main__': runner = unittest.TextTestRunner() test_suite = suite() runner.run(test_suite) print(test_suite)
内容的提问来源于stack exchange,提问作者Henry.Huang
相关产品推荐
相关产品推荐

