zoukankan      html  css  js  c++  java
  • unittest之一框架、suite

    1、unittest是Python的标准库里的模块,所以在创建测试方法时,需直接导入unittest即可

    2、unittest框架的六大模块:

        测试用例TestCase

        测试套件TestSuit:测试用例的集合,管理所有测试用例

        测试执行:TestRun:

        测试报告TestReport:测试结果的汇总报告

        钩子方法:setUp()初始化方法和tearDown()收尾方法

        断言:验证运行结果和期望值是否相等,相等就PASS

    3、初期示例代码

    #coding=utf-8
    import unittest
    class Dog():
        def __init__(self,name):
            self.name=name
        def getName(self):
            return self.name
    class TestDog(unittest.TestCase):#测试类,要继承unittest(属于Python的标准库)模块的TestCase类
        def setUp(self):  #钩子方法,初始化
            self.d=Dog('wang') #实例化类
            print u'初始化'
        def test_getName001(self):#测试用例的方法名必须以test_开头
            print u'我是测试用例001'
            print self.d.getName()
            assert self.d.getName() in 'wang'#assert是python语言里的断言
            '''验证getName方法的正确性'''
            self.assertEqual(self.d.getName(),'wang')#判断运行结果和期望值是否一致。assertEqual(a,b)是unittest的断言,验证a和b的值是否一致,
        def test_getName002(self):
            print u'我是测试用例002'
        def tearDown(self): #钩子方法,收尾。钩子方法是每个用例执行时都会执行
            print u'收尾'
    if __name__=='__main__':#if成立的话,表示当前这个模块是正在运行的主程序
        unittest.main(verbosity=2)#1、调用unittest.main()启动自动测试,
                                  # 2、verbosity的值是2表示打印的结果是有详细的信息

    打印结果:

    Ran 2 tests in 0.004s
    
    OK
    初始化
    我是测试用例001
    wang
    收尾
    初始化
    我是测试用例002
    收尾

     4、钩子方法没必要每次执行,怎样实现只执行一次,setUp()和tearDown()是用类方法@classmethod

    #!/usr/bin/env.python
    #-*-coding:utf-8-*-
    import unittest
    from selenium import webdriver
    
    class Baidu(object):
        
        def login(self):
            pass
        
    class BaiduTest(unittest.TestCase):
        
        @classmethod
        def setUpClass(cls):
            cls.driver=webdriver.Firefox()
            cls.driver.maximize_window()
            cls.driver.implicitly_wait(30)
            cls.driver.get('https://www.baidu.com/')
            
        def test_01(self):
            '''验证不输入账户和密码的提示信息是否正确'''
            pass
    
        def test_02(self):
            '''验证输入用户名,不输入密码的提示信息是否正确'''
            pass
    
        def test_03(self):
            '''验证输入错误用户名的提示信息是否正确'''
            self.assertEqual(123,12)
        
        @classmethod
        def tearDownClass(cls):
            cls.driver.quit()        
    
    if __name__=='__main__':
        unittest.main(verbosity=2)

    运行的时候,浏览器只打开和关闭了一次,运行结果如下:

    test_01 (__main__.BaiduTest)
    验证不输入账户和密码的提示信息是否正确 ... ok
    test_02 (__main__.BaiduTest)
    验证输入用户名,不输入密码的提示信息是否正确 ... ok
    test_03 (__main__.BaiduTest)
    验证输入错误用户名的提示信息是否正确 ... FAIL
    
    ======================================================================
    FAIL: test_03 (__main__.BaiduTest)
    验证输入错误用户名的提示信息是否正确
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "D:/panda/Python/python_me/week7-5/unit1/test01.py", line 25, in test_03
        self.assertEqual(123,12)
    AssertionError: 123 != 12
    
    ----------------------------------------------------------------------
    Ran 3 tests in 11.007s
    
    FAILED (failures=1)
    
    Process finished with exit code 1

    5、测试套件,将测试用例add到测试套件中,执行的时候执行测试套件

    #!/usr/bin/env.python
    #-*-coding:utf-8-*-
    import unittest
    
    class Food():
        def add(self,a,b):
            return a+b
    
    class FoodTest(unittest.TestCase):
        def setUp(self):
            self.f=Food()
    
        def test_01(self):
            '''测试a,b为整型'''
            sum=self.f.add(2,3)
            self.assertEqual(sum,5)
    
        def test_02(self):
            '''测试a浮点数,b为整型'''
            sum = self.f.add(2.36, 2)
            self.assertEqual(sum,4.36)
    
        def tearDown(self):
            pass
    
    if __name__=='__main__':
        suite=unittest.testSuite()
        suite.addTests(FoodTest('test_01','test_02'))
        unittest.TextTestRunner(verbosity=0).run(suite)

    5.1、将suite写到类的方法中,简化执行用例时的代码

    #!/usr/bin/env.python
    #-*-coding:utf-8-*-
    import unittest
    from selenium import webdriver
    
    class BaiduTest(unittest.TestCase):
        
        @classmethod
        def setUpClass(cls):
            cls.driver=webdriver.Firefox()
            cls.driver.maximize_window()
            cls.driver.implicitly_wait(30)
            cls.driver.get('https://www.baidu.com/')
            
        def test_01(self):
            '''验证不输入账户和密码的提示信息是否正确'''
            pass
    
        def test_02(self):
            '''验证输入用户名,不输入密码的提示信息是否正确'''
            pass
    
        def test_03(self):
            '''验证输入错误用户名的提示信息是否正确'''
            self.assertEqual(123,12)
        
        @classmethod
        def tearDownClass(cls):
            cls.driver.quit()
        
        @staticmethod
        def suite(testNum):
            suite=unittest.TestSuite()
            suite.addTest(BaiduTest(testNum))
            return suite
    
    if __name__=='__main__':
        unittest.TextTestRunner(verbosity=2).run(BaiduTest.suite('test_01'))
        
    
    
  • 相关阅读:
    构建之法阅读笔记04
    构建之法阅读笔记03
    关于博客园的一些建议
    书的价钱
    找水王续
    《用户故事与敏捷开发》阅读笔记04
    每周学习进度——第六周
    每周学习进度——第五周
    《用户故事与敏捷开发》阅读笔记03
    软件需求与分析课堂讨论一
  • 原文地址:https://www.cnblogs.com/sunny0/p/7681663.html
Copyright © 2011-2022 走看看