Python单元测试框架unittest使用方法讲解


Posted in Python onApril 13, 2015

概述

1.测试脚手架(test fixture)

测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown().

2.测试案例(test case)

最小的测试单元.

3.测试套件(test suite)

测试案例的集合.

4.测试运行器(test runner)

测试执行的组件.

命令行接口

可以用命令行运行测试模块,测试类以及测试方法.

python -m unittest test_module1 test_module2

python -m unittest test_module.TestClass

python -m unittest test_module.TestClass.test_method

可加-v打印详细信息
python -m unittest -v test_module

测试案例自动搜索

unittest支持简单的test discovery. 命令行传入discovery后,框架会自动在当前目录搜索要测试的案例并执行.搜索目录必须是包或者模块.基本使用如下:

cd project_directory 

python -m unittest discover

子选项如下:
-v, ?verbose
输出信息的详细级别

-s, ?start-directory directory
开始搜索目录 (默认为当前目录)

-p, ?pattern pattern
匹配的文件名 (默认为test*.py)

-t, ?top-level-directory directory
搜索的顶层目录 (默认为start directory)

创建测试代码

1.方式一

创建子类继承unittest.TestCase,然后重写以下方法

class WidgetTestCase(unittest.TestCase):

    def setUp(self):

        pass

    def runTest(self):

        pass

    def tearDown(self):

        pass

运行

2.方式二

编写以test开头的方法

class WidgetTestCase(unittest.TestCase):

    def setUp(self):

        pass
    def test_xx1(self)

    def test_xx2(self)

    ...

    def test_xxN(self)
    def tearDown(self):

        pass

构建测试套件

方式一

widgetTestSuite = unittest.TestSuite()

widgetTestSuite.addTest(WidgetTestCase('test_default_size'))

widgetTestSuite.addTest(WidgetTestCase('test_resize'))

方式二(推荐)

def suite():

    suite = unittest.TestSuite()

    suite.addTest(WidgetTestCase('test_default_size'))

    suite.addTest(WidgetTestCase('test_resize'))

    return suite

方式三(推荐)
def suite():

    tests = ['test_default_size', 'test_resize']

    return unittest.TestSuite(map(WidgetTestCase, tests))

方式四

多个测试套件构建成更大的测试套件

suite1 = module1.TheTestSuite()

suite2 = module2.TheTestSuite()

alltests = unittest.TestSuite([suite1, suite2])

方式五

unittest的TestLoader提供生成默认的测试套件

suite = unittest.TestLoader().loadTestsFromTestCase(WidgetTestCase)

忽略测试案例( Python2.7支持)

可以分无条件忽略和有条件忽略,通过装饰器实现

class MyTestCase(unittest.TestCase):
    @unittest.skip("demonstrating skipping")

    def test_nothing(self):

        self.fail("shouldn't happen")
    @unittest.skipIf(mylib.__version__ < (1, 3),

                     "not supported in this library version")

    def test_format(self):

        # Tests that work for only a certain version of the library.

        pass
    @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")

    def test_windows_support(self):

        # windows specific testing code

        pass

测试类也可以忽略
@unittest.skip("showing class skipping")

class MySkippedTestCase(unittest.TestCase):

    def test_not_run(self):

        pass
Python 相关文章推荐
线程和进程的区别及Python代码实例
Feb 04 Python
Python中实现switch功能实例解析
Jan 11 Python
详解python中init方法和随机数方法
Mar 13 Python
django框架防止XSS注入的方法分析
Jun 21 Python
在pandas中遍历DataFrame行的实现方法
Oct 23 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
python yield和Generator函数用法详解
Feb 10 Python
基于keras中的回调函数用法说明
Jun 17 Python
一文轻松掌握python语言命名规范规则
Jun 18 Python
通过实例解析Python文件操作实现步骤
Sep 21 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 Python
浅谈Python xlwings 读取Excel文件的正确姿势
Feb 26 Python
Python配置文件解析模块ConfigParser使用实例
Apr 13 #Python
深入Python函数编程的一些特性
Apr 13 #Python
Python命令行参数解析模块getopt使用实例
Apr 13 #Python
Python中文件操作简明介绍
Apr 13 #Python
Python单元测试框架unittest简明使用实例
Apr 13 #Python
进一步了解Python中的XML 工具
Apr 13 #Python
Python中的模块和包概念介绍
Apr 13 #Python
You might like
php 清除网页病毒的方法
2008/12/05 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
js几个验证函数代码
2010/03/25 Javascript
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
jQuery使用$.each遍历json数组的简单实现方法
2016/04/18 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
JavaScript实现简单的拖动效果
2016/07/02 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
Python实现简单多线程任务队列
2016/02/27 Python
Python 实现微信防撤回功能
2019/04/29 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
面向对象编程的优势是什么
2015/12/17 面试题
UNIX文件类型
2013/08/29 面试题
小学生期末评语大全
2014/04/21 职场文书
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS