• unittest 统计测试执行case总数,成功数量,失败数量,输出至文件,生成一个简易的html报告带饼图


    这是一个Python的单元测试框架的示例代码,主要用于执行测试用例并生成测试报告。其中,通过unittest模块创建主测试类MainTestCase,并加载其他文件中的测试用例,统计用例的执行结果并将结果写入文件,最后生成一个简单的测试报告html页面。

    在执行测试时,可以根据需要添加更多的测试文件和测试用例,在自定义CustomTextTestResult类中重写addSuccess和addFailure方法,获取用例的执行结果,并在统计成功和失败的用例数量时进行累加。将用例执行成功和失败的信息分别保存到success_cases和failure_cases列表中,最后将结果写入文件。

    在生成测试报告时,利用HTML和CSS语言生成一个表格结构的页面,并将测试结果以文本和图表的形式展示出来。在页面中使用了一些JavaScript代码来计算成功和失败的百分比,并将其以饼状图的形式呈现出来。最终,将html代码写入到文件中,生成测试报告。

    main.py

    1. import unittest
    2. import time
    3. class MyTestcase(unittest.TestCase):
    4. def test_1(self):
    5. print('main_test_1')
    6. self.assertEqual(2 - 2, 4)
    7. def test_2(self):
    8. print('main_test_2')
    9. self.assertEqual(2 - 2, 4)
    10. def test_3(self):
    11. print('test_3')
    12. time.sleep(2)
    13. self.assertEqual(2 + 2, 4)
    14. def test_4(self):
    15. print('test_4')
    16. self.assertEqual(2 - 2, 4)
    17. def test_5(self):
    18. print('test_5')
    19. self.assertEqual(2 + 2, 4)
    20. def test_6(self):
    21. print('test_6')
    22. self.assertEqual(2 + 2, 4)
    23. def test_7(self):
    24. print('test_7')
    25. self.assertEqual(2 + 2, 4)
    26. def test_8(self):
    27. print('test_8')
    28. self.assertEqual(2 + 3, 4)

     Testcase2.py

    1. import unittest
    2. class TestcaseGo(unittest.TestCase):
    3. def test_1(self):
    4. print('TestcaseGo_test_1')
    5. self.assertEqual(2 - 2, 4)
    6. def test_2(self):
    7. print('TestcaseGo_test_2')
    8. self.assertEqual(2 - 2, 4)
    9. def test_3(self):
    10. print('TestcaseGo_test_3')
    11. self.assertEqual(2 + 2, 4)
    12. def test_4(self):
    13. print('TestcaseGo_test_3')
    14. self.assertEqual(2 + 2, 4)
    15. def test_5(self):
    16. print('TestcaseGo_test_3')
    17. self.assertEqual(2 + 2, 4)
    18. def test_6(self):
    19. print('TestcaseGo_test_3')
    20. self.assertEqual(2 + 2, 4)
    21. def test_7(self):
    22. print('TestcaseGo_test_3')
    23. self.assertEqual(2 + 2, 4)
    24. def test_8(self):
    25. print('TestcaseGo_test_3')
    26. self.assertEqual(2 + 2, 4)
    27. def test_9(self):
    28. print('TestcaseGo_test_3')
    29. self.assertEqual(2 + 2, 4)
    30. def test_10(self):
    31. print('TestcaseGo_test_3')
    32. self.assertEqual(2 + 2, 4)
    33. def test_11(self):
    34. print('TestcaseGo_test_3')
    35. self.assertEqual(2 + 2, 4)
    36. def test_12(self):
    37. print('TestcaseGo_test_3')
    38. self.assertEqual(2 + 2, 4)
    39. def test_13(self):
    40. print('TestcaseGo_test_3')
    41. self.assertEqual(2 + 2, 4)
    42. def test_14(self):
    43. print('TestcaseGo_test_3')
    44. self.assertEqual(2 + 2, 4)
    45. def test_15(self):
    46. print('TestcaseGo_test_3')
    47. self.assertEqual(2 + 2, 4)
    48. def test_16(self):
    49. print('TestcaseGo_test_3')
    50. self.assertEqual(2 + 2, 4)
    51. def test_17(self):
    52. print('TestcaseGo_test_3')
    53. self.assertEqual(2 + 2, 4)
    54. def test_18(self):
    55. print('TestcaseGo_test_3')
    56. self.assertEqual(2 + 2, 4)
    57. def test_19(self):
    58. print('TestcaseGo_test_3')
    59. self.assertEqual(2 + 2, 4)
    60. def test_20(self):
    61. print('TestcaseGo_test_3')
    62. self.assertEqual(2 + 2, 4)
    63. def test_21(self):
    64. print('TestcaseGo_test_3')
    65. self.assertEqual(2 + 2, 4)
    66. def test_22(self):
    67. print('TestcaseGo_test_3')
    68. self.assertEqual(2 + 2, 4)
    69. def test_23(self):
    70. print('TestcaseGo_test_3')
    71. self.assertEqual(2 + 2, 4)
    72. def test_24(self):
    73. print('TestcaseGo_test_3')
    74. self.assertEqual(2 + 2, 4)

     run.py

    1. import unittest
    2. import datetime
    3. # 创建主测试类
    4. class MainTestCase(unittest.TestCase):
    5. pass
    6. if __name__ == '__main__':
    7. # 统计测试用例执行开始时间
    8. today1 = datetime.date.today()
    9. current_time1 = datetime.datetime.now().time()
    10. # print("执行开始时间:" + str(today1) +" "+ str(current_time1))
    11. # 创建测试加载器
    12. loader = unittest.TestLoader()
    13. # 加载其他Python文件中的测试用例并添加到主测试类中
    14. test_cases = [
    15. loader.loadTestsFromName('main.MyTestcase'),
    16. loader.loadTestsFromName('Testcase2.TestcaseGo')
    17. # 添加更多的测试文件和测试用例
    18. ]
    19. suite = unittest.TestSuite(test_cases)
    20. suite.addTests(loader.loadTestsFromTestCase(MainTestCase))
    21. # 计算总用例数量
    22. total_count = suite.countTestCases()
    23. # 定义全局的成功、失败和总数计数变量
    24. success_count = 0
    25. failure_count = 0
    26. # 保存执行成功的用例和执行失败的用例
    27. success_cases = []
    28. failure_cases = []
    29. # 重写run()方法,获取用例的执行结果
    30. class CustomTextTestResult(unittest.TextTestResult):
    31. def addSuccess(self, test):
    32. global success_count
    33. success_count += 1
    34. success_cases.append(str(test))
    35. super().addSuccess(test)
    36. def addFailure(self, test, err):
    37. global failure_count
    38. failure_count += 1
    39. failure_cases.append(str(test))
    40. super().addFailure(test, err)
    41. # 创建测试运行器并运行测试
    42. runner = unittest.TextTestRunner(verbosity=2, resultclass=CustomTextTestResult)
    43. result = runner.run(suite)
    44. # 将结果写入文件,指定编码格式为UTF-8
    45. with open("test_result.txt", "w", encoding="utf-8") as file:
    46. file.write(f"成功的用例数量: {success_count}\n")
    47. file.write(f"失败的用例数量: {failure_count}\n")
    48. file.write(f"总用例数量: {total_count}\n")
    49. file.write("\n执行成功的用例:\n")
    50. for case in success_cases:
    51. file.write(case + "\n")
    52. file.write("\n执行失败的用例:\n")
    53. for case in failure_cases:
    54. file.write(case + "\n")
    55. print("测试结果已写入文件 test_result.txt")
    56. # print(total_count)
    57. # print(success_count)
    58. # print(failure_count)
    59. # print(success_cases)
    60. # print(failure_cases)
    61. # 生成一个简单的测试报告html页面
    62. def html_report(today1, current_time1, total_count, success_count, failure_count, success_cases, failure_cases):
    63. # 用例总数量、成功数量、失败数量、百分比
    64. Success_Rate = (success_count / total_count) * 100
    65. failure_Rate = (failure_count / total_count) * 100
    66. # print(int(Success_Rate))
    67. # print(int(failure_Rate))
    68. Success_Rate_text = str(int(Success_Rate)) + '%'
    69. failure_Rate_text = str(int(failure_Rate)) + '%'
    70. # print(Success_Rate_text)
    71. # print(failure_Rate_text)
    72. Success_Rate_text_b = '{'+str(Success_Rate)+'}%'
    73. # 拼接元素
    74. # text_content1 = "\n".join(success_cases)
    75. # text_content2 = "\n".join(failure_cases)
    76. test_cases_with_br = [f"{case}
      "
      for case in success_cases]
    77. # 将带有
      标签的元素连接成一个字符串
    78. text_content1 = "".join(test_cases_with_br)
    79. test_cases_with_br = [f"{case}
      "
      for case in failure_cases]
    80. # 将带有
      标签的元素连接成一个字符串
    81. text_content2 = "".join(test_cases_with_br)
    82. text_content1 = text_content1
    83. text_content2 = text_content2
    84. # 统计测试用例执行时间
    85. today2 = datetime.date.today()
    86. current_time2 = datetime.datetime.now().time()
    87. # print("执行结束时间:" + str(today2) + str(current_time2))
    88. time_diff = datetime.datetime.combine(datetime.date.min, current_time2) - datetime.datetime.combine(
    89. datetime.date.min, current_time1)
    90. strat_time = str(today1) + " " + str(current_time1)
    91. over_time = str(today2) + " " + str(current_time2)
    92. # 测试报告html源码
    93. report = """
    94. 表格示例


    95. 成功的用例数量成功的用例占比失败的用例数量失败的用例占比总用例数量
      {success_count}{Success_Rate_text}{failure_count}{failure_Rate_text}{total_count}

    96. 执行开始时间执行结束时间执行总耗时
      {strat_time}{over_time}{time_diff}


    97. 成功
      失败

    98. 执行成功的用例执行失败的用例
      {text_content1}{text_content2}


    99. """.format(time_diff=time_diff, strat_time=strat_time, over_time=over_time, total_count=total_count,
    100. success_count=success_count, Success_Rate_text=Success_Rate_text, failure_count=failure_count,
    101. failure_Rate_text=failure_Rate_text, text_content1=text_content1, text_content2=text_content2) \
    102. + \
    103. """
    104. """.format(Success_Rate_text=Success_Rate_text_b) + """
    105. """
    106. # ${successPercentage}%
    107. # $81%
    108. print(report)
    109. with open("html_result.html", "w", encoding="utf-8") as file:
    110. file.write(report)
    111. print("测试报告生成成功!")
    112. html_report(today1, current_time1, total_count, success_count, failure_count, success_cases, failure_cases)
    113. # html_report(total_count, success_count, failure_count, success_cases, failure_cases)

  • 相关阅读:
    快手、抖音、视频号交战内容付费
    企业电子招投标采购系统——功能模块&功能描述+数字化采购管理 采购招投标
    HCIA-datacom 4.3 实验三:网络地址转换配置实验
    python 一次性删除列表(list)的空白元素(空内容) 或者 一次性删除列表(list)中的指定元素
    46.全排列 | 51.N皇后
    何为博弈心理学?
    SpringBoot+Vue项目餐饮管理系统
    利用bat脚本 一键将文件中的png图片转为 jpg图片
    CKA真题分析-2023年度
    HIve数仓新零售项目DWS层的构建(Grouping sets)模型
  • 原文地址:https://blog.csdn.net/qq_26086231/article/details/134230697