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的主要的知识点,在后续课程中会逐个知识点进行深入讲解 以“图书-英雄”管理为示例 主要知识点介 ...
随机推荐
- Kafka producer介绍
Kafka 0.9版本正式使用Java版本的producer替换了原Scala版本的producer.本文着重讨论新版本producer的设计原理以及基本的使用方法. 新版本Producer 首先明确 ...
- session会话保持
#coding=utf-8 from flask import Flask from flask import request from flask import redirect from flas ...
- thinkjs中修改默认主键
报错信息: { Error: ER_BAD_FIELD_ERROR: Unknown column 'a_role.id' in 'field list' 还原场景: a_role这张表没有自增的id ...
- FastCGI在nginx中的参数
FastCGI参数 fastcgi主要用于http调用外部解释器的接口,采用c/s结构,可以将http服务器和脚本解析器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程.当HTTP服务器每 ...
- Androidの矢量图形之VectorDrawable研究
5.0以上支持VectorDrawable了,可以创建vector的xml资源文件.vector其实就使用来绘制矢量图形的. 看一个例子: <?xml version="1.0&quo ...
- ubuntu 用aptitude代替apt-get处理依赖性问题
aptitude 与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具.与 apt-get 不同的是,aptitude 在处理依赖问题上更佳一些.举例来说,aptitud ...
- myisam与innodb索引比较
MyISAM支持全文索引(FULLTEXT).压缩索引,InnoDB不支持 InnoDB支持事务,MyISAM不支持 MyISAM顺序储存数据,索引叶子节点保存对应数据行地址,辅助索引很主键索引相差无 ...
- oAuth 认证和授权原理
什么是OAuth授权? 一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密 ...
- 如何防御mimikatz致敬Mimikatz攻防杂谈学习笔记
零.绪论:mimikatz简介 mimikatz是一款出色的内网渗透工具,可以抓取windows主机的明文密码.NTLMhash值或者kerberos对应的缓存凭据.mimikatz的使用在获取权限后 ...
- Unity3D Android动态反射加载程序集
这种办法在iOS下是不让用的,只能在Android下用.用起来也很方便了. 1.先创建一个c#工程,引用到的UnityEngine.dll在Unity的安装目录里找吧 2.将编译的dll放入Unity ...