关于unittest模块的一些心得,主要是看官网的例子,加上一点自己的理解,官网地址:https://docs.python.org/3.6/library/unittest.html

基础概念介绍:

unittest模块是Python的单元测试框架,支持自动化测试,所有用例共享setUp和tearDown代码,可以将测试用例聚合成测试集合,测试用例与报告框架独立。

为了实现这些功能,unittest支持下面几个面向对象式的概念:

  1. test fixture:代表了执行一个或多个测试用例所需要的准备工作,以及所有相关的清除工作。比如创建临时的或者代理的数据库,文件夹或者启动服务器。
  2. test case: 代表了一个单独的单元测试用例,会检查输入参数对应的反馈。unittest提供了一个基类TestCase用来创建测试用例。
  3. test suite: 代表了测试用例及测试套件的集合,用来将测试用例聚合到一起去执行。
  4. test runner: 用来执行测试用例并将测试结果反馈给用户。可以用图形接口,文字接口或者返回一些指定值来指示测试结果。
  5. test report: 可以使用unittest自带的TextTestRunner(),也可以使用HTMLTestRunner()产生HTML格式的测试报告,现在用BSTestRunner()代替HTMLTestRunner()

这些概念间的关系见下图:

下面给一些例子和说明:

import unittest

###编写的测试类要继承unittest.TestCase,类名称要以test开头,后面讲原因。
class TestStringMethods(unittest.TestCase): ###所有用例共用的setup,在用例执行前先执行,用来搭建环境。
def setUp(self):
print('case setup') ###所有用例共用的tearDown,在用例执行结束后执行,用来清理环境。setUp和tearDown保证了每个test case都是独立的,不依赖与其他case.
def tearDown(self):
print('case teardown\n') def test_upper(self):###测试用例1,需要以test开头,原因后面讲。
print('case test_upper')
self.assertEqual('foo'.upper(), 'FOO')###assertEqual(a,b)如果a==b则用例pass,否则fail. def test_isupper(self):###测试用例2,需要以test开头。
print('case test_isupper')
self.assertTrue('FOO'.isupper())###类似的assert用法
self.assertFalse('Foo'.isupper()) def test_split(self):###测试用例3
print('case test_split')
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2) if __name__ == '__main__':
unittest.main()###具体做了哪些工作后面会详细讲。

下面看一下case的运行结果:

case setup
case test_isupper
case teardown case setup
case test_split
case teardown case setup
case test_upper
case teardown ###三个case全部pass,因为assert里面的结果都正确。这里并没有体现出测试结果,只是将打印信息展示出来。我们可以看到针对每个test_的case都运行了一遍,每次都独立的调用了setUp和tearDown.测试case执行的顺序不是按照代码的顺序,而是按照case名称字母的顺序,这个是unittest.main()函数决定的。

命令行模式:

unittest模块可以通过命令行模式从模块,类,或者类的方法中运行测试用例。我使用的也不多,给出最基本的例子。

python -m unittest test_module1 test_module2
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method

跳过某些测试用例:

class MyTestCase(unittest.TestCase):

    @unittest.skip("demonstrating skipping")
def test_nothing(self):
print("shouldn't happen") @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")
def test_windows_support(self):
# windows specific testing code
print('this is Windows')
pass

类似的@unittest.skip()装饰器包括:

@unittest.skip(reason)
#直接跳过这条测试用例,需要给出跳过的理由 @unittest.skipIf(condition, reason)
#跳过这条用例,如果condition值为True @unittest.skipUnless(condition, reason) @unittest.expectedFailure exception unittest.SkipTest(reason)

@unittest.skip()可以用来装饰类的方法,也可以用来装饰class,将这个class全部跳过.

