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'))
    

 


posted @ 2017-10-17 14:57  panda901  阅读(476)  评论(0编辑  收藏  举报