unittest的属性:

该文以思维导图的形式描述unittest的重要属性。

其中前四个是unittest最核心的三个属性。

testcase:测试用例;

testsuite:测试套件,多个测试用例组成一个测试套件;

test runner:执行测试用例,该类中的run()方法会执行testsuite/testcase中的run()方法。测试的结果会保存在testresult中。

还有一个很重要的就是fixture,看着是挺陌生的,其实就是一个测试用例执行之前环境的准备和执行之后环境的销毁。

三、实例:

首先准备一些待测方法,functions.py:

def fun_div(x):
return x/2

def fun_add(x):
return x+2

def fun_minus(x):
return x-2

def fun_multi(x):
return x*2
接下来写一些测试用例来测这些方法,test.py

import unittest
from functions import fun_add,fun_minus,fun_multi,fun_div

class TestFun(unittest.TestCase):
times = 0

@classmethod
def setUpClass(cls):
print('setUpclass')

def setUp(self):
# 每个测试用例执行之前都会执行该方法
TestFun.times += 1
print('setUp', TestFun.times)

def tearDown(self):
# 每个测试用例执行之后都会执行该方法
TestFun.times += 1
print('tearDown', TestFun.times)

def test1(self):
# 测试用例1:fun_div
# 使用unittest提供的断言验证functions中的函数的正误
# 如果不相等就会失败
self.assertEqual(2, fun_div(4))
self.failUnlessEqual(2, 2)

# 如果表达式为False,测试失败
self.assertTrue(1 < 2)
self.failUnless(2 == 2)
# 如果两个值相等,就会测试失败
self.assertNotEqual(2, 1)
def test2(self):
# 测试用例2:fun_add
self.assertNotEqual(2, 1)
def test2(self):
# 测试用例2:fun_add
self.assertTrue(fun_add(6) == 8)
def test3(self):
# 测试用例3:fun_minus
self.assertNotEqual(6, fun_minus(6))
self.assertEqual(4, fun_minus(6))
def test4(self):
# 测试用例4:fun_multi
self.assertIsInstance(4, int)
self.assertEqual(8, fun_multi(4))
@unittest.skipIf(True, 'no')
def test5(self):
print('跳过!')
@classmethod
def tearDownClass(cls):
print('tearDownClass')
if __name__ == '__main__':
# unittest.main()
suit = unittest.TestSuite()
suit.addTest(TestFun('test1'))
suit.addTest(TestFun('test2'))
suit.addTest(TestFun('test3'))
suit.addTest(TestFun('test4'))
runner = unittest.TextTestRunner()
runner.run(suit)
执行结果:

解释:

1、setUp和tearDown是每个用例的环境准备和环境销毁函数,也就是在每个用例执行之前要执行一次setUp函数,每个用例执行之后会执行一次tearDown函数;

2、setUpClass和tearDownClass是所有用例的环境准备和环境销毁函数,也就是说,在这么多用例执行之前只会执行一次setUpClass函数,执行之后会执行一次tearDownClass函数,举例来说,比如此次测试用例需要使用数据库,那么在setUpClass函数中就会进行数据库连接,在tearDownClass函数中进行数据库断开;

3、一般执行测试用例,都会使用testsuit的addTest()方法将要执行的用例放在一个测试套件中,创建一个testrunner对象,然后调用该对象的run()方法;

4、skip是一个装饰器,可以屏蔽一些测试用例,此功能可以用于调试测试用例。(大型项目中,执行所有的用例需要用很久的时间,但是我们刚好需要调试某个用例,就可以把其他的用例屏蔽掉);

5、一个测试用例类都会继承于TestCase类;

6、测试用例报告可以使用TextTestRunner输出(txt报告),也可以用HTMLTestRunner输出(html报告)。
————————————————
版权声明:本文为CSDN博主「peiyao456」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/peiyao456/article/details/81542377

python中的单元测试模块unittest的更多相关文章

  1. Python中的单元测试模块Unittest快速入门

    前言 为什么需要单元测试? 如果没有单元测试,我们会遇到这种情况:已有的健康运行的代码在经过改动之后,我们无法得知改动之后是否引入了Bug.如果有单元测试的话,只要单元测试全部通过,我们就可以保证没有 ...

  2. python中的单元测试pyUnit

    python中的单元测试pyUnit   在Python中进行单元测试时需要用到PyUnit模块,Python 2.1及其以后的版本都将PyUnit作为一个标准模块,但如果你使用的是较老版本的Pyth ...

  3. Python中的random模块,来自于Capricorn的实验室

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  4. Python中的logging模块

    http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...

  5. Python中的random模块

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  6. 浅析Python中的struct模块

    最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结. 了解c语言 ...

  7. python中的StringIO模块

    python中的StringIO模块 标签:python StringIO 此模块主要用于在内存缓冲区中读写数据.模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中.此类中的大部分 ...

  8. python中的select模块

    介绍: Python中的select模块专注于I/O多路复用,提供了select  poll  epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqu ...

  9. Python中的re模块--正则表达式

    Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...

随机推荐

  1. 原生JS写表单验证提交功能

    先上效果图: 表单的基础内容就是昵称判断.手机号判断.邮箱判断.身份证号码判断,这里是用到正则验证检验格式. 页面的表单写法就是一个form的提交.输入框用input来实现,输入内容用value来获取 ...

  2. Metasploit学习笔记——网络服务渗透攻击

    1.内存攻防技术 1.1缓冲区溢出漏洞机理 1.2栈溢出利用机理 1.3缓冲区溢出利用的限制条件 2.网络服务渗透攻击面 3. Windows服务渗透攻击实战案例——MS08-067安全漏洞 示例代码 ...

  3. 014.Delphi插件之QPlugins,MDI窗口

    不知道为什么,这个DEMO编译出来报错,运行不了,在QDAC群里问了一下也没人响应. 效果如下 主程序代码如下 unit Frm_Main; interface uses Winapi.Windows ...

  4. 7.6 CLI 管理Varnish

    ./varnishd -f /usr/common/varnish/etc/varnish/ -a 测试: 代理tomcat服务器地址:http://172.20.10.5:1111/ telnet ...

  5. iPhone Safari下iframe不显示滚动条无法滚动的解决方法。iframe的坑!

    <div class="dataTables_wrapper" style="-webkit-overflow-scrolling:touch;overflow:a ...

  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-move

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  7. IP地址 网络地址 子网掩码

    提纲 (1)IP地址 (2)网络地址 (3)子网掩码     IP地址=网络地址+主机地址,图1中的IP地址是192.168.100.1,这个地址中包含了很多含义.如下所示:网络地址(相当于街道地址) ...

  8. POJ1703 && POJ2942 &&POJ 1182 并查集 这个做法挺巧妙

    Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37242   Accepted: ...

  9. flask邮箱注册问题

    app/models.py self.confirmed = True db.session.add(self) db.session.commit() 这里的数据修改完后必须commit提交上去,不 ...

  10. CSS - input 只显示下边框

      CSS 样式 :   border:none;   border-bottom: 1px solid #000