Python unittest模块心得(一)的更多相关文章

  1. Python unittest模块心得(二)

    基础概念介绍请参看: http://www.cnblogs.com/frost-hit/p/8295818.html 组织测试用例 unittest.TestSuite(tests=()): 除了使用 ...

  2. python unittest模块

    import unittest import random class Operation(object): def __init__(self, num1=0, num2=0): if not (0 ...

  3. python unittest自动测试框架

    编写函数或者类时进行测试,确保代码正常工作 python  unittest 模块提供了代码测试工具.按照定义测试包括两部分:管理测试依赖库的代码(称为‘固件’)和测试本身. 单元测试用于核实函数的某 ...

  4. Python3+Selenium2完整的自动化测试实现之旅(六):Python单元测试模块Unittest运用

    一.Unittest单元测试框架简介 Unitest是Python下的一个单元测试模块,是Python标准库模块之一,安装完Python后就可以直接import该模块,能在单元测试下编写具体的测试用例 ...

  5. Python DDT(data driven tests)模块心得

    关于ddt模块的一些心得,主要是看官网的例子,加上一点自己的理解,官网地址:http://ddt.readthedocs.io/en/latest/example.html ddt(data driv ...

  6. python的单元测试unittest模块

    首先需要导入unittest模块 import unittest import  HTMLTestRunner # TestCase 也就是测试用例## TestSuite 多个测试用例集合在一起,就 ...

  7. selenium + python自动化测试unittest框架学习(四)python导入模块及包知识点

    在写脚本的时候,发现导入某些模块,经常报错提示导入模块失败,这里来恶补下python导入模块的知识点. 1.模块导入时文件查找顺序 在脚本中,import xxx模块时的具体步骤: (1)新建一个mo ...

  8. python unittest基本介绍

    python内部自带了一个单元测试的模块,pyUnit也就是我们说的:unittest 1.介绍下unittest的基本使用方法: 1)import unittest 2)定义一个继承自unittes ...

  9. 从python run 和python unittest两种eclipse运行方式深入理解if __name__ == "__main__"

    在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样? 先贴一下代码段: # - ...

随机推荐

  1. 利用 Nginx 做反向代理解决微信小程序业务域名限制问题

    参考网站:(下述两个参考网站可以完美解决问题) https://www.jianshu.com/p/47eff6eeec25 https://www.cnblogs.com/kenwar/p/8288 ...

  2. Linux I2C驱动--用户态驱动简单示例

    1. Linux内核支持I2C通用设备驱动(用户态驱动:由应用层实现对硬件的控制可以称之为用户态驱动),实现文件位于drivers/i2c/i2c-dev.c,设备文件为/dev/i2c-0 2. I ...

  3. jieba和文本词频统计

    ---恢复内容开始--- 一.结巴中文分词涉及到的算法包括: (1) 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG): (2) 采用了动态规划查找最大 ...

  4. $bzoj1025-SCOI2009$游戏 群论 $dp$

    题面描述 \(windy​\)学会了一种游戏.对于\(1​\)到\(N​\)这\(N​\)个数字,都有唯一且不同的1到N的数字与之对应.最开始\(windy​\)把数字按顺序\(1,2,3,\cdot ...

  5. SpringCloud---消息总线---Spring Cloud Bus

    1.概述 1.1 在微服务架构的系统中,我们通常会使用   轻量级的消息代理  来  构建一个共同的消息主题   让系统中所有微服务实例都连接上来: 由于  该主题中产生的消息  会被所有实例监听和消 ...

  6. 下载Kitti 数据集(dataset) data_road.zip

    官网下载http://www.cvlibs.net/download.php?file=data_road.zip,耗时近3小时,虽然只有几百兆. 但是,我坚持下来了. 保存到了百度网盘,以供国内用户 ...

  7. 012-MD5Utils工具类模板

    package ${enclosing_package}; import java.math.BigInteger; import java.security.MessageDigest; impor ...

  8. java并发编程(3)避免活跃性危险

    活跃性危险 一.死锁 发生:每个人都不愿意放弃自己的锁,确想要别人的锁,这就会导致死锁  1.锁顺序死锁:如果每个线程以固定的顺序获取锁,那么至少在程序中不会出现锁顺序导致的死锁: 因为顺序固定如:所 ...

  9. Golang教程:指针

    什么是指针 指针是存储一个变量的内存地址的变量. 在上图中,变量 b 的值是 156,存储在地址为 0x1040a124 的内存中.变量 a 存储了变量 b 的地址.现在可以说 a 指向b. 指针的声 ...

  10. bzoj 5315: [Jsoi2018]防御网络

    Description Solution 考虑每一条边的贡献 对于树边,如果两边各存在一个点,那么有贡献,总贡献就是 \((2^{size}-1)*(2^{n-size}-1)\) 分别对应两边的 \ ...