1.unittest简述
unittest是Python语言的单元测试框架。
unittest单元测试框架提供了创建测试用例、测试套件和批量执行测试用例的方案。利用单元测试框架,可以创建一个类,该类继承unittest的TestCase,这样可以把每个TestCase看成是一个最小单元,由测试套件组织起来运行时直接执行即可,同时可以引入测试报告。
2.测试固件
在unittest单元测试框架中,测试固件用于处理初始化的操作,例如,在对百度的搜索进行测试之前,首先需要打开浏览器并且进入到百度首页;测试结束后,需要关闭浏览器。测试固件提供了两种执行方式,一种是每执行一个测试用例,测试固件都会被执行到;另一种是不管执行多少个测试用例,测试固件都只执行一次。
2.1测试固件每次均执行
unittest单元测试框架提供了名为setUp和tearDown的测试固件。上代码:
__author__ = 'Hello'
import unittest
class BaiduTest(unittest.TestCase):
def setUp(self):
print('start')
def tearDown(self):
print('end')
def test_baidu_so(self):
print('测试用例执行')
if __name__ == '__main__':
unittest.main(verbosity=2)
它的执行顺序是先执行setUp方法,在执行具体的测试用例test_baidu_so,最后执行tearDown方法。执行结果:
test_baidu_so (__main__.BaiduTest) ... ok
start
测试用例执行
end
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Process finished with exit code 0
注:verbosity是一个选项,表示测试结果的信息复杂度,有0、1、2 三个值
0 (静默模式): 你只能获得总的测试用例数和总的结果 比如 总共10个 失败2 成功8
1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”
2 (详细模式):测试结果会显示每个测试用例的所有相关的信息
并且 你在命令行里加入不同的参数可以起到一样的效果
加入 --quiet 参数 等效于 verbosity=0
加入--verbose参数等效于 verbosity=2
什么都不加就是 verbosity=1
下面以百度首页为例,编写两个测试点。执行方式是setUp执行两次,tearDown也执行两次。代码:
__author__ = 'xiaotufei'
from selenium import webdriver
import unittest
class BaiduTest(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Firefox()
self.driver.implicitly_wait(5)
self.drivermaxmize_window()
self.driver.implicitly_wait(5)
self.driver.get("http://www.baidu.com")
self.driver.implicitly_wait(30)
def tearDown(self):
self.driver.quit()
def test_baidu_news(self):
#验证:测试百度首页点击新闻后的跳转
self.driver.find_element_by_link_text('新闻').click()
def test_baidu_map(self):
#验证:测试百度首页点击地图后的跳转
self.driver.find_element_by_link_text('地图').click()
if __name__ == '__main__':
unittest.main(verbosity=2)
运行结果如下:
D:\Python\python.exe "D:\Work\Tools\JetBrains\PyCharm Community Edition 3.4.4\helpers\pycharm\utrunner.py" D:\Work\Tools\python_workspace\Python_unitest\1\baidu_news.py::BaiduTest true
Testing started at 18:30 ...
D:\Work\Tools\JetBrains\PyCharm Community Edition 3.4.4\helpers\pycharm\utrunner.py:2: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
import imp
Process finished with exit code 0
运行以上代码后,浏览器会被打开两次,也会关闭两次,如果是在一个测试类中有N个测试用例,那么也就意味着打开/关闭N次浏览器,很显然,这并不是一个理想的选择。
2.2测试固件只执行一次
setUp和tearDown虽然经常使用,但是在UI自动哈测试中,一个系统的测试用例通常多达数百条,打开和关闭数百次浏览器显然不是很好的选择。在unittest单元测试框架中可以使用另外一个测试固件来解决这一问题,它就是setUpClass和tearDownClass方法。该测试固件方法是类方法,需要在方法上面加装饰器@classmethod。使用该测试固件,不管有多少个测试用例,测试固件只执行一次。
代码如下:
__author__ = 'xiaotufei'
import unittest
class UiTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('start')
@classmethod
def tearDownClass(cls):
print('end')
def test_001(self):