zoukankan      html  css  js  c++  java
  • selenium2学习:单元测试框架(1):概念、断言、suite&TextTestRunner

    1       单元测试框架

    1.1     认识单元测试

    Unittest提供了全局的main()方法,使用他可以方便地将一个单元测试模块变成可以直接运行的测试脚本。Main()方法使用testloader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行它们。

    If __name__ == “___main__”:直接使用

    1.1.1      Test case

    一个完整的测试流程,包括测试前准备环境的搭建(setUP)、实现测试过程中的代码(run)、以及测试后环境的还原(tearDown)。单元测试(unit test)的本质也在这里,一个测试用例就是一个完整的测试单元。

    1.1.2      Test suite

    把多个测试用例集合在一起执行,就产生了测试套件testsuite的概念,test suite用来组装单个测试用例,可以通过addtest加载testcase到testsuite中,从而返回一个testsuite实例。

    1.1.3      Test runner

    在unittest单元测试框架中,通过texttestrunner类提供的run()方法来执行test suite/test case。Test runner可以使用图形界面、文本界面,或返回一个特殊的值等方式来表示测试执行的结果。

    1.1.4      Test fixture

    对于一个测试环境的搭建和销毁,就是一个fixture, 通过覆盖testcase的setUP()和tearDown()方法来实现。有什么用呢,比如说在这个测试用例中需要访问数据库,那么可以通过setup()中通过建立数据库连接来进行初始化,在teardown()中清除数据库产生的数据,然后关闭连接等。

    1.2     断言方法

    # 0517005:AssertTest
    import unittest
    
    class test(unittest.TestCase):
        
         def setUp(self):
             print ('')
             print ('test:assert:start')
         def test_case1(self):
             self.assertEqual(10,8,msg='assertEqual:相等。结果:不相等')
             
         def test_case2(self):
             self.assertNotEqual(10,8,msg='assertNotEqual:不相等。结果:OK')
    
         def test_case3(self):         
             self.assertIs('aa','bb',msg='assertIs:是。结果:不是')
             
         def test_case4(self):
             self.assertIsNot('aa','bb',msg='assertIsNot:不是。结果:OK')
    
         def test_case5(self):
             self.assertIn('aa','aabb',msg='assertIn:存在。结果:OK')
    
         def test_case6(self):
             self.assertNotIn('aa','aabb',msg='assertNotIn:不存在。结果:存在')
    
         def tearDown(self):
             print ('test:assert:OVER')
             pass
    if __name__ == '__main__':
        unittest.main()   
    
    '''
    assertIsNone:为空
    assertIsNotNone:不为空
    assertIsInstance(a,b):a为b的一个实例
    assertIsNotInstance(a,b):a不为b的一个实例
    
    '''

    1.3    测试套件

    调用的calculator.py

    #0517006:calculator:add test
    # 计算器类
    
    class count:
        def __init__(self,a,b):
            self.a = int(a)
            self.b = int(b)
    
        def add(self):
            return self.a + self.b

    1.3.1      含一个用例

    测试集包含1个用例:suite.addTest()

    #0517007:suite:just one
    
    from calculator import count
    import unittest
    
    class testcount(unittest.TestCase):
        def setUp(self):
            print('Test Start')
    
        def test_add1(self):
            j = count(2,3)
            self.assertEqual(j.add(),5,msg= '错了1')
    
        def test_add2(self):
            j = count(3,3)
            self.assertEqual(j.add(),5,msg= '错了2')
            
        def test_add3(self):
            j = count(3,8)
            self.assertEqual(j.add(),11,msg= '错了3')
            
        def tearDown(self):
            print('Test Over')
    
    if __name__ == '__main__':
        #构造测试集
        suite = unittest.TestSuite()
        #测试集包含1个用例:suite.addTest()
        suite.addTest(testcount('test_add3'))
        suite.addTest(testcount('test_add2'))
    
        #执行测试
        runner = unittest.TextTestRunner()
        runner.run(suite)

    执行结果:

    >>> 
     RESTART: C:Users	iansAppDataLocalProgramsPythonPython36example-JLLmodules02-calculator	est-suite.py 
    Test Start
    Test Over
    .Test Start
    Test Over
    F
    ======================================================================
    FAIL: test_add2 (__main__.testcount)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "C:Users	iansAppDataLocalProgramsPythonPython36example-JLLmodules02-calculator	est-suite.py", line 58, in test_add2
        self.assertEqual(j.add(),5,msg= '错了2')
    AssertionError: 6 != 5 : 错了2
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.064s
    
    FAILED (failures=1)
    >>> 

     1.3.2      含多个用例

    测试集包含多个用例suite.addTests()

    #0517006:suite:many
    
    from calculator import count
    import unittest
    
    class testcount(unittest.TestCase):
        def setUp(self):
            print('Test Start')
    
        def test_add1(self):
            j = count(2,3)
            self.assertEqual(j.add(),5,msg= '错了1')
    
        def test_add2(self):
            j = count(3,3)
            self.assertEqual(j.add(),5,msg= '错了2')
            
        def test_add3(self):
            j = count(3,8)
            self.assertEqual(j.add(),11,msg= '错了3')
            
        def tearDown(self):
            print('Test Over')
    
    if __name__ == '__main__':
        #构造测试集
        suite = unittest.TestSuite()
         #测试集包含多个用例suite.addTests()
        tests = [testcount('test_add1'), testcount('test_add2')]
        suite.addTests(tests)
    
        # 或直接写入:suite.addTests([testcount('test_add1'), testcount('test_add2')])
       
        #执行测试
        runner = unittest.TextTestRunner()
        runner.run(suite)

    执行结果:

    >>> 
     RESTART: C:Users	iansAppDataLocalProgramsPythonPython36example-JLLmodules02-calculator	est-suite.py 
    Test Start
    Test Over
    .Test Start
    Test Over
    F
    ======================================================================
    FAIL: test_add2 (__main__.testcount)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "C:Users	iansAppDataLocalProgramsPythonPython36example-JLLmodules02-calculator	est-suite.py", line 16, in test_add2
        self.assertEqual(j.add(),5,msg= '错了2')
    AssertionError: 6 != 5 : 错了2
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.066s
    
    FAILED (failures=1)
    >>> 
     
     
     
  • 相关阅读:
    审核系统
    ehcache 缓存
    tomcat 内存设置
    html5 开发 跨平台 桌面应用
    service thread 结合使用
    html5桌面应用
    鼠标 事件
    服务器 判断 客户端 文件下载
    使用github管理Eclipse分布式项目开发
    uub代码
  • 原文地址:https://www.cnblogs.com/jxba/p/9053507.html
Copyright © 2011-2022 走看看