• 单元测试-unittest


    一、简介

    unittest单元测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。

    二、属性介绍

    1、unittest模块的各个属性

    unittest.TestCase:TestCase类,所有测试用例类继承的基本类。

    unittest.main():将一个单元测试模块变为可直接运行的测试脚本,main方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行它们。执行方法的默认顺序是: 根据ASCII码的顺序加载测试用例,数字与字母的顺序为0-9、A-Z、a-z。

    unittest.TestSuite():创建测试套件

    unittest.TextTextRunner():unittest框架的TextTextRunner类,通过该类的run()方法来运行suite所组装的测试用例,参数是suite测试套件.

    unittest.dedaultTestLoaser():defaultTestLoader()类,通过该类下的discover方法,可自动根据测试目录匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover.

    unittest.skip():装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例就可以用装饰器屏蔽。

    @unittest.skip(reason): skip(reason)装饰器:无条件跳过装饰的测试,并说明跳过测试的原因。

    @unittest.skipIf(reason): skipIf(condition,reason)装饰器:条件为真时,跳过装饰的测试,并说明跳过测试的原因。

    @unittest.skipUnless(reason): skipUnless(condition,reason)装饰器:条件为假时,跳过装饰的测试,并说明跳过测试的原因。

    @unittest.expectedFailure(): expectedFailure()测试标记为失败。

    2、TestCase类的属性:

    setUp():setUp()方法用于每个测试用例执行前的初始化工作。如测试用例中需要访问数据库,可以在setUp中建立数据库连接并进行初始化。如测试用例需要登录web,可以先实例化浏览器。

    tearDown():tearDown()方法用于每个测试用例执行之后的善后工作。如关闭数据库连接。关闭浏览器。

    assert*():一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的。

    assertEqual(a,b,[msg='测试失败时打印的信息']):断言a和b是否相等,相等则测试用例通过。

    assertIn(a,b,[msg='测试失败时打印的信息']):断言a是否在b中,在b中则测试用例通过。

    3、TestSuite类的属性

    addTest()addTest()方法是将测试用例添加到测试套件中,一次只能添加一个测试用例,如下方,是将本模块下的MyTest类下的testcasea测试用例添加到测试套件中

    suite=unittest.TestSuite()
    suite.addTest(MyTest('testcasea'))

    addTests():addTests()方法是将多个测试用例添加到测试套件中,参数是可迭代对象,如下方,是将本模块下的MyTest类下的testcasea、testcaseA测试用例添加到测试套件中。

    suite=unittest.TestSuite()
    suite.addTests([MyTest('testcasea'),MyTest('testcaseA')])

    4、TextTextRunner的属性

    run():run方法是运行测试套件的测试用例,参数是suite测试套件。

    三、示例

    import unittest
    #定义要校验的函数,函数的功能是传递两个参数,做两个参数的除法计算
    def division(a,b):
        try:
            return round(a/b,1)
        except Exception as e:
            return '不可计算'
    
    
    #定义测试类,继承unittest.TestCase类
    #可以继承unittest.TestCase类的setUp方法和tearDown方法
    #可以继承unittest.TestCase类的各种断言方法
    class MyTest(unittest.TestCase):
    
        ##定义tearDown()做每一个测试用例执行前的初始化工作
        def setUp(self):
            print('开始测试')
    
    #定义测试用例:以“test_”开头命名的方法
    #注意,方法的入参为self
    #可使用unittest.TestCase类下面的各种断言方法用于对测试结果的判断
    #可定义多个测试用例
    
        def testcasea(self):
            print('testcasea')
            res=division(1,2)
            self.assertEqual(res,0.5,'算错')
    
        def testcaseA(self):
            print('testcaseA')
            res = division(1, 0)
            self.assertEqual(res,'不可计算', '算错')
    
        @unittest.skip('暂时跳过测试用例3')
        def testcaseB(self):
            res = division(1, -2)
            self.assertEqual(res,-0.5, '算错')
    
        #定义tearDown()做每一个测试用例执行完毕的善后工作
        def tearDown(self):
            print('测试用例执行完毕')
    
    #执行测试用例方案1
    #main方法会搜索该模块下所有以test开头的测试用例方法,并自动执行它们。
    #执行顺序是根据测试用例(方法)的名称的ASCII码顺序
    unittest.main()
    
    
    #执行测试用例方法2:
    #先构造测试集
    #实例化测试套件
    suite=unittest.TestSuite()
    #添加测试用例到测试套件中
    #测试用例的执行顺序是根据添加测试用例的顺序,
    #如下,会先执行testcasea,再执行testcaseA、再执行testcaseB
    suite.addTests([MyTest('testcasea'),MyTest('testcaseA'),MyTest('testcaseB')])
    
    
    #执行测试用例,实例化TextTestRunner类
    #调用run方法,运行测试套件
    #执行时,也会根据装饰器判断是否执行或者屏蔽测试用例
    runner=unittest.TextTestRunner()
    runner.run(suite)
    
    # 执行测试用例方案三
    #使用defaultTestLoader类的discover()方法自动到指定目录下匹配查找测试用例文件
    #并自动将找到的测试用例组装到测试套件中
    
    #定义查找目录
    test_dir='./'
    disco=unittest.defaultTestLoader.discover(test_dir,pattern='yaml1.py')
    runner = unittest.TextTestRunner()
    runner.run(disco)

     执行方案1和3的运行结果如下:

    可以看到先执行的testcaseA、在执行的testcasea,且没有执行testcaseB

    开始测试
    testcaseA
    测试用例执行完毕
    开始测试
    testcasea
    测试用例执行完毕
    .s.
    ----------------------------------------------------------------------
    Ran 3 tests in 0.000s
    
    OK (skipped=1)

    执行方案2的运行结果如下:

    可以看到先执行的testcasea、在执行的testcaseA,且testcaseB跳过不执行

    开始测试
    testcasea
    测试用例执行完毕
    开始测试
    testcaseA
    测试用例执行完毕
    ..s
    ----------------------------------------------------------------------
    Ran 3 tests in 0.000s
    
    OK (skipped=1)

    参考网站:

    https://www.cnblogs.com/yufeihlf/p/5707929.html

  • 相关阅读:
    poj1330 Nearest Common Ancestors
    poj3237 Tree
    spoj2798 QTREE3 Query on a tree again!
    spoj913 QTREE2 Query on a treeⅡ
    自动类型转换
    js "+"连接符号
    js parseFloat
    js字符串与数字的运算
    js prompt
    js数组排序
  • 原文地址:https://www.cnblogs.com/ruijie/p/9133654.html
Copyright © 2020-2023  润新知