• 单元测试框架(unittest) Lucky


    单元测试框架(unittest)

      接口测试的本质:通过数据驱动测试类里面的函数 

      单元测试的本质:通过代码级别测试函数

      单元测试框架:unittest,pytest

      unittest类功能

        写用例:TestCase类

        加载并执行用例:

          TestSuite类:存储用例

          TestLoader类:找用例,加载用例,存到TestSuite中

          TestRunner类:执行用例

        断言,对比实际结果和期望结果:

           判定用例是否通过 断言 Assert

        测试报告:TextTestRunner类

      例子:

    import unittest
    
    class Demo:
        def add(self,a,b):
            return a+b
    
        def sub(self,a,b):
            return a-b
    
    class TestDemo(unittest.TestCase):# 继承unittest里面的TestCase类
        """编写测试用例,一个用例就是一个函数,函数不能传参,只有self关键字
        所有的用例/函数,都是test开头,test_"""
        def test_demo1(self):
            res = Demo().add(1, 1)
            print('1+1=', res)
    
        def test_demo2(self):
            res = Demo().add(-1, -1)
            print('-1+-1=', res)
    
    if __name__ == '__main__':
        unittest.main() #自测,自动收集当前文件中所有的测试用例来执行

      执行结果:.代表成功 E代码出错 F用例没过,失败了

      执行排序:根据ASCII编码排序 abcd.......xyz

      TestSuite类  

        这个类的实例们是一个个独立的用例

    import unittest
    from base import basic
    
    class Demo:
        def add(self,a,b):
            return a+b
    
        def sub(self,a,b):
            return a-b
    
    class TestDemo(unittest.TestCase):
        def test_demo1(self):
            res = Demo().add(1, 1)
            print('1+1=', res)
    
        def test_demo2(self):
            res = Demo().add(-1, -1)
            print('-1+-1=', res)
    
    if __name__ == '__main__':
        suite = unittest.TestSuite() #存储用例
        #方法一:一个个用例/函数添加
        # suite.addTest(TestDemo('test_demo1')) #创建测试类的实例,参数是test名称
        # suite.addTest(TestDemo('test_demo2'))
        # runner = unittest.TextTestRunner()#执行
        # runner.run(suite)
        #方法二.1:TestLoader类
        # loader = unittest.TestLoader() #创建一个加载器实例
        # suite.addTest(loader.loadTestsFromTestCase(TestDemo))#具体到类
        # runner = unittest.TextTestRunner()
        # runner.run(suite)
        #方法二.2:TestLoader类
        loader = unittest.TestLoader()
        suite.addTest(loader.loadTestsFromModule(basic)) #具体到模块
        runner = unittest.TextTestRunner()
        runner.run(suite)

        *实例化一个类要不要传参数是根据什么决定的?初始化函数

      断言:判断期望值与实际值的比对结果 一致通过 不一致失败    

    import unittest
    
    class Demo:
        def add(self,a,b):
            return a+b
    
        def sub(self,a,b):
            return a-b
    
    class TestDemo(unittest.TestCase):
        def test_demo1(self):
            res = Demo().add(1, 1)
            print('1+1=', res)
            # self.assertEqual(2,res,'计算错误')
            self.assertIsNone(res)
    
        def test_demo2(self):
            res = Demo().add(-1, -1)
            print('-1+-1=', res)
            # self.assertTrue(res)
            self.assertIn(res,[1,2,-2])
    
    if __name__ == '__main__':
       unittest.main()

        self.assertEqual(期望值,结果值,断言失败可以抛出的错)

        self.assertTure(x) bool(x) is True

        self.assertIsNone(x) x is None

        self.assertIn(a,b) a in b

      执行 上下文管理器,使用完成后自动关闭文件,避免忘记关闭文件的情况

        with open('test.txt','w+',encoding='UTF-8') as file:

          runner = unittest.TextTestRunner(stream=file,verbosity=0/1/2) 2是最详细的

          runner.run(suite)

        HTMLTestRunner类:测试报告

        import HTMLTestRunner

          with open('test_report.html','wb') as file:

            runner = HTMLTestRunner.HTMLTestRunner(stream=file,verbosity=0/1/2

                  title='xx',description='xx',tester='xx') 2是最详细的

            runner.run(suite)

      单元测试内断言加异常处理

        try:

          self.assertEqual(-2,res,'报错')

        except AssertionError as e:

          print('xxxx{}'.format(e))

          raise e 异常处理完成后记得要抛出异常

      单元测试框架unittest内setUp和tearDown函数

        def setUp(self):

          每一条用例执行前执行

        def tearDown(self):

          每一条用例执行后执行

  • 相关阅读:
    NET Core-TagHelper实现分页标签
    NET Core-学习笔记(三)
    NET Core-学习笔记(二)
    NET Core-学习笔记(一)
    MVC默认路由实现分页-PagerExtend.dll
    Tomcat优化
    JVM参数配置大全
    tomcat8+memcached session共享
    Tomcat+Nginx+Redis+MySQL实现反向代理、负载均衡、session共享
    搭建Tomcat应用服务器、tomcat虚拟主机及Tomcat多实例部署
  • 原文地址:https://www.cnblogs.com/continuous-luck/p/16426336.html
Copyright © 2020-2023  润新知