一、摘要

前边的文章我们看到执行测试用例的是通过调用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(三)的更多相关文章

  1. 单元测试框架之unittest(七)

    一.摘要 前篇文章已经详细介绍了unittest框架的特性,足以满足我们日常的测试工作,但那并不是unittest的全部,本片博文将介绍一些应该知道但未必能经常用到的内容 然而,想全部掌握unitte ...

  2. 单元测试框架之unittest(一)

    一.单元测试的含义 unittest单元测试框架的设计灵感来源于Junit(Java语言的单元测试框架),它与其他语言的单元测试框架风格相类似,支持自动化测试.为测试共享setUp和shutDown. ...

  3. Python单元测试框架:unittest(一)

    Python单元测试框架unittest使用方法讲解 主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测 ...

  4. unittest单元测试框架之unittest 框架的总结(七)

    1. Unittest 是 python 自带的单元测试框架,可以用其作为自动化框架来组织测试用例(测 试用例的执行顺序)的执行. 2. Unittest 框架的流程: 写好 TestCase 通过 ...

  5. 单元测试框架之unittest(二)

    一.摘要 本章笔者将详细介绍组织测试代码的相关内容,所用的测试例子会是冒泡排序,笔者在从业这么久之后回想很多面试都要问冒泡排序,虽然不知道为什么要问这个,但还是希望大家掌握,它与自动化测试关系不大属于 ...

  6. unittest单元测试框架之unittest 框架的总结2(八)

    unittest 下的属性 1.Unittest.TestCase:所有测试用例类继承的基本类 2.Unittest.main():将一个单元测试模块变为可直接运行的测试脚本 If __name__ ...

  7. 单元测试框架之unittest(六)

    一.摘要 本片博文将介绍unittest框架的一些轻便有效的特性,在我们的测试中经常可以用到 如果有一些测试方法不想执行,如果有些测试方法在某些条件下不执行 该当如何? 如果有些方法未在unittes ...

  8. 单元测试框架之unittest(五)

    一.摘要 单元测试里很重要的一个部分就是断言,unittest为我们提供了很多断言方法,断言方法分为三类,一种是用来断言被测试的方法的,另一种是测试是否抛正确异常的,第三种是用来断言日志是否包含应有信 ...

  9. 3. 单元测试框架(unittest)1——TestCase

    1. import unittest 引入unittest模块:   2. class SearchTest (unittest.TestCase): 定义一个继承于TestCase类的子类:   3 ...

随机推荐

  1. Net上传文件

    Net上传文件 最近工作内容涉及到一点前端的内容,把学习到的内容记录下来,在今后的开发过程中,不要犯错.本篇只针对一些刚入职的小白及前端开发人员,大牛请绕道!~ 刚开始我们先不讲上传文件的防范问题,先 ...

  2. JAVA第09次实验(IO流)

    JAVA第09次实验(IO流) 0.字节流与二进制文件 我的代码 import java.io.DataInputStream; import java.io.DataOutputStream; im ...

  3. ASP.NET请求过程-Handler

    什么事Handler asp.net程序所有的请求都是handler处理的.以前的webform我们访问的地址是xxxxx.aspx地址,其实他也会到一个handler(我们写的业务代码都在handl ...

  4. python之RabbitMQ队列

    一.介绍 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(MQ)是一 ...

  5. shell习题第25题:判断是否开启web服务

    [题目要求] 写一个脚本判断我的linux服务器是否开启web服务?监听80端口 [核心要点] netstat -lntp | grep '80' [脚本] #!/bin/bash n=`netsta ...

  6. popcorn-js视频Video框架简单用法

    <div> <video class="video" id="ourvideobig" preload="auto" co ...

  7. IDEA整合Jenkins界面化管理项目构建

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/WALK_MAN_wubiao/articl ...

  8. ActivityMQ消息中间件【待完成】

    1,MQ的引入 使用场景,将耗时的通知业务交给消息中间件[业务逻辑进行解耦] 使用消息中间件的逻辑交互 2,MQ的应用场景 首先消息中间件是一个异步处理 有两个关键点:①耗时:②业务的耦合度 案例1: ...

  9. 修改win7 iis上传文件大小限制200KB

    win7 iis 修改上传限制,需要修改2个地方: 1,“双击“Internet 信息服务(IIS)管理器”中的“ASP”– 打开“配置 ASP 应用程序的属性”–展开“限制属性”:修改“最大请求实体 ...

  10. 使用Java Executor框架实现多线程

    本文将涵盖两个主题: 通过实现Callable接口创建线程 在Java中使用Executor框架 实现Callable接口 为了创建一段可以在线程中运行的代码,我们创建了一个类,然后实现了Callab ...