Python单元测试unittest - 单元测试框架
一、unittest简介
unitest单元测试框架最初是有JUnit的启发,它支持测试自动化,共享测试的设置和关闭代码,将测试聚合到集合中,以及测试与报告框架的独立性。
二、unittest相关概念
- TestFixture:表示测试一个或多个测试的时候,需要的一些相关动作,比如,创建临时或代理数据库,目录或启动服务器进程。测试代码的这种工作环境称为夹具。
TestCase(测试用例):就是测试的各个单元,他检查对特定输入集的特定响应,unitest提供了一个基类,TestCase用于创建新的测试用例。
TestSuite(测试套件):多个测试用例集合在一起。测试用例实例根据他们测试的功能组合在一起,unittest为此提供了一个机制:测试套件。
TestRunner:执行测试用例的,测试的结果会保存至TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息。
TestLoader():可用于自动创建测试套件并使用单个测试填充它的过程。
运行各种测试用例的顺序是通过根据字符串的内置顺序对测试函数名称进行排序调用。
三、断言方法表
- 检查并报告故障
- assertEqual(a, b) a == b
- assertNotEqual(a, b) a != b
- assertTrue(x) bool(x) is True
- assertFalse(x) bool(x) is False
- assertIs(a, b) a is b 3.1
- assertIsNot(a, b) a is not b 3.1
- assertIsNone(x) x is None 3.1
- assertIsNotNone(x) x is not None 3.1
- assertIn(a, b) a in b 3.1
- assertNotIn(a, b) a not in b 3.1
- assertIsInstance(a, b) isinstance(a, b) 3.2
- assertNotIsInstance(a, b) not isinstance(a, b) 3.2
- 检查异常、警告、日志消息生成
- assertRaises(exc, fun, *args, **kwds) fun(*args, **kwds)提高EXC
- assertRaisesRegex(exc, r, fun, *args, **kwds) fun(*args, **kwds)提出exc 并且消息匹配正则表达式r 3.1
- assertWarns(warn, fun, *args, **kwds) fun(*args, **kwds)提出警告 3.2
- assertWarnsRegex(warn, r, fun, *args, **kwds) fun(*args, **kwds)提出警告 和消息的正则表达式匹配ř 3.2
- assertLogs(logger, level) 该with块 以最低级别登录记录器 3.4
四、示例
- import unittest
- class TestStringMethods(unittest.TestCase):
- def test_upper(self):
- self.assertEqual('foo'.upper(), 'FOO')
- def test_isupper(self):
- self.assertTrue('FOO'.isupper())
- self.assertFalse('FOO'.islower())
- def test_split(self):
- s = "Hello World"
- self.assertEqual(s.split(), ['Hello', 'World'])
- with self.assertRaises(TypeError):
- s.split(2)
- if __name__ == '__main__':
- unittest.main()
- 首先通过unittest.TestCase子类创建测试用例
通过以test开头的三个方法
assertEqual()检查预期结果
assertTrue()或assertFalse()核实情况
assertRaises()验证是否引发了特定异常
使用这些方法代替assert语句,以便测试运行器可以累积所有测试结果并生成报告
- setUp():在每个测试用例执行之前执行
tearDown():在每个测试用例执行之后执行
五、运行测试用例
- unittest.main()提供了测试脚本的命令行界面
python BaseExample.py -v 传入-v标志来运行具有更多详细信息的测试用例
- python -m unittest test_module1 test_module2
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method
六、生成测试报告
- # coding=utf-8
- import unittest
- import HtmlTestRunner
- class TestSuiteExample(unittest.TestCase):
- def test_equal(self):
- s = "Hello"
- self.assertEqual(s, "Hello")
- def test_upper(self):
- s = "FOO"
- self.assertEqual('FOO', s)
- def test_lower(self):
- s = "foo"
- self.assertTrue(s.islower())
- if __name__ == '__main__':
- # 创建一个测试集合
- f = open('./test_suite_example.html')
- test_suite = unittest.TestSuite()
- loader = unittest.TestLoader()
- # 向测试套件中添加测试用例
- # test_suite.addTest(test=TestSuiteExample("test_equal"))
- # 使用loader添加所有的测试方法
- tests = loader.loadTestsFromTestCase(TestSuiteExample)
- test_suite.addTests(tests=tests)
- # 打开文件,用于生成html
- runner = HtmlTestRunner.HTMLTestRunner(output="D:/python/")
- runner.run(test_suite)
HtmlTestRunner 需要单独安装
- pip install html-testRunner==1.0.3
向套件中添加测试用例使用addTest()和addTests()
- addTest(test)
- Add a TestCase or TestSuite to the suite.
- addTests(tests)
- Add all the tests from an iterable of TestCase and TestSuite instances to this test suite.
- This is equivalent to iterating over tests, calling addTest() for each element.
七、跳过测试和预期的失败
unittest支持跳过单个测试甚至整个测试类,它支持将测试标记为"预期失败",但不应该视为TestResult失败
- import sys
- import unittest
- class MyTestCase(unittest.TestCase):
- @unittest.skip("跳过测试")
- def test_nothing(self):
- self.fail("没有发生")
- @unittest.skipIf(1 > 0, "如果真,则跳过")
- def test_format(self):
- self.assertTrue(1 < 0)
- @unittest.skipUnless(sys.platform.startswith("win"),"requires Windows")
- def test_upper(self):
- s = "hh"
- self.assertEqual('HH',s.upper())
- if __name__ == '__main__':
- unittest.main()
八、TestCase(测试用例)
TestCase类的实例表示unittest中最小的测试单元,此类旨在用作基类,具体的测试有气子类实现,此类实现测试运行期所需的接口以允许其驱动测试
- setUp():调用准备测试夹具的方法,在调用测试方法之前立即调用它。
- tearDown(): 调用测试方法后立即调用此方法并记录结果。即使测试方法引发了异常,也会调用此方法。
- setUpClass():运行测试类中所有测试方法之前调用,必须装饰为@classmethod
- tearDownClass():已经运行测试类中所有的测试方法才会调用,必须装饰@classmethod
- run():运行测试,将结果收集到结果对象中,结果对象不会返回给run()调用者
- skipTest():跳过此测试方法
九、TestSuite(分组测试)
此类表示各个测试用例和测试套件的集合,该类提供了测试运行器所需的接口,以允许他像其他任何测试用例一样运行
- addTest():添加一个TestCase或TestSuite到套件
- addTests():将可迭代的TestCase或TestSuite实例中所有测试添加到测试套件中
- run():运行与此套件关联的测试
十、TestLoader(加载和运行测试)
TestLoader类被用于创建TestSuite从模块或类中。通常,不需要创建此类的实例,unittest模块提供了一个可以共享的实例unittest.defaultTestLoader()
- loadTestsFromTestCase(testCaseClass):从testCaseClase中返回一个包含所有测试用例的suite
- loadTestsFromModule(module):从提供的module中返回一个包含所有测试用例的suite,此方法在模块中所有派生来自TestCase的类,并为每个TestCase子类创建实例
- loadTestsFromName(name, module=None)
- loadTestFromNames(names, module=None)
十一、TestResult
此类用于编译有关哪些测试成功以及哪些测试失败的信息
一个TestResult对象存储一组测试结果,有以下属性:
- errors:包含2元组
TestCase
实例和包含格式化回溯的字符串的列表。每个元组代表一个引发意外异常的测试。 - failures:包含2元组
TestCase
实例和包含格式化回溯的字符串的列表 - skipped:包含2元组
TestCase
实例和字符串的列表,其中包含跳过测试的原因。
十二、其他
要共享的类的实例。如果不需要自定义,unittest.
defaultTestLoader:
TestLoaderTestLoader
则可以使用此实例而不是重复创建新实例。
unittest.
main:一个命令行程序,它从模块加载一组测试并运行它们; 这主要是为了使测试模块可以方便地执行
Python单元测试unittest - 单元测试框架的更多相关文章
- Python+Selenium ----unittest单元测试框架
unittest是一个单元测试框架,是Python编程的单元测试框架.有时候,也做叫做“PyUnit”,是Junit的Python语言版本.这里了解下,Junit是Java语言的单元测试框架,Java ...
- python之unittest单元测试
# unittest单元测试 import unittest from class_demo import Car class TestCar(unittest.TestCase): '''测试Car ...
- python利用unittest测试框架组织测试用例的5种方法
利用unittest测试框架可以编写测试用例,执行方式分两大类:利用main方法和利用testsuite,其中利用测试套件来组织测试用例可以有4种写法. 在此之前,先了解几个概念 TestCase:所 ...
- Python 中 unittest 单元测试框架中需要知识点
现在正在使用 unittest 框架,我们来记录下这个框架的知识点: unittest 框架:我们在写接口用例的时候,会继承 unittest 当中的 TestCase 的类和方法,私有方法除外,来识 ...
- Python单元测试unittest测试框架
本文的主题是自动化测试框架的实现,在实现之前,先了解一下关于unittest模块的相关知识: Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回 ...
- python的unittest单元测试框架断言整理汇总
自动化脚本最重要的是断言,正确设置断言以后才能帮助我们判断测试用例执行结果. 一.先说说unittest常用的断言吧 常用的就以下几个,网上一搜一大堆.python版本2.7以上都可以调用了. 断言语 ...
- python + selenium + unittest 自动化测试框架 -- 入门篇
. 预置条件: 1. python已安装 2. pycharm已安装 3. selenium已安装 4. chrome.driver 驱动已下载 二.工程建立 1. New Project:建立自己的 ...
- python+appium+unittest自动化测试框架环境搭建
一.基础软件准备 1.python 版本最新版本,python的IDE使用pycharm.具体的下载链接: python https://www.python.org/ pycharm:https:/ ...
- 基于python的unittest测试框架集成到jenkins(Mac)
1.jenkins部分 1.1 安装jenkins jenkins下载地址:https://jenkins.io/download/ 安装步骤,疯狂点击下一步 1.2 打开jenkins服务 在浏览器 ...
随机推荐
- Java NIO -- 缓冲区(Buffer)的数据存取
缓冲区(Buffer): 一个用于特定基本数据类型的容器.由 java.nio 包定义的,所有缓冲区都是 Buffer 抽象类的子类.Java NIO 中的 Buffer 主要用于与 NIO 通道进行 ...
- Linux 常用命令——df, du, ln
1. df 列出文件系统的整体磁盘使用量 2. du 评估文件系统的磁盘使用量(常用在推估目录所占容量),也可以计算文件或文件夹大小 3. ln 创建实体连接(hard link) 或 符号连接(Sy ...
- Hadoop、Hbase基本命令及调优方式
HDFS基本命令 接触大数据挺长时间了,项目刚刚上完线,趁着空闲时间整理下大数据hadoop.Hbase等常用命令以及各自的优化方式,当做是一个学习笔记吧. HDFS命令基本格式:Hadoop fs ...
- Luogu 1979 NOIP 2013 华容道(搜索,最短路径)
Luogu 1979 NOIP 2013 华容道(搜索,最短路径) Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面 ...
- (转)JVM——Java虚拟机架构
背景:最近开始忙着找工作了,把需要储备的知识再整理总结一遍!关于JVM的总结,是转自下面的连接.结合<深入理解java虚拟机>,看起来有更清晰的认识. 转载自:http://blog.cs ...
- 智能指针unique_ptr
转自:https://www.cnblogs.com/DswCnblog/p/5628195.html 成员函数 (1) get 获得内部对象的指针, 由于已经重载了()方法, 因此和直接使用对象是一 ...
- hiho一下 第144周(机会渺茫)解题报告及拓展
题目1 : 机会渺茫 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在追求一名学数学的女生小Z.小Z其实是想拒绝他的,但是找不到好的说辞,于是提出了这样的要求: ...
- My thoughts after NOIP 2018(1)
联赛就这样结束了. 感觉真是奇怪啊.以前看重的东西,像是忽然扔下的包袱,一下子轻了. 而我一直在逃避的,不愿直面的东西,果然终于还是要再次面对了啊. 文化课百废待兴,\(noip\)的最终结果依然未知 ...
- python -- 进程线程协程专题
进程专栏 multiprocessing 高级模块 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fork() ...
- Tukey‘s test方法 异常值
如何计算异常值 异常值就是和其他样本数据有显著差异的值.这个词在统计学中经常用到,可以表示数据异常或测量错误.明白算异常值的方法,对于正确理解数据非常有用,而且会引出更精确的结论.以下介绍一个很简单的 ...