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 02 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
python版大富翁源代码分享
Nov 19 Python
在scrapy中使用phantomJS实现异步爬取的方法
Dec 17 Python
Python实现计算对象的内存大小示例
Jul 10 Python
python中hasattr()、getattr()、setattr()函数的使用
Aug 16 Python
Python爬取知乎图片代码实现解析
Sep 17 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
Feb 12 Python
Django模板标签中url使用详解(url跳转到指定页面)
Mar 19 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
Jul 01 Python
深入理解python多线程编程
Apr 18 Python
Python基础之条件语句详解
Jun 16 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实现当前页面点击下载文件的实例代码
2016/11/16 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
2020/08/30 PHP
JQuery里面的几种选择器 查找满足条件的元素$(&quot;#控件ID&quot;)
2011/08/23 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
2016/02/23 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
浅谈高大上的微信小程序中渲染html内容—技术分享
2018/10/25 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
彻底搞懂Python字符编码
2018/01/23 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
python匹配两个短语之间的字符实例
2018/12/25 Python
django-filter和普通查询的例子
2019/08/12 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
python中安装django模块的方法
2020/03/12 Python
python小白学习包管理器pip安装
2020/06/09 Python
python使用smtplib模块发送邮件
2020/12/17 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
如何实现一个自定义类的序列化
2012/05/22 面试题
大专生自我评价
2014/01/28 职场文书
高一军训的心得体会
2014/09/01 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
公司管理建议书
2015/09/14 职场文书
保姆聘用合同
2015/09/21 职场文书
pd.DataFrame中的几种索引变换的实现
2022/06/16 Python