• unittest同时支持参数化和生成html报告


    最近在用python3.6+unittest+requests做自动化接口测试。发现一个问题,unittest中使用第3方插件parameterized进行参数化,再生成html报告时,运行就会失败。很奇怪,最终没有让这2个同时实现。

    经过一段时间后,发现有2种方法;

    1、用discover+测试报告

    在run.py中,使用discover()方法找到要运行的测试用例,然后放到测试报告中:

     1 import time
     2 import unittest
     3 from BeautifulReport import BeautifulReport
     4 
     5 test_dir = './test_case'
     6 discover = unittest.defaultTestLoader.discover(test_dir,pattern='*testcase.py')
     7 
     8 if  __name__ == '__main__':
     9     now = time.strftime("%Y-%m-%d %H_%M_%S")
    10     html_file = r'D:
    eport'
    11    suite.addTest(ParametrizedTestCase.parametrize(WorkPlaceTestCase, 'test_b2_addplace'))   # 测试用例加入到测试套件
    12     runner = unittest.TextTestRunner()
    13     BeautifulReport(discover).report(filename='测试报告' + now, description='测试', log_path=html_file)
    14     runner.run(discover)

    2、使用ParametrizedTestCase类

    这个感觉绕了很大的弯,是最开始使用的。

    百度到了一个人写的可参数化的ParametrizedTestCase类。再改动了一下,加上比较简单的list。虽然看起来很Low。但是最终目的还算是实现了。

    接口测试用例的类如下:

     1 import unittest
     2 from pylibrary.PyLib import *
     3 
     4 
     5 class ParametrizedTestCase(unittest.TestCase):  #可参数化的类
     6     """ TestCase classes that want to be parametrized should
     7         inherit from this class.
     8     """
     9     def __init__(self, methodName='runTest', param=None):
    10         super(ParametrizedTestCase, self).__init__(methodName)
    11         self.param = param
    12     @staticmethod
    13     def parametrize(testcase_klass,defName=None, param=None):    #参数化方法
    14         """ Create a suite containing all tests taken from the given
    15             subclass, passing them the parameter 'param'.
    16         """
    17         testloader = unittest.TestLoader()
    18         testnames = testloader.getTestCaseNames(testcase_klass)
    19         suite = unittest.TestSuite()
    20         if defName !=None:
    21             for name in testnames:
    22                 if name==defName:
    23                     suite.addTest(testcase_klass(name, param=param))
    24         else:
    25             for name in testnames:
    26                 suite.addTest(testcase_klass(name, param=param))
    27         return suite
    28 
    29 list = [('2018-09-26', '2018-09-26', '测试', '2001', 49, 'TotalCallNum'),
    30         ('2018-09-26', '2018-09-26', '测试', '2001', 60, 'TotalCallAnswered'),
    31         ('2018-09-26', '2018-09-26', '测试', '2001', 60, 'RingNum'),
    32         ('2018-09-13', '2018-09-13', '测试', '2001', 4, 'TotalCallNum_Transfer')]
    33 
    34 class   Interface_report1(ParametrizedTestCase):
    35     def test_Agreport1(self):  #要被测试的用例
    36
    37         self.num = self.param[4]
    38         self.report_num1 = PyLib().getAgReport(self.param[0],self.param[1],self.param[2],self.param[3])
    39         self.report_num=self.report_num1[0][self.param[5]]
    40         self.assertEqual(self.num,self.report_num)

    再用run.py调用上面的testcase

     1 from interface.Interface_report1 import *
     2 from BeautifulReport import BeautifulReport
     3 
     4 
     5 
     6 if  __name__ == '__main__':
     7 
     8     now = time.strftime("%Y-%m-%d %H_%M_%S")
     9     # # 构造测试集
    10     # suite = unittest.TestSuite()
    11     # suite.addTest(Interface_report1('test_Agreport1'))
    12     #
    13     htmlfile = 'D:\Python_code\report\'
    14     # fp = open(htmlfile, 'wb')
    15     # runner = HTMLTestRunner(stream=fp, title='测试报告', description='用例执行情况')
    16     # runner.run(suite)
    17     # fp.close()
    18     suite = unittest.TestSuite()
    19     #suite.addTest(Interface_report1('test_Agreport1'))
    20     for i in list:   #使用list
    21         suite.addTest(ParametrizedTestCase.parametrize(Interface_report1, 'test_Agreport1',param=i))
    22 
    23     BeautifulReport(suite).report(filename='测试报告'+now,description='测试报告',log_path=htmlfile)

    最后运行就可以了,生成的报告用的beautifulreport。感觉还是比较好看的

  • 相关阅读:
    hdu3613(扩展KMP)
    hdu4333(扩展KMP)
    poj 2185
    指数型母函数
    java高精度hdu4043
    卡特兰数简单应用
    hdu3625(第一类斯特林数)
    卡特兰数和斯特林数(转载)
    hdu4045(递推)
    java 中sendredirect()和forward()方法的区别
  • 原文地址:https://www.cnblogs.com/Mollylin/p/9764815.html
Copyright © 2020-2023  润新知