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'))
05-11 22:34