Python unittest模块心得(一)
关于unittest模块的一些心得,主要是看官网的例子,加上一点自己的理解,官网地址:https://docs.python.org/3.6/library/unittest.html
基础概念介绍:
unittest模块是Python的单元测试框架,支持自动化测试,所有用例共享setUp和tearDown代码,可以将测试用例聚合成测试集合,测试用例与报告框架独立。
为了实现这些功能,unittest支持下面几个面向对象式的概念:
- test fixture:代表了执行一个或多个测试用例所需要的准备工作,以及所有相关的清除工作。比如创建临时的或者代理的数据库,文件夹或者启动服务器。
- test case: 代表了一个单独的单元测试用例,会检查输入参数对应的反馈。unittest提供了一个基类TestCase用来创建测试用例。
- test suite: 代表了测试用例及测试套件的集合,用来将测试用例聚合到一起去执行。
- test runner: 用来执行测试用例并将测试结果反馈给用户。可以用图形接口,文字接口或者返回一些指定值来指示测试结果。
- 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模块心得(一)的更多相关文章
- Python unittest模块心得(二)
基础概念介绍请参看: http://www.cnblogs.com/frost-hit/p/8295818.html 组织测试用例 unittest.TestSuite(tests=()): 除了使用 ...
- python unittest模块
import unittest import random class Operation(object): def __init__(self, num1=0, num2=0): if not (0 ...
- python unittest自动测试框架
编写函数或者类时进行测试,确保代码正常工作 python unittest 模块提供了代码测试工具.按照定义测试包括两部分:管理测试依赖库的代码(称为‘固件’)和测试本身. 单元测试用于核实函数的某 ...
- Python3+Selenium2完整的自动化测试实现之旅(六):Python单元测试模块Unittest运用
一.Unittest单元测试框架简介 Unitest是Python下的一个单元测试模块,是Python标准库模块之一,安装完Python后就可以直接import该模块,能在单元测试下编写具体的测试用例 ...
- Python DDT(data driven tests)模块心得
关于ddt模块的一些心得,主要是看官网的例子,加上一点自己的理解,官网地址:http://ddt.readthedocs.io/en/latest/example.html ddt(data driv ...
- python的单元测试unittest模块
首先需要导入unittest模块 import unittest import HTMLTestRunner # TestCase 也就是测试用例## TestSuite 多个测试用例集合在一起,就 ...
- selenium + python自动化测试unittest框架学习(四)python导入模块及包知识点
在写脚本的时候,发现导入某些模块,经常报错提示导入模块失败,这里来恶补下python导入模块的知识点. 1.模块导入时文件查找顺序 在脚本中,import xxx模块时的具体步骤: (1)新建一个mo ...
- python unittest基本介绍
python内部自带了一个单元测试的模块,pyUnit也就是我们说的:unittest 1.介绍下unittest的基本使用方法: 1)import unittest 2)定义一个继承自unittes ...
- 从python run 和python unittest两种eclipse运行方式深入理解if __name__ == "__main__"
在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样? 先贴一下代码段: # - ...
随机推荐
- Domain 表达式的用法
什么是Domain [('create_uid','=',user.id)] Domain是个多条件的列表,每个条件是一个三元表达式:[(字段名,操作符,值), (字段名,操作符,值)] Domain ...
- TypeScript学习小结
TypeScript是什么 TypeScript是由微软公司开发的一个开源JavaScript的超集,主要提供了类型系统和对ES6的支持,可以编译成纯JavaScript,主要就是对JavaScrip ...
- Ionic3,装饰器(@Input、@ViewChild)以及使用 Events 实现数据回调中的相关用法(五)
标题栏的渐变效果 使用到的相关装饰器.Class以及相关方法:@Input.@ViewChild.Content.ionViewDidLoad ① @Input 装饰器:用来获取页面元素自定义属性值. ...
- RT-Thread Nano移植
RT_Thread移植:在MDK下以组件形式提供 https://pan.baidu.com/s/1miac86O#list/path=%2Fsharelink4264488348-377157516 ...
- 构建私有Docker Registry
1.设置insecure-registry: 可能会出现无法push镜像到私有仓库的问题. 这是因为我们启动的registry服务不是安全可信赖的. 1) sudo vim /etc/default/ ...
- unittest简介
unittest是python里面的单元测试框架 1 unittest 简介 1).先导入 unittest2).用 help 函数查看源码解析3).查看描述:Python unit testing ...
- 【Lua】LWT后台用JSON与 ExtJS传递数据
要完成目录树的构建,需要前台ExtJS构筑页面,后台处理逻辑,中间由JSON传递数据. 首先搭建后台环境: require "httpd" require "lfs&qu ...
- 进入保护模式(二)——《x86汇编语言:从实模式到保护模式》读书笔记14
首先来段题外话:之前我发现我贴出的代码都没有行号,给讲解带来不便.所以从现在起,我要给代码加上行号.我写博客用的这个插入代码的插件,确实不支持自动插入行号.我真的没有找到什么好方法,无奈之下,只能按照 ...
- 【HTML基础】表格和表单
本次博客的主要内容如下: meta和link 表格 表单 meta和link meta meta的属性有两种:name和http-equiv. name属性主要用于描述网页内容,对应与网页内容. 1. ...
- jvm options
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#Options Categories of J ...