zoukankan      html  css  js  c++  java
  • 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.提供丰富的日志,用例执行结果都有一个很好的记录

  • 相关阅读:
    POJ
    HDU
    Python之列表
    列表、元组、字典总结
    Python之列表、原组、字典总结
    [P1082][NOIP2012] 同余方程 (扩展欧几里得/乘法逆元)
    [P3957][NOIP2017]跳房子 (DP+二分/队列?)
    [Codeforces896C] Willem, Chtholly and Seniorious (ODT-珂朵莉树)
    [P1005][NOIP2007] 矩阵取数游戏 (DP+高精)
    [POJ1006]生理周期 (中国剩余定理)
  • 原文地址:https://www.cnblogs.com/Ryana/p/6206013.html
Copyright © 2011-2022 走看看