• 单元测试unittest


    单元测试框架: unittest  pytest

    uniittest:

      unittest是python内置的单元测试框架,具有编写用例,组织用例,执行用例,输出测试报告等自动化框架的条件。

      unittest中的5个重要概念:test Fixture,TestCase,TestSuite,TestLoder,TextTestRunner

        Test Fixture:搭建测试环境的准备及清理工作,准备执行测试需要的数据,环境等;使用方法setUp(),tearDown(),setUpClass(),tearDownClass();什么时候使用呢?比如说在这个测试用例中需要访问数据库,那么可以在setUp() 中建立数据库连接以及进行一些初始化,在tearDown()中清除在数据库中产生的数据,然后关闭连接。注意tearDown的过程很重要,要为以后的 TestCase留下一个干净的环境。

        TestCase:一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试 代码 (run),以及测试后环境的还原(tearDown)。unittest中测试用例方法都是以test开头的,且执行顺序会按照方法名的ASCII值排序。

        TestSuite:将多个测试用例集合到一起,可以是多个test case,也可以是testSuite,甚至可以test case和 test suite一起。

        TestLoder:加载test case到test suite中

        TextTestRunner:用来执行测试用例

        TextTestResult:存储测试用例的执行结果

      工作原理: 

         1.写好测试用例TestCase;注意测试类需要继承unittest.TestCase,一个函数一条测试用例,不能传参,只支持self参数,函数名必须用test 开头

         2.将测试用例通过testLoder加载到TestSuit存储

         3.通过TextTestRunner()来运行testSuit

         4.通过TextTestResult()生成测试报告

         5.整个过程集成在unittest.main()模块中

         注:TestCase和TestSuit 可以是一个或多个

      常见断言方法:

        

    例:对MathMethod进行单元测试
    
    MathMethod.py
    
    class MathMethod:
        def __init__(self,a,b):
            self.a=a
            self.b=b
    
        def add(self):
            return self.a+self.b
    
        def sub(self):
            return self.a-self.b
    
        def multi(self):
            return self.a*self.b
    
    testMathMethod.py
    
    import unittest
    import os,sys
    current_dir=os.path.dirname(os.path.abspath(__file__))
    #print(current_dir)
    sys.path.append(current_dir)
    #print(sys.path)
    from MathMethod import MathMethod
    
    class testMathMethod(unittest.TestCase):
    
        def test_add_integer(self):
            res=MathMethod(3,5).add()
            self.assertEqual(8,res)
    
        def test_add_zero(self):
            res=MathMethod(0,0).add()
            self.assertEqual(0,res)
    
    执行测试用例:
    runTest.py
    import unittest,os,sys
    dir_path=os.path.dirname(os.path.abspath(__file__))
    sys.path.append(dir_path)
    from testMathMethod import testMathMethod
    import testMathMethod
    
    #方法一,使用testSuit添加测试用例执行
    
    suit=unittest.TestSuite()  #创建一个suit集 存储测试用例
    suit.addTest(testMathMethod('test_add_integer'))  #添加测试用例
    suit.addTest(testMathMethod('test_add_zero'))
    run=unittest.TextTestRunner()  #实例 TextTestRunner()
    run.run(suit)  #执行测试
    
    #方法二 ,使用testLoder加载测试用例到testSuit执行
    loder=unittest.TestLoader()  #创建一个加载器
    #suit.addTest(loder.loadTestsFromTestCase(testMathMethod))  #通过测试用例名加载测试用例
    suit.addTest(loder.loadTestsFromModule(testMathMethod))  #通过模块名加载 测试用例,导入时直接导入模块
    run=unittest.TextTestRunner()
    run.run(suit)
    
    #生成测试报告
    with open('test_result.txt','w+') as file:
        loder=unittest.TestLoader()  #创建一个加载器
        suit.addTest(loder.loadTestsFromModule(testMathMethod)) 
        runner=unittest.TextTestRunner(file,verbosity=2,descriptions='测试报告')
        #verbosity 默认为1,0输出测试执行结果,1 输出测试失败的详细信息  2 输出详细测试执行结果 
        runner.run(suit) 
    #自动根据测试用例路径匹配查找测试用例文件(test*.py),并将查找到的测试用例添加到测试套件
    suit2=unittest.defaultTestLoader.discover(filepath,pattern='test*.py')
  • 相关阅读:
    document.readyState的使用
    Selenium操作滚动条
    seq2seq模型以及其tensorflow的简化代码实现
    MOXA的Nport5600初始密码
    预测功率和电流之间的关系
    KNN与SVM对比&SVM与逻辑回归的对比
    拉格朗日乘子法以及KKT条件
    复合熵、条件熵和信息增益
    softmax为什么使用指数函数?(最大熵模型的理解)
    极大似然、最小二乘和梯度下降
  • 原文地址:https://www.cnblogs.com/muzii/p/13181942.html
Copyright © 2020-2023  润新知