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参数和作用域的使用
Nov 01 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
Dec 24 Python
python实现简单socket通信的方法
Apr 19 Python
Python中绑定与未绑定的类方法用法分析
Apr 29 Python
将字典转换为DataFrame并进行频次统计的方法
Apr 08 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
Apr 30 Python
python求最大值最小值方法总结
Jun 25 Python
pytorch获取vgg16-feature层输出的例子
Aug 20 Python
python使用SQLAlchemy操作MySQL
Jan 02 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
Jan 28 Python
python munch库的使用解析
May 25 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 fckeditor 调用的函数
2009/06/21 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
jQuery中wrapAll()方法用法实例
2015/01/16 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
javascript实现计时器的简单方法
2016/02/21 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
分享ES6的7个实用技巧
2018/01/18 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
Vue中 axios delete请求参数操作
2020/08/25 Javascript
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
Python中运行并行任务技巧
2015/02/26 Python
Python正则捕获操作示例
2017/08/19 Python
python异步存储数据详解
2019/03/19 Python
Python中如何引入第三方模块
2020/05/27 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
个人简历中的自我评价范例
2013/10/29 职场文书
档案接收函范文
2014/01/10 职场文书
《金钱的魔力》教学反思
2014/02/24 职场文书
亮剑精神演讲稿
2014/05/23 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js