zoukankan      html  css  js  c++  java
  • python 几种常用测试框架

    测试的常用规则

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

    二、常见的测试框架

    2.1 Unittest

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

    通过继承unittest.TestCase来创建一个测试用例。

    具体请参考 文档 。

    举个例:

    import unittest
    
    def fun(x):
        return x + 1
    
    class MyTest(unittest.TestCase):
        def test(self):
            self.assertEqual(fun(3), 4)
    

    执行后成功。

    但是,如果将期望的结果改成5,则执行的结果如下图所示:

    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()
    

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

    但是,如果我们把结果改一下,square(2)的结果改成5,测试代码如下:

    def square(x):
        """Squares x.
    
        >>> square(2)
        5
        >>> square(-2)
        4
        >>> square(5)
        25
        """
    
        return x * x
    
    if __name__ == '__main__':
        import doctest
        doctest.testmod()
    

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

    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 ,执行命令比如:

    执行的结果如下图所示:

    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 mock unittest.mock是用来测试python的库。在python3.3版本以后,这个是一个标准库。 对老版本来说,使用pip install mock 进行安装。

    mock的精髓在于,你可以使用模拟的对象来替代你的系统的一部分,然后验证后续的执行是否正确。
    mock的详细文档:http://www.voidspace.org.uk/python/mock/
  • 相关阅读:
    2019-2020-2 20174313张博《网络对抗技术》Exp5 信息搜集与漏洞扫描
    2019-2020-2 20174313张博《网络对抗技术》Exp4 恶意代码分析
    2019-2020-2 20174313张博《网络对抗技术》Exp3-免杀原理与实践
    2019-2020-2 20174313张博《网络对抗技术》Exp2-后门原理与实践
    2019-2020-2 20174313张博 《网络对抗技术》Exp1 PC平台逆向破解
    Exp9 Web安全基础
    实验八 Web基础
    实验七-网络欺诈防范
    MSF基础应用
    信息搜集与漏洞扫描
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/9110695.html
Copyright © 2011-2022 走看看