Django单元测试简单示例
对一个功能的验证往往是需要很多多测试用例,可以把测试用例集合在一起执行,这就产生了测试套件TestSuite 的概念,它是用来组装单个测试用例,规定用例的执行的顺序,而且TestSuite也可以嵌套TestSuite。
可以通过addTest() 加载TestCase 到TestSuite 中,再返回一个TestSuite 实例。
示例:将simple_test 中的用例装载到测试套件中
suite=unittest.TestSuite() # 创建测试套件
suite.addTest(simple_test('test_add')) # 添加测试用例
suite.addTest(simple_test('test_divide')) # 向套件中添加用例
unittest.makeSuite根据文件批量创建测试套件,如果一个文件中有非常多测试用例,可以根据用例名称的相似性创建测试套件。
unittest.makeSuite(testCaseClass, prefix)
testCaseClass <Class类型>为测试用例类的名称
prefix <str类型>用例相似的部分名称<str>
示例:
suite = unittest.makeSuite(simple_test, 'test') # 创建并批量加载测试用例
unittest.TestLoader()根据目录批量创建测试套件,可以指定用例存放目录,根据文件名称匹配测试用例。
注意:用例存放的子目录中必须具备__init__.py 文件,否则无法加载用例。
unittest.TestLoader().discover(start_dir, pattern='test*.py', top_level_dir=None)
start_dir 要测试的模块名或测试用例目录。
pattern='test*.py' 表示用例文件名的匹配原则。星号“*”表示任意多个字符。
top_level_dir=None 测试模块的顶层目录。None <=> 测试用例不是放在多级目录中
示例:
suites=unittest.defaultTestLoader.discover('./testDirectory, pattern='*_test.py')
或
suites=unittest.TestLoader().discover('./testDirectory, pattern='*_test.py')
创建测试套件后,执行测试用例使用unittest.TextTestRunner().run(TestSuite)
示例:执行加载simple_test用例的测试套件
runner = unittest.TextTestRunner()
runner.run(suite) # 执行测试用例
unittest.TestSuite() 的常用方法
TestSuite.addTest 添加单个测试用例
suite.addTest(simple_test('test_add'))
TestSuite.addTests通过序列添加测试用例
suite.addTests([simple_test('test_add'),simple_test('test_divide')])
TestSuite.countTestCases() 统计测试套件中的用例个数
suite.countTestCases()
测试套件灵活运用
- 为测试用例文件添加suite 方法,方便加载测试套件
示例:
import unittest # 导入unittest 包
from unittest_doc.com.Calculator.Calculator import calculator # 引入需要测试的包
# 所有用例需继承TestCase类或者其子类
class simple_test(unittest.TestCase):
def setUp(self):
print('@@@初始化test_simple@@@')
self.a = calculator(1, 2)
def test_add(self):
print('---测试用例test_simple add---')
self.assertEqual(self.a.minus(), -1, '两值不相等')
self.assertEqual(self.a.add(), 3, '两值不相等')
self.assertNotEqual(self.a.divide(), 1, '两值不相等')
def test_divide(self):
print('---测试用例test_simple divide---')
self.assertEqual(self.a.divide(), 0.5)
def tearDown(self):
print('@@@结束test_simple@@@')
def suite(): # 创建测试添加测试套件函数
suite = unittest.TestSuite() # 建立测试套件
suite.addTests([simple_test('test_add'), simple_test('test_divide')])
return suite
if __name__ == '__main__':
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite())
如上示例:创建测试套件函数,使用时直接调用其函数,不用额外添加用例。
- 嵌套测试套件,多个测试套件组合在一起
suite1 = unittest.TheTestSuite()
suite2 = unittest.TheTestSuite()
alltests = unittest.TestSuite((suite1, suite2))
Django单元测试简单示例的更多相关文章
- django ORM 简单示例简绍
简单 models 操作 class Host(models.Model): nid = models.AutoField(primary_key=True) #Nid为主键 hostname = m ...
- web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例
Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...
- Ubuntu18.04安装和配置Django,并实现简单示例
一.前言(系统,django介绍,window.mac.linux简单区别) Django是python开发过程最重要的web框架.因为在看的Django教学视频是在mac下安装的,我自己用的是Lin ...
- django单元测试
django 单元测试小结 django 测试 从前很少写单元测试了,特别是web应用.最近不知不觉喜欢起来这个事情了,发现单元测试对于软件的模块,正交性有很大促进作用,因为函数,模块写的不合 ...
- lucene创建索引简单示例
利用空闲时间写了一个使用lucene创建索引简单示例, 1.使用maven创建的项目 2.需要用到的jar如下: 废话不多说,直接贴代码如下: 1.创建索引的类(HelloLucene): packa ...
- [Django] 单元测试小记
从前很少写单元测试了,特别是web应用.最近不知不觉喜欢起来这个事情了,发现单元测试对于软件的模块,正交性有很大促进作用,因为函数,模块写的不合理,单元测试写起来就麻烦的多呀.公司的项目一直都是用Dj ...
- AMQP消息队列之RabbitMQ简单示例
前面一篇文章讲了如何快速搭建一个ActiveMQ的示例程序,ActiveMQ是JMS的实现,那这篇文章就再看下另外一种消息队列AMQP的代表实现RabbitMQ的简单示例吧.在具体讲解之前,先通过一个 ...
- Django 单元测试
mock 测试 mock 是辅助单元测试的模块,用于测试不方便调用的别人的接口.举个简单的例子,比如说,我们测试django 写的微信登录接口,正常流程下,我们需要前端拉起授权窗口,获取jscode或 ...
- django入门 -- 简单流程
django入门 -- 简单流程 简介 通过简单示例,使用django完成基本流程的开发,学习django的主要的知识点,在后续课程中会逐个知识点进行深入讲解 以“图书-英雄”管理为示例 主要知识点介 ...
随机推荐
- Nginx(十)-- 进程模型及工作原理
1.nginx进程模型 Nginx是一个master和worker的模型.master主要用来管理worker进程,master就比作老板,worker就是打工仔,master指挥worker来做事情 ...
- 第六篇:Eclipse上运行第一个Hadoop实例 - WordCount(单词统计程序)
需求 计算出文件中每个单词的频数.要求输出结果按照单词的字母顺序进行排序.每个单词和其频数占一行,单词和频数之间有间隔. 比如,输入两个文件,其一内容如下: hello world hello had ...
- JS 运行、复制、另存为 代码。
//运行代码 function runEx(cod1) { cod = document.getElementById(cod1) var code = cod.value; if (code != ...
- 分布式实时日志系统(二) 环境搭建之 flume 集群搭建/flume ng资料
最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式 ...
- Delete触发器
- angularjs笔记《二》
小颖最近不知怎么了,老是犯困,也许是清明节出去玩,到现在还没缓过来吧,玩回来真的怕坐车了,报了个两日游得团,光坐车了,把人坐的难受得,去了也就是爬山,回来感觉都快瘫了,小颖去的时候还把我家仔仔抱着一起 ...
- 织梦导航条dropdown.js的改进(2013-7-10)
可以设置一个一直都显示的二级菜单,修复了没有二级菜单时鼠标移上去仍然显示上一个二级菜单的问题.支持一级菜单鼠标离开事件 html代码 <!DOCTYPE html PUBLIC "-/ ...
- sort与asort与ksort区别
sort只依据值从小到大排序,键值不参与排序 asort依据值排序,键值参与排序 ksort依据键值排序,值参与排序 sort只依据值从小到大排序,键值不参与排序. 例 <?php $arr=a ...
- 【CF662A】Gambling Nim 线性基
[CF662A]Gambling Nim 题意:n长卡牌,第i张卡牌正面的数字是$a_i$,反面的数字是$b_i$,每张卡牌等概率为正面朝上或反面朝上.现在Alice和Bob要用每张卡牌朝上的数字玩N ...
- ToStringBuilder类
文章来源:http://blog.csdn.net/zhaowen25/article/details/39521899 apache的commons-lang3的工具包里有一个ToStringBui ...