问答 使用 unittest 框架执行测试用例报错’NoneType‘ object is not callable

薄暮 · 2022年04月08日 · 最后由 薄暮 回复于 2022年04月12日 · 3746 次阅读

最近在做端到端测试项目的整改,将 python 版本适配了 3.9.7,执行一段测试用例后总会有以下报错:

希望各位路过的大佬救救😂
补充说明:

  1. python 版本 3.9.7,使用 pyenv 进行管理
  2. 报告是使用了 HTMLTestRunner,不知道这个会不会有影响,之前一直用着没啥问题
  3. suite 的加载使用 addTetst 和 addTests 结合,主要是为了做不同权限角色用户的测试,用例的加载方式时 loadTestsFromTestCase;每次执行到 test_change_role_002_change_role_to_hkia_operator 后就会报错
DevOpsRoleCases = [mapMonitorCases, efenceAdvancedCases, eventsLogCases, selfCheckCases]
HKIAOperatorRoleCases = [mapMonitorCases, efenceBasicCases, dataRecordCases, selfCheckCases]

suite = unittest.TestSuite()
suite.addTest(TestChangeRole('test_change_role_001_change_role_to_devops'))
suite.addTests(DevOpsRoleCases)
suite.addTest(TestChangeRole('test_change_role_002_change_role_to_hkia_operator'))
suite.addTests(HKIAOperatorRoleCases)
……
共收到 8 条回复 时间 点赞
Time 回复

了解,因为 python2.7 的时候这样写没什么问题—— 就是用的 loadfromtestcase 加载测试用例,然后每组测试用例用列表装起来,因为第一组这样封装的测试用例是成功执行完成了的~可以看一下我楼上的回复

Thirty-Thirty 回复

感谢追踪,现在的逻辑是这样的
首先每一组模块用力都是用 loadfromtestcase 来加载的,比如 mapMonitorCases = unittest.TestLoader().loadTestsFromTestCase(test_map_monitor.TestMapMonitor);
然后每一种角色需要执行的测试用例,用列表装一起,比如 HKIAOperatorRoleCases = [mapMonitorCases, efenceBasicCases, dataRecordCases, selfCheckCases];
接下来用 addTests 加载每一种角色的测试用例,每组测试之间会加入切换角色的一个用例

现状:
按照顺序能从上到下执行部分测试用例,执行一半后就报错了

addTests 的用法应该是这样的吧,suite.addTests([UserTestCase2("testCase3"), UserTestCase2("testCase1"), UserTestCase("testCase1")])

suite.addTests(DevOpsRoleCases) 这个看起来是加载了一个类?应该具体到这个类(DevOpsRoleCases)里面的用例吧?
想要全量执行某个类中的所有用例请用 unittest.defaultTestLoader.discover

薄暮 回复

从这条回答上看,出问题的地方在于 suite.addTests(HKIAOperatorRoleCases);
从帖子内容上看,出问题的地方在于 suite.addTest(TestChangeRole('test_change_role_002_change_role_to_hkia_operator')),“每次执行到 test_change_role_002_change_role_to_hkia_operator 后就会报错”;

给的信息确实不够。

Thirty-Thirty 回复

你好,两个用例几乎是一样的,只是在做一个切换角色的操作;
suite.addTest(TestChangeRole('test_change_role_001_change_role_to_devops'))
suite.addTests(DevOpsRoleCases)
suite.addTest(TestChangeRole('test_change_role_002_change_role_to_hkia_operator'))
这三组执行完成之后,执行到下一组的 tests 时就会报错以上

因为我这边也只能得到这些信息... 感觉也有点奇怪

给的信息有点少,不太好定位问题

对比下 test_change_role_002_change_role_to_hkia_operator 和 test_change_role_001_change_role_to_devops 吧,要么都过要么都错

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册