zoukankan      html  css  js  c++  java
  • API自动化测试笔记(三):应用多线程+合并测试报告

    (一)说明

        说明在API自动化如何使用多线程去执行测试用例,合并测试报告。

        不同测试框架有不同的地方,这里以unittest框架+BeautifulReport为例进行说明。

        步骤大概分为以下几步:

         1、获取所有测试套件。以[(测试套件1,0,),(测试套件, 1,).....]的格式返回

         2、应用concurrent.futures.ThreadPoolExecutor  将第一步的测试套件传给我们执行测试的方法,多线程并发执行用例,将测试报告放到临时目录下。

         3、将临时目录下的测试报告合并为一份测试报告

    (二)获得测试套件、执行测试代码(仅供参考)

    仅供参考,代码本身就不是完整的。

     1 #!/usr/bin/python
     2 # -*- coding: utf-8 -*-
     3 
     4 from unittest import defaultTestLoader
     5 from common.general import General
     6 from BeautifulReport import BeautifulReport
     7 import concurrent.futures
     8 
     9 
    10 class RunTestTool():
    11 
    12     def __init__(self, temp_report_path, report_path, report_name="report_new.html"):
    13         """
    14         运行测试公共组件
    15         :param temp_report_path: 测试报告临时存放目录(使用多线程生成的测试报告存放目录)
    16         :param report_path: 测试报告路径
    17         :param report_name: 测试报告文件名称
    18         """
    19         self.project_path = General.get_project_path()  # 获取工程路径
    20         self.temp_report_path = '{}{}'.format(self.project_path, temp_report_path)
    21 
    22     def get_all_test_suit(self, test_case_path,description="测试报告", pattern='*_test.py'):
    23         """
    24         返回目录及子目录下的所有测试用例
    25         :param description: 测试报告描述
    26         :param test_case_path: 测试用例目录,接受list	uple
    27         :param pattern: 匹配测试用例文件的正则表达式
    28         :return:
    29         """
    30         all_test_suit = []
    31         test_suit = defaultTestLoader.discover(start_dir=test_case_path[0],
    32                                                pattern=pattern,
    33                                                top_level_dir=None)
    34         if len(test_case_path) > 1:
    35             for case_path in test_case_path[1:]:
    36                 path = "{}{}".format(self.project_path, case_path)
    37                 suit = defaultTestLoader.discover(start_dir=path,
    38                                                   pattern=pattern,
    39                                                   top_level_dir=path)
    40                 test_suit.addTest(suit)
    41         num = 0
    42         for i in test_suit:
    43             if len(list(i)) != 0:
    44                 all_test_suit.append((i, num,description))
    45                 num += 1
    46         return all_test_suit
    47 
    48     def run_test(self, test_suit):
    49         description = test_suit[2]
    50         result = BeautifulReport(test_suit[0])
    51         result.report(filename='report{}.html'.format(test_suit[1]),
    52                       description=description,
    53                       report_dir=self.temp_report_path)
    54 
    55 
    56 test_case_path_list = ["目录1",'目录2']
    57 temp_report_path = ""  # 测试报告临时目录
    58 report_path = "" # 测试报告目录
    59 rt = RunTestTool(temp_report_path=temp_report_path, report_path=report_path, )
    60 test_suit = rt.get_all_test_suit(test_case_path=test_case_path_list,
    61                                      description="描述11",
    62                                      pattern="*_test.py")
    63 with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:   # 多线程执行用例
    64         executor.map(rt.run_test, test_suit)

    (三)合并测试报告

         代码就不提供了,提供一个思路,会正则表达式应该很容易实现这个功能。

          1、看下BeautifulReport库生成的测试报告,会发现测试结果都放在这个变量里面 var resultData。

          2、 这样我们可以使用正则表达式将每一个临时测试报告中的resultData的值提取出来

           3、然后合并得到最终的结果,再序列化后替换进HTML报告中即可。

    代码只截取了部分。

  • 相关阅读:
    JSONModel的使用
    gitHub那些优秀的库和想要实现的效果
    CALayer的mask属性
    透明的UITableView
    iOS 常用随机数
    UIView的 形变属性transform
    ARGB色彩模式
    封闭折线图形的渐变色
    iOS系统日历选择问题
    每天积累一点新知识
  • 原文地址:https://www.cnblogs.com/simple-free/p/12805764.html
Copyright © 2011-2022 走看看