zoukankan      html  css  js  c++  java
  • uinttest单元测试框架

    unittest是python中自带的单元测试框架,用来做单元测试
     
    uinttestd的属性如下:
    unitetest.TestCase :测试用例
     
    unittest.TestSuite():多个测试用例集合在一起,创建测试套件
     
    unitetest.defaultTestLoader:用来加载TestCase到TestSuite中的.通过该类下面的discover()方法可自动根据测试目录start_dir匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件
    unitetest.TextTextRunner:协调测试执行并向用户提供执行结果的组件,通过该类下面的run()方法来运行suite所组装的测试用例,入参为suite测试套件
     
    unittest.skip():装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例就可以用装饰器屏蔽。
    @unittest.skip(reason):无条件跳过装饰的测试,并说明跳过测试的原因。
    @unittest.skipIf(reason):条件为真时,跳过装饰的测试,并说明跳过测试的原因。
    @unittest.skipUnless(reason):条件为假时,跳过装饰的测试,并说明跳过测试的原因。
    @unittest.expectedFailure(): 测试标记为失败。
     
     
    TestCase类的属性如下:
    setUp():setUp()方法用于测试用例执行前的初始化工作。如测试用例中需要访问数据库,可以在setUp中建立数据库连接并进行初始化。如测试用例需要登录web,可以先实例化浏览器。
     
    tearDown():tearDown()方法用于测试用例执行之后的善后工作。如关闭数据库连接。关闭浏览器。
     
    assert*():一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的。
     
    assertEqual(a,b,[msg='测试失败时打印的信息']):断言a和b是否相等,相等则测试用例通过。
    assertNotEqual(a,b,[msg='测试失败时打印的信息']):断言a和b是否相等,不相等则测试用例通过。
    assertTrue(x,[msg='测试失败时打印的信息']):断言x是否True,是True则测试用例通过。
    assertFalse(x,[msg='测试失败时打印的信息']):断言x是否False,是False则测试用例通过。
    assertIs(a,b,[msg='测试失败时打印的信息']):断言a是否是b,是则测试用例通过。
    assertNotIs(a,b,[msg='测试失败时打印的信息']):断言a是否是b,不是则测试用例通过。
    assertIsNone(x,[msg='测试失败时打印的信息']):断言x是否None,是None则测试用例通过。
    assertIsNotNone(x,[msg='测试失败时打印的信息']):断言x是否None,不是None则测试用例通过。
    assertIn(a,b,[msg='测试失败时打印的信息']):断言a是否在b中,在b中则测试用例通过。
    assertNotIn(a,b,[msg='测试失败时打印的信息']):断言a是否在b中,不在b中则测试用例通过。
    assertIsInstance(a,b,[msg='测试失败时打印的信息']):断言a是是b的一个实例,是则测试用例通过。
    assertNotIsInstance(a,b,[msg='测试失败时打印的信息']):断言a是是b的一个实例,不是则测试用例通过。
     
    Test fixture:对一个测试用例环境的搭建和销毁,是一个fixture,通过覆盖 TestCase的setUp()和tearDown()方法来实现。这个有什么用呢?比如说在这个测试用例中需要访问数据库,那么可以在setUp() 中建立数据库连接以及进行一些初始化,在tearDown()中清除在数据库中产生的数据,然后关闭连接。注意tearDown的过程很重要,要为以后的 TestCase留下一个干净的环境。关于fixture,还有一个专门的库函数叫做fixtures,功能更加强大
     
    addTest(): addTest()方法是将测试用例添加到测试套件中,如下方,是将test_baidu模块下的BaiduTest类下的test_baidu测试用例添加到测试套件。
    suite = unittest.TestSuite()
    suite.addTest(test_baidu.BaiduTest('test_baidu'))
     
    import unittest

    import testcases # 导入模块
    # 创建测试套件
    suite =unittest.TestSuite()
    
    # 将测试用例添加到测试套件
    # 方式一 添加单条用例
    # suite.addTest(LoginTestCase,'test_login_case_pass')
    
    # 方式二 添加一个测试用例类中的所有用例
    # loader:用来往测试套件中加载测试用例
    # loader = unittest.TestLoader()
    # suite.addTest(loader.loadTestsFromTestCase(LoginTestCase))
    
    # 方式三 添加一个模块中所有的测试用例
    loader = unittest.TestLoader()
    suite.addTest(loader.loadTestsFromModule(testcases))
    
    # 方式四:添加一个路径(目录)下面的所有测试用例
    # loader = unittest.TestLoader()
    # suite.addTest(loader.discover(r"D:zhuyy	estunittest	est_data"))
    
    # 如何去运行测试套件中的所有测试用例?
    # 创建测试运行程序
    # runner = unittest.TextTestRunner()
    # runner.run(suite)
     
    run(): run()方法是运行测试套件的测试用例,入参为suite测试套件
    runner = unittest.TextTestRunner()
    runner.run(suite)
     
    使用unittest编写python的单元测试代码,包括如下几个步骤:
    1、编写一个python类,继承 unittest模块中的TestCase类,这就是一个测试类
    2、在上面编写的测试类中定义测试方法(这个就是指的测试用例),每个方法的方法名要求以 test 打头,没有额外的参数。 在该测试方法中 调用被测试代码,校验测试结果,TestCase类中提供了很多标准的校验方法,如 最常见的assertEqual。
    3、执行 unittest.main() ,该函数会负责运行测试,它会实例化所有TestCase的子类,并运行其中所有以test打头的方法。
     
    使用unittest框架编写测试用例思路----基本思路如下:
     
    # coding=utf-8
    #1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
    
    #2.注释:包括记录创建时间,创建人,项目名称。
    '''
    Created on 2016-7-27
    @author: Jennifer
    Project:使用unittest框架编写测试用例思路
    '''
    #3.导入unittest模块
    import unittest
    
    #4.定义测试类,父类为unittest.TestCase。
    #可继承unittest.TestCase的方法,如setUp和tearDown方法,不过此方法可以在子类重写,覆盖父类方法。
    #可继承unittest.TestCase的各种断言方法。
    class Test(unittest.TestCase): 
        
    #5.定义setUp()方法用于测试用例执行前的初始化工作。
    #注意,所有类中方法的入参为self,定义方法的变量也要“self.变量”
    #注意,输入的值为字符型的需要转为int型
        def setUp(self):
            self.number=raw_input('Enter a number:')
            self.number=int(self.number)
    
    #6.定义测试用例,以“test_”开头命名的方法
    #注意,方法的入参为self
    #可使用unittest.TestCase类下面的各种断言方法用于对测试结果的判断
    #可定义多个测试用例
    #最重要的就是该部分
        def test_case1(self):
            print self.number
            self.assertEqual(self.number,10,msg='Your input is not 10')
            
        def test_case2(self):
            print self.number
            self.assertEqual(self.number,20,msg='Your input is not 20')
    
        @unittest.skip('暂时跳过用例3的测试')
        def test_case3(self):
            print self.number
            self.assertEqual(self.number,30,msg='Your input is not 30')
    
    #7.定义tearDown()方法用于测试用例执行之后的善后工作。
    #注意,方法的入参为self
        def tearDown(self):
            print 'Test over'
            
    #8如果直接运行该文件(__name__值为__main__),则执行以下语句,常用于测试脚本是否能够正常运行
    if __name__=='__main__':
    #8.1执行测试用例方案一如下:
    #unittest.main()方法会搜索该模块下所有以test开头的测试用例方法,并自动执行它们。
    #执行顺序是命名顺序:先执行test_case1,再执行test_case2
        unittest.main()
    
    '''
    #8.2执行测试用例方案二如下:
    #8.2.1先构造测试集
    #8.2.1.1实例化测试套件
        suite=unittest.TestSuite()
    #8.2.1.2将测试用例加载到测试套件中。
    #执行顺序是安装加载顺序:先执行test_case2,再执行test_case1
        suite.addTest(Test('test_case2'))
        suite.addTest(Test('test_case1'))
    #8.2.2执行测试用例
    #8.2.2.1实例化TextTestRunner类
        runner=unittest.TextTestRunner()
    #8.2.2.2使用run()方法运行测试套件(即运行测试套件中的所有用例)
        runner.run(suite)'''
        
    '''
    #8.3执行测试用例方案三如下:
    #8.3.1构造测试集(简化了方案二中先要创建测试套件然后再依次加载测试用例)
    #执行顺序同方案一:执行顺序是命名顺序:先执行test_case1,再执行test_case2
        test_dir = './'
        discover = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
    #8.3.2执行测试用例
    #8.3.2.1实例化TextTestRunner类
        runner=unittest.TextTestRunner()
    #8.3.2.2使用run()方法运行测试套件(即运行测试套件中的所有用例)
        runner.run(discover)   
    '''
     
     
     

    处在这个俗世,也得让自己变得更好吧
  • 相关阅读:
    第九天 how can I 坚持
    第八天 how can I 坚持
    第七天 how can I 坚持
    第六天 how can I 坚持
    第五天 how can I 坚持
    第四天 how can I 坚持
    第三天 how can I坚持
    第二天 how can I 坚持
    raw文件系统 分类: 生活百科 2013-11-09 14:12 448人阅读 评论(0) 收藏
    初次接触:DirectDraw 分类: VC++ DirectX 2013-11-09 11:16 950人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/butaileng7/p/14474996.html
Copyright © 2011-2022 走看看