python单元测试工具

1. unittest 简介

这是标准库也是最常见的Python单元测试框架,它基于Java的JUnit框架,最初由Steve Purcell编写(以前称为PyUnit)

unittest基本上提供了Java中的Junit框架的功能。它提供了一个名为TestCase的基类,它有一组广泛的方法来验证函数调用和语句的输出。

该模块是为编写单元测试而创建的,但是只要测试使用用户接口,验收测试也可以用它来编写。例如,一些测试框架提供帮助,在unittest之上驱动工具,如Selenium。

2. unittest 使用

使用unittest为一个模块编写一个简单的单元测试,这是通过继承TestCase类并且使用test前缀来编写方法来完成的。测试驱动开发原则部分的最后一个例子

import unittest

class MyTests(unittest.TestCase):
    def test_print(self):
        print("test1")

    def test_print2(self):
        print("test2")

    def atest_print2(self):
        print("test3")

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

运行结果:

============================= test session starts ==============================
platform darwin -- Python 3.7.4, pytest-4.6.3, py-1.8.0, pluggy-0.12.0
rootdir: collected 2 items
test2.py .test1
.test2                                                   [100%]
=========================== 2 passed in 0.02 seconds ===========================

Process finished with exit code 0

unittest.main()函数是一个通用程序,它允许将整个模块作为一个测试套件执行

unittest.main()函数扫描当前模块的上下文,并查找TestCase类的子类。它实例化这些子类,然后运行所有以test作为前缀开头的方法。

3. unittest 的 TestSuite类

unittest提供了一个TestSuite类,可以聚合测试并将它们作为测试活动运行,只要它们都是TestCase或TestSuite的实例。

在以往的Python中,有这样一个约定,测试模块提供一个test_suite函数,该函数返回一个TestSuite实例,当模块被命令提示符调用或被测试运行器使用时,在__main__部分会调用它

# -*- coding: utf-8 -*-
import unittest

class MyTests(unittest.TestCase):
    def test_print(self):
        print("test1")

    def test_print2(self):
        print("test2")

    def atest_print2(self):
        print("test3")

class OtherTests(unittest.TestCase):
    def test_print(self):
        print("test4")

    def test_print2(self):
        print("test5")

    def atest_print2(self):
        print("test6")

def test_suite():
    # 构建测试套件
    suite = unittest.TestSuite()
    suite.addTests(unittest.makeSuite(MyTests))
    suite.addTests(unittest.makeSuite(OtherTests))
    return suite

if __name__ == "__main__":
    unittest.main(defaultTest='test_suite')

4. 其他三方测试工具

  • nose
  • py.test
发布了141 篇原创文章 · 获赞 107 · 访问量 30万+

猜你喜欢

转载自blog.csdn.net/ternence_hsu/article/details/103541283