zoukankan      html  css  js  c++  java
  • python单元测试unittest

    运行方式一:unittest.main()

    用unittest.main()全部运行,用例必须是以test开头,结果不会生成报告

    import unittest
    def add(a,b):
        return a+b
    class TestAdd(unittest.TestCase):
        '''测试加法类'''
        def test_add_1normal(self):
            '''正常测试加法'''
            result = add(1,2)
            self.assertEqual(3,result)
        def test_add_2error1(self):
            '''测试失败'''
            result = add(1,2)
            self.assertEqual(4,result)
        def test_add_3error2(self):
            '''测试失败带信息'''
            result = add(1,2)
            self.assertEqual(4,result,'正常整数相加,结果错误')
    if __name__ == '__main__':
        # 不产生测试报告
        unittest.main()

    运行结果:

     运行方式二:生成报告

    报告样式1生成:

    将HTMLTestRunner文件加入环境变量中或项目目录下

    引入HTMLTestRunner包

    import HTMLTestRunner

    运行某些用例:

    if __name__ == '__main__':
        # 运行某一个用例
        test_suite = unittest.TestSuite()
        test_suite.addTest(TestAdd('test_add_1normal'))#运行某一个用例
        test_suite.addTest(TestAdd('test_add_2error1'))
        test_suite.addTest(TestAdd('test_add_3error2'))
        with open('report.html','wb') as fw:
            runner = HTMLTestRunner.HTMLTestRunner(stream=fw,title='测试报告',description='接口测试报告',verbosity=3)
            runner.run(test_suite)

    运行所有用例:

    if __name__ == '__main__':
        # 运行类中的所有用例
        test_suite = unittest.makeSuite(TestAdd)
        with open('report.html', 'wb') as fw:
            runner = HTMLTestRunner_PY3.HTMLTestRunner(stream=fw, title='测试报告', description='接口测试报告', verbosity=3)
            runner.run(test_suite)

    运行结果:

     报告:

     报告样式2生成:

    import HTMLTestRunner_PY3
    # 运行类中的所有用例
        test_suite = unittest.makeSuite(TestAdd)
        with open('report.html', 'wb') as fw:
            runner = HTMLTestRunner_PY3.HTMLTestRunner(stream=fw, title='测试报告', description='接口测试报告', verbosity=3)
            runner.run(test_suite)

    运行某个目录下的所有符合条件的用例:

    # 查找某个目录下的所有测试用例
        test_suite = unittest.defaultTestLoader.discover('cases','case*.py')
        with open('report.html', 'wb') as fw:
            runner = HTMLTestRunner_PY3.HTMLTestRunner(stream=fw, title='测试报告', description='接口测试报告', verbosity=3)
            runner.run(test_suite)

    报告:

     参数化:

    import unittest
    import HTMLTestRunner_PY3
    import parameterized  #引包
    
    class TestAdd(unittest.TestCase):
        @parameterized.parameterized.expand([   #二维数组
            [1,2,3,'参数化1'],
            [-1,2,1,'参数化2'],
            [-1,2,2,'参数化3']
        ]
        )
        def test_param_add(self,a,b,c,desc):
            self._testMethodDoc = desc #每个用例描述参数化
            result = add(a,b)
            self.assertEqual(c,result,'预期是%s,实际是%s'%(c,result)) #断言
    if __name__ == '__main__':
        # 运行类中的所有用例
        test_suite = unittest.makeSuite(TestAdd)
        with open('report.html', 'wb') as fw:
            runner = HTMLTestRunner_PY3.HTMLTestRunner(stream=fw, title='测试报告', description='接口测试报告', verbosity=3)
            runner.run(test_suite)

    setUpClass、tearDownClass、setUp、tearDown:

    初始化类方法和类结束时运行的方法(setUpClass、tearDownClass),每个用例执行时会运行两个方法(setUp、tearDown)

    用例的执行顺序是按照函数名的ASCII表顺序

     1 import unittest
     2 from unittest import TestCase
     3 
     4 def calc(a,b):
     5     c = a//b
     6     return c
     7 
     8 class MyTest(TestCase):
     9     @classmethod#类方法
    10     def setUpClass(cls):#所有用例执行之前运行它用 如只连接一次数据库
    11         print('我是setUpclass')
    12     @classmethod
    13     def tearDownClass(cls):#类中所有用例执行完后运行 如运行完后关闭数据库
    14         print('我是tearDownClass')
    15 
    16     def setUp(self):#每条用例执行之前都会运行它  当注册时可以判断用户名是否已存在,若存在先删除
    17         print('setUp 什么时候运行我呢')
    18     def tearDown(self):#每条用例执行之后都会运行它
    19         print('tearDown 什么时候运行我呢')
    20     def test_calc1(self):#用例运行顺序是根据函数名的字母顺序决定的
    21         #正常的测试用例
    22         res = calc(4,2)
    23         print('第一条用例')
    24         self.assertEqual(2,res,'预期结果和实际结果不符合 预期结果是 2 实际结果是%s'%res)#断言
    25     def test_calc2(self):
    26             # 不正常的测试用例
    27         res = calc(5, 1)
    28         print('第二条用例')
    29         self.assertEqual(5, res)
    30     def test_calc3(self):
    31             # 不正常的测试用例
    32         res = calc(6, 1)
    33         print('第三条用例')
    34         self.assertEqual(6, res)
    35 unittest.main()

    报告样式生成3:

    每条测试用例加描述,更漂亮的测试报告写法,BeautifulReport包需要加入环境变量中

     1 import HTMLTestRunner
     2 import BeautifulReport
     3 import unittest
     4 from unittest import TestCase
     5 
     6 def calc(a,b):
     7     c = a//b
     8     return c
     9 
    10 class MyTest(TestCase):
    11     @classmethod#类方法
    12     def setUpClass(cls):#所有用例执行之前运行它用 如只连接一次数据库
    13         print('我是setUpclass')
    14     @classmethod
    15     def tearDownClass(cls):#类中所有用例执行完后运行 如运行完后关闭数据库
    16         print('我是tearDownClass')
    17 
    18     def setUp(self):#每条用例执行之前都会运行它  当注册时可以判断用户名是否已存在,若存在先删除
    19         print('setUp 什么时候运行我呢')
    20     def tearDown(self):#每条用例执行之后都会运行它
    21         print('tearDown 什么时候运行我呢')
    22     def test_calc1(self):#用例运行顺序是根据函数名的字母顺序决定的
    23         #正常的测试用例
    24         '''正常的测试用例'''
    25         res = calc(4,2)
    26         print('第一条用例')
    27         self.assertEqual(2,res,'预期结果和实际结果不符合 预期结果是 2 实际结果是%s'%res)#断言
    28     def test_calc2(self):
    29             # 不正常的测试用例
    30         '''不正常的测试用例'''
    31         res = calc(5, 1)
    32         print('第二条用例')
    33         self.assertEqual(2, res)
    34     def test_calc3(self):
    35             # 不正常的测试用例
    36         '''描述一下'''
    37         res = calc(6, 1)
    38         print('第三条用例')
    39         self.assertEqual(6, res)
    40 # unittest.main()#它可以帮你运行当前python文件里面的所有用例
    41 test_suite = unittest.TestSuite()#定义一个测试集合
    42 # test_suite.addTests(MyTest('test_calc3'))#只加入某一个测试用例
    43 test_suite.addTest(unittest.makeSuite(MyTest))#把类里所有的测试用例都加入集合
    44 # test_suite.addTest()
    45 #下面是漂亮的测试报告
    46 report = BeautifulReport.BeautifulReport(test_suite)
    47 report.report(description='周的测试',filename='report2.html',log_path='/Users/ihealth-qa/PycharmProjects/untitled/practice')#不用打开文件,直接生成文件,默认在当前,log_path=''可以指定文件位置

  • 相关阅读:
    Download~!
    单身一百年也没用
    文件包含
    重温Bootstrap
    静态网页与动态网页的理解
    百度检索小技巧
    关于网络学习中易混淆知识点的辨析
    常见的网站功能需求及解决方案
    <textarea>输入框提示文字
    利用JavaScript函数对字符串进行加密
  • 原文地址:https://www.cnblogs.com/Mezhou/p/10053821.html
Copyright © 2011-2022 走看看