Python几种经常使用的测试框架

1、测试的经常使用规则

  1. 一个测试单元必须关注一个很小的功能函数,证实它是正确的;
  2. 每一个测试单元必须是彻底独立的,必须能单独运行。这样意味着每个测试方法必须从新加载数据,执行完毕后作一些清理工做。一般经过setUp()和setDown()方法处理;
  3. 编写执行快速的测试代码。在某些状况下,测试须要加载复杂的数据结构,并且每次执行的时候都要从新加载,这个时候测试执行会很慢。所以,在这种状况下,能够将这种测试放置一个后台的任务中。
  4. 采用测试工具而且学着怎么使用它。
  5. 在编写代码前执行完整的测试,并且在编写代码后再从新执行一次。这样能保证你后来编写的代码不会破坏任何事情;
  6. 在提交代码前执行完整的测试;
  7. 若是在开发期间被打断了工做,写一个打断的单元测试,关于你下一步将要开发的。当你回来工做时,你能知道上一步开发到的指针;
  8. 单元测试函数使用长的并且具备描述性的名字。在正式执行代码中,可能使用square()或sqr()取名,可是在测试函数中,你必须取像test_square_of_number_2()、test_square_negativer_number()这些名字,这些名字描述更加清楚;
  9. 测试代码必须具备可读性;
  10. 单元测试对新进的开发人员来讲是工做指南。

2、常见的测试框架

2.1 Unittest

   unittest是Python内置的标准类库。它的API跟Java的JUnit、.net的NUnit,C++的CppUnit很类似。html

   经过继承unittest.TestCase来建立一个测试用例。python

  具体请参考文档数据结构

  举个例:框架

import unittest

def fun(x):
    return x + 1

class MyTest(unittest.TestCase):
    def test(self):
        self.assertEqual(fun(3), 4)

执行后成功。函数

可是,若是将指望的结果改为5,则执行的结果以下图所示:工具

 

image

 

2.2 Doctest

     doctest 模块会搜索那些看起来像交互式会话的 Python 代码片断,而后尝试执行并验证结果.即便从没接触过 doctest,咱们也能够从这个名字中窥到一丝端倪。“它看起来就像代码里的文档字符串(docstring)同样” 若是你这么想的话,就已经对了一半了。单元测试

     举个例子:测试

def square(x):
    """Squares x.

    >>> square(2)
    4
    >>> square(-2)
    4
    >>> square(5)
    25
    """

    return x * x

if __name__ == '__main__':
    import doctest
    doctest.testmod()

     当执行该代码后,会执行文档内>>> 后面的测试代码,并与下一行的结果进行比对。执行的结果以下:spa

image

     可是,若是咱们把结果改一下,square(2)的结果改为5,测试代码以下:.net

def square(x):
    """Squares x.

    >>> square(2)
    5
    >>> square(-2)
    4
    >>> square(5)
    25
    """

    return x * x

if __name__ == '__main__':
    import doctest
    doctest.testmod()

     执行的测试结果以下所示:

image

 

     

2.3 py.test

   py.test是unittest的替代工具。

   尽管它是一个功能丰富、灵活的测试框架,可是它的语法很简单。建立一个单元测试就像编写一个模块同样。相比unittest,实现相同的测试功能,py.test作的事情更少。

   py.test详细文档

   首先,安装py.test

 pip install pytest

  第二步,编写测试代码

def func(x):
    return x + 1

def test_answer():
    assert func(3) == 5

第三步,执行测试代码。

  •   找到pytest安装路径。
  • 用其所在的解析器(python.exe)执行test.py ,执行命令好比:

image

 

  执行的结果以下图所示:

image

 

2.4 Nose

      Nose是对unittest的扩展,使得python的测试更加简单。nose自动发现测试代码并执行,nose提供了大量的插件,好比测试输出的xUnitcompatible,覆盖报表等等。

     nose的详细文档:https://nose.readthedocs.org/en/latest/

     注意:nose自己是支持python3的,可是不少它的插件不支持。

          

2.5 tox

      最大的特点,是自动最测试环境的管理以及使用多个解析器配置进行测试。

     tox的详细文档:http://testrun.org/tox/latest/

 

 

2.6  Unittest2

     是unitest的升级版。对API进行了改善以及更好的诊断语法。

     unittest2的详细文档:https://pypi.python.org/pypi/unittest2

     首先,安装

     pip install unittest2

为了之后能在unittest与unittest2之间进行切换,最好的代码编写方式以下:

import unittest2 as unittest

class MyTest(unittest.TestCase):
    ...
 

2.7 mockunittest.mock是用来测试python的库。在python3.3版本之后,这个是一个标准库。 对老版原本说,使用pip install mock 进行安装。

   mock的精髓在于,你可使用模拟的对象来替代你的系统的一部分,而后验证后续的执行是否正确。
   mock的详细文档:http://www.voidspace.org.uk/python/mock/    
 
  下一篇咱们重点讲讲nose的使用方法。
相关文章
相关标签/搜索