单元测试框架之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 ...
随机推荐
- 最新 字节跳动java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.字节跳动等10家互联网公司的校招Offer,因为某些自身原因最终选择了字节跳动.6.7月主要是做系统复习.项目复盘.Leet ...
- Python进入后台界面(admin)设定
前言 用过Django框架的童鞋肯定都知道,在创建完Django项目后,每个app下,都会有一个urls.py文件,里边会有如下几行: ※特别要注意下面标红颜色的部分[] 一般情况下不需要修改什么东西 ...
- HTML让字体闪动和滚动显示
存粹的HTML让字体闪动显示: <html> <head> <title>TEST</title> <style type="text/ ...
- airflow删除dag不在页面显示
当我们需要把dag删除的时候,遇到了删除了相应的dag文件,但页面还是显示 这个时候需要重启airflow 的webserver ps -ef|egrep rm -rf /home/airflow ...
- XDomainRequest IE8&IE9 cors 跨域通讯的处理方法
版权声明:避免百度一下通片同一篇文章,未经博主允许不得转载.本博客作为笔记使用,正确性请自行验证. https://blog.csdn.net/u014071104/article/detail ...
- Word 查找替换高级玩法系列之 -- 把论文中的缩写词快速变成目录下边的注释表
1. 前言 问题:Word写论文如何把文中的缩写快速转换成注释表? 原来样子: 想要的样子: 2. 步骤 使用查找替换高级用法,替换缩写顺序 选中所有文字 打开查找替换对话框,输入以下表达式: 替换后 ...
- Vue 组件系统
vue.js既然是框架,那就不能只是简单的完成数据模板引擎的任务,它还提供了页面布局的功能.本文详细介绍使用vue.js进行页面布局的强大工具,vue.js组件系统. 每一个新技术的诞生,都是为了解决 ...
- spring cloud微服务实践一
最近在学习spring框架.其中spring cloud在微服务方面很火,所以在学习过程中,也做一些记录. 注:这一个系列的开发环境版本为 java1.8, spring boot2.x, sprin ...
- 关于typecho发布文章后的错位
今天发布了一篇文章,发布后发现,what?主页错位了,安装控制变量法知道,肯定是这篇文章有什么不可告人的秘密. 所以,顺便使用一下二分法查找一下为啥,最后找到是因为使用了---------->( ...
- java——内存中的数组
数组是一种引用类型,数组引用变量只是一个引用,数组元素和数组变量在内存中时分开存放的,下面我们看一下基本类型的数组和引用类型的数组在内存中的地址分布情况 基本类型数组: 我们先来看一段代码: publ ...