单元测试框架之unittest(三)
一、摘要
前边的文章我们看到执行测试用例的是通过调用unittest.mian()函数,它会将模块的测试用例收集起来并执行,然而当我们的测试用例增多了以后,这样的执行非常不灵活而且没有效率,我们更愿意看到自由组合的一组用例,只执行这组用例的方式,unittest.TestSuite能够满足我们这个需求,笔者将一random类作为被测试类来详细展示unittest.TestSuite
二、代码示例
- 以前的执行方式
# encoding = utf-8
import random
import unittest class TestRandomFunction(unittest.TestCase):
def setUp(self):
self.str = "abcdef!@#$%" def tearDown(self):
pass def test_randomchoice(self):
var = random.choice(self.str)
self.assertTrue(var in self.str)
print(var) def test_randomsample(self):
with self.assertRaises(ValueError):
random.sample(self.str, 100)
for var in random.sample(self.str, 6):
self.assertTrue(var in self.str)
print(var) class TestRandomShuffleFunction(unittest.TestCase): def setUp(self):
self.list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13] def tearDown(self):
pass def test_randomshuffle(self):
random.shuffle(self.list)
print(self.list)
self.list.sort()
self.assertEqual(self.list, [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13]) if __name__ == '__main__':
unittest.main()
- 方式一 使用unittest.TestLoader,它可以通过传给他的参数获取测试用例的测试方法,然后再组合成TestSuite,最后在将TestSuite传递给TestRunner 完成我们所期望的执行组合
# encoding = utf-8
import random
import unittest class TestRandomFunction(unittest.TestCase):
def setUp(self):
self.str = "abcdef!@#$%" def tearDown(self):
pass def test_randomchoice(self):
var = random.choice(self.str)
self.assertTrue(var in self.str)
print(var) def test_randomsample(self):
with self.assertRaises(ValueError):
random.sample(self.str, 100)
for var in random.sample(self.str, 6):
self.assertTrue(var in self.str)
print(var) class TestRandomShuffleFunction(unittest.TestCase): def setUp(self):
self.list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13] def tearDown(self):
pass def test_randomshuffle(self):
random.shuffle(self.list)
print(self.list)
self.list.sort()
self.assertEqual(self.list, [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13]) if __name__ == '__main__':
# unittest.main()
testcase1 = unittest.TestLoader().loadTestsFromTestCase(TestRandomFunction)
testcase2 = unittest.TestLoader().loadTestsFromTestCase(TestRandomShuffleFunction)
suite = unittest.TestSuite([testcase1, testcase2])
unittest.TextTestRunner(verbosity=2).run(suite)
- 方式二 另创建一个.py文件,定义suite方法,使用unittest.TestSuite().addTest(测试类(测试方法))
# encoding = utf-8
import unittest
from unittest3.TestSuiteDemo2 import * def suite():
suite = unittest.TestSuite()
suite.addTest(TestRandomFunction("test_randomchoice"))
suite.addTest(TestRandomShuffleFunction("test_randomshuffle"))
return suite if __name__ == '__main__':
runner = unittest.TextTestRunner()
runner.run(suite())
- 方式三 另创建一个.py文件,使用unittest.TestLoader().discover(“路径”,“匹配文件名”)
# encoding = utf-8
import unittest if __name__ == '__main__':
suite = unittest.TestLoader().discover('.', pattern='TestSuiteDemo1.py')
unittest.TextTestRunner(verbosity=2).run(suite)
三、random实例
import random
import string #随机获取0到10之间随机整数N,0 <= N <= 10, 语法randint(a, b),a <= N <= b
random.randint(0,10)
#等同于
random.randrange(0,11) #随机获取0到10之间的偶数M, 语法:randrange(start,stop,[step])
random.randrange(0,11,2) #随机获取浮点数
random.random() #随机后去0到10之间的浮点数O,语法:uniform(a, b)[a <= N <= b for a <= b and b <= N <= a for b < a]
random.uniform(0,10) #获取字符串随机字符
random.choice('string') #获取特定数量的随机字符,返回list
random.sample('string',3) #多个字符中选取特定数量的字符组成新字符串
list1 = ['a','b','c','d','e','f','g','h','i','j', 1, 2, 3]
list2 = [str(i) for i in list1]
str1 = ''.join(random.sample(list2, 5)) #获取随机字符串
random.choice(['apple', 'pear', 'peach', 'orange', 'lemon'])
random.choice('abcdefghijklmn') #洗牌
string1 = 'a b c d e f g'
string2 = string1.split()
random.shuffle(string2)
print(string2)
四、类说明
TestLoader类:它用于加载测试用例,然后返回一个测试用例集和
LoadTestsFromTestCase类:根据传给它的测试类获取其中以test开头的测试方法,然后返回一个测试集合
TestSuite类:用于组装测试用例的实例,然后传递给TestRunner进行测试执行
TextTestRunner类:用于执行测试用例,Text表示是以文本形式输出测试结果,它会返回一个TestResult实例对象,用于存储测试用例执行过程中的详细信息,可以使用Python的dir()进行查看
五、参数verbosity说明
verbosity =< 0时,输出结果中不提示执行成功的用例数
verbosity = 1 时,输出结果中仅仅以(.)的形式表示执行成功的用例数,成功几个就是几个点
verbosity >= 2 时,可以输出每个用例执行的详细信息,特别是在用例较多的情况下,此设置会比较有用
单元测试框架之unittest(三)的更多相关文章
- 单元测试框架之unittest(七)
一.摘要 前篇文章已经详细介绍了unittest框架的特性,足以满足我们日常的测试工作,但那并不是unittest的全部,本片博文将介绍一些应该知道但未必能经常用到的内容 然而,想全部掌握unitte ...
- 单元测试框架之unittest(一)
一.单元测试的含义 unittest单元测试框架的设计灵感来源于Junit(Java语言的单元测试框架),它与其他语言的单元测试框架风格相类似,支持自动化测试.为测试共享setUp和shutDown. ...
- Python单元测试框架:unittest(一)
Python单元测试框架unittest使用方法讲解 主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测 ...
- unittest单元测试框架之unittest 框架的总结(七)
1. Unittest 是 python 自带的单元测试框架,可以用其作为自动化框架来组织测试用例(测 试用例的执行顺序)的执行. 2. Unittest 框架的流程: 写好 TestCase 通过 ...
- 单元测试框架之unittest(二)
一.摘要 本章笔者将详细介绍组织测试代码的相关内容,所用的测试例子会是冒泡排序,笔者在从业这么久之后回想很多面试都要问冒泡排序,虽然不知道为什么要问这个,但还是希望大家掌握,它与自动化测试关系不大属于 ...
- unittest单元测试框架之unittest 框架的总结2(八)
unittest 下的属性 1.Unittest.TestCase:所有测试用例类继承的基本类 2.Unittest.main():将一个单元测试模块变为可直接运行的测试脚本 If __name__ ...
- 单元测试框架之unittest(六)
一.摘要 本片博文将介绍unittest框架的一些轻便有效的特性,在我们的测试中经常可以用到 如果有一些测试方法不想执行,如果有些测试方法在某些条件下不执行 该当如何? 如果有些方法未在unittes ...
- 单元测试框架之unittest(五)
一.摘要 单元测试里很重要的一个部分就是断言,unittest为我们提供了很多断言方法,断言方法分为三类,一种是用来断言被测试的方法的,另一种是测试是否抛正确异常的,第三种是用来断言日志是否包含应有信 ...
- 3. 单元测试框架(unittest)1——TestCase
1. import unittest 引入unittest模块: 2. class SearchTest (unittest.TestCase): 定义一个继承于TestCase类的子类: 3 ...
随机推荐
- 设置主机防火墙规则(iptables规则设置及其与firewalld的生死纠葛)
一.什么是firewalld防火墙? firewalld防火墙在Linux主机里其实就是一道隔离工具,它只对进出主机的请求做判断处理.也就是说它只管进出,至于你进来后做了什么,就不在firewalld ...
- 从零开始学游戏开发(一):下载与安装UE4游戏引擎
如何下载和安装虚幻引擎 下载Epic Games Launcher 步骤 百度搜索"what is ue4" 点击第一个搜索结果,进入ue4官网 进入官网首页,点击右上角下载 创建 ...
- [转帖]分享Oracle的四道经典面试题,值得收藏
分享Oracle的四道经典面试题,值得收藏 原创 波波说运维 2019-07-20 00:02:00 https://www.toutiao.com/i6713901660919300621/ 概述 ...
- Excel常见文本清洗函数
1.=LEFT(text,[num_chars]) 函数RIGHT具有相似功能 例如选出K列中,从左数前一个字符:= LEFT(k2,1) 2.=FIND(find_text,within_tex ...
- 使用HSE配置系统时钟并用MCO输出监测系统时钟
使用模板,在User下新建文件夹RCC 新建bsp_rccclkconfig.h和bsp_rccclkconfig.c 工程和魔术棒添加 对照着上节的RCC源文件编写: void HSE_SetSys ...
- go for range 可以方便的对slice 切片或者 map 进行迭代循环
package main import ( "fmt" "math/rand" "time" ) func main ...
- Python3 和 Python2的区别
目录 print Python2.7的print不是一个function Python3里的print是一个function. Unicode Python 2 有 ASCII str() 类型,un ...
- S03_CH13_ZYNQ A9 TCP UART双核AMP例程
S03_CH13_ZYNQ A9 TCP UART双核AMP例程 13.1概述 ZYNQ中存在两个独立的ARM核,在很多应用场景中往往只需使用其中的1个核心即可.然而,对于复杂的设计,例如多任务,并行 ...
- 创客课堂——Scratch的操作界面
大家好,这里是蓝精灵创客公益课堂,我是蓝老师 上期我们了解了scratch软件进行了简单的了解,很多朋友都已经按照上期方法下载安装好了软件. 那么今天蓝老师就和大家一起认识下Scratch的操作界面及 ...
- SAS学习笔记16 SAS创建计数(枚举)变量