unittest框架概要

unittest是Python语言自带的单元测试框架,原名PyUnit.

 

认识unittest

在unittest框架中有4个重要概念:test fixture、test case、test suite和test runner。详情:

test fixture:测试用例环境的搭建和销毁,通过覆盖TestCase的setUp()和tearDown()方法实现,非unittest属性。

unittest.TestCase:TestCase类,所有测试用例类继承的父类。

unittest.TestSuite():unittest框架的TestSuite()类是用来创建测试套件的。

unittest.TextTestRunner():unittest框架的TextTextRunner()类,通过该类的run()方法来运行suite所组装的测试用例,入参为suite测试套件。

unittest.defaultTestLoader(): unittest框架的defaultTestLoader()类,通过该类的discover()方法找到指定目录下的所以测试模块,匹配到的文件均可以被加载。

unittest.main():可以方便的将一个单元测试模块变为可直接运行的测试脚本,main() 方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行他们。

unittest.skip():装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例就可以用装饰器屏蔽。

  @unittest.skip(reason): skip(reason)装饰器:无条件跳过装饰的测试,并说明跳过测试的原因。

  @unittest.skipIf(reason): skipIf(condition,reason)装饰器:条件为真时,跳过装饰的测试,并说明跳过测试的原因。

  @unittest.skipUnless(reason): skipUnless(condition,reason)装饰器:条件为假时,跳过装饰的测试,并说明跳过测试的原因。

      @unittest.expectedFailure(): expectedFailure()测试标记为失败。

 1 #widget.py 将要被测试的类
 2 class Widget:
 3     def __init__(self, size = (40, 40)):
 4         self._size = size
 5     def getSize(self):
 6         return self._size
 7     def resize(self, width, height):
 8         if width  0  or height < 0:
 9             raise ValueError, "illegal size"
10         self._size = (width, height)
 1 from widget import Widget
 2 import unittest
 3 # 执行测试的类
 4 class WidgetTestCase(unittest.TestCase):
 5     def setUp(self):
 6         self.widget = Widget()
 7     def tearDown(self):
 8         self.widget = None
 9     def testSize(self):
10         self.assertEqual(self.widget.getSize(), (40, 40))
11     def testResize(self):
12         self.widget.resize(100, 100)        
13         self.assertEqual(self.widget.getSize(), (100, 100))        
14 
15 if __name__ == "__main__":
16     # 构造测试集
17     suite = unittest.TestSuite()
18     suite.addTest(WidgetTestCase("testSize"))
19     suite.addTest(WidgetTestCase("testResize"))
20     
21     # 执行测试
22     runner = unittest.TextTestRunner()
23     runner.run(suite)

 

unittest的web应用

python没有专门的自动化测试框架,故应用unittest单元测试框架进行web自动化。

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class PythonOrgSearch(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Firefox()

    def test_search_in_python_org(self):
        driver = self.driver
        driver.get("http://www.python.org")
        self.assertIn("Python", driver.title)
        elem = driver.find_element_by_name("q")
        elem.send_keys("python")
        elem.send_keys(Keys.RETURN)    #类似键盘enter操作
        assert "No results found." not in driver.page_source


    def tearDown(self):
        self.driver.close()

if __name__ == "__main__":
    unittest.main()

 

总结unittest框架好处:

1.提供用例组织和执行,简单说就是规定了测试用例的执行顺序

2.提供丰富的比较方法,将实际结果和预期结果进行比较断言

3.提供丰富的日志,用例执行结果都有一个很好的记录

posted on 2017-01-14 19:58  Ryana  阅读(481)  评论(0编辑  收藏  举报