记TestCase中一次意外的跳过执行
2023-12-28 13:37:53
1? 背景
? ? ? ? 当前框架采用Selenium+Unittest+HTMLTestRunner,执行用例前先汇总收集所有要执行的用例,再统一执行。????????
def all_testcase():
# 待执行测试用例的目录
case_dir = ".\\TestCase"
testcase = unittest.TestSuite()
discover = unittest.defaultTestLoader.discover(case_dir, pattern="*.py", top_level_dir=None)
# discover筛选出来的用例,添加到测试套件中
for test_suite in discover:
for test_case in test_suite:
# 添加测试用例到 testcase
testcase.addTest(test_case)
print(testcase)
return testcase
if __name__ == "__main__":
path = ".\\report"
isExists = os.path.exists(path)
if not isExists:
os.mkdir(path)
nowtime = datetime.now().strftime("%Y.%m.%d.%H%M%S.%f")[:-3]
rtime = datetime.now().strftime("%Y.%m.%d %H:%M")
report_path = ".\\report\\result_%s" % nowtime
os.mkdir(report_path)
report_file = report_path + "\\result_%s.html" % nowtime
fp = open(report_file, "wb")
runner = HTMLTestRunner(stream=fp, title=u'测试报告', description=u'用例执行情况:')
# 运行用例
runner.run(all_testcase())
2? 事件
? ? ? ? 在一次查看测试报告时,发现了一个问题,被依赖的测试用例执行通过了,但依赖的用例没有执行,跳过了。
? ? 跟踪后发现,原来是另一个测试类中有同名的测试用例跳过了,导致本该执行的用例没有执行。
3? 分析解决
? ? 因为在此框架中是重写了测试跳过方法,因本人对Unittest研究有限,没有在此方法中找到解决办法。
? ? 重写的方法代码如下:
def skip_dependon(depend=""):
"""
:param depend: 依赖的用例函数名,默认为空
:return: wraper_func
"""
def wraper_func(test_func):
@wraps(test_func) # @wraps:避免被装饰函数自身的信息丢失
def inner_func(self):
if depend == test_func.__name__:
raise ValueError("{} cannot depend on itself".format(depend))
# print("self._outcome", self._outcome.__dict__)
# 此方法适用于python3.4 +
# 如果是低版本的python3,请将self._outcome.result修改为self._outcomeForDoCleanups
# 如果你是python2版本,请将self._outcome.result修改为self._resultForDoCleanups
failures = str([fail[0] for fail in self._outcome.result.failures])
errors = str([error[0] for error in self._outcome.result.errors])
skipped = str([error[0] for error in self._outcome.result.skipped])
flag = (depend in failures) or (depend in errors) or (depend in skipped)
if failures.find(depend) != -1:
# 输出结果 [<__main__.TestDemo testMethod=test_login>]
# 如果依赖的用例名在failures中,则判定为失败,以下两种情况同理
# find()方法:查找子字符串,若找到返回从0开始的下标值,若找不到返回 - 1
test = unittest.skipIf(flag, "{} failed".format(depend))(test_func)
elif errors.find(depend) != -1:
test = unittest.skipIf(flag, "{} error".format(depend))(test_func)
elif skipped.find(depend) != -1:
test = unittest.skipIf(flag, "{} skipped".format(depend))(test_func)
else:
test = test_func
return test(self)
return inner_func
return wraper_func
? ? 后来,只能通过更改各测试类中的测试用例名,使各测试用例名称唯一来避免。
以上,记之。
文章来源:https://blog.csdn.net/zljun8210/article/details/135263933
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!