一、摘要

前边的文章我们看到执行测试用例的是通过调用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. 使用expect实现自动交互,shell命令行自动输入,脚本自动化,变量引用,expect spawn执行带引号命令,expect 变量为空,不生效,不能匹配通配符*,函数,数组

    背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...

  2. 李宗盛 linux罚写

    1.system v init运行级别及作用 init运行级别 作用 0 关机 1 单用户模式 2 多用户的文本界面 3 多用户的文本界面 4 多用户的文本界面 5 多用户的图形界面 6 重启 eme ...

  3. ubuntu desktop 登录root账户

    有一些操作,登录root账户比较方便,但是ubuntu桌面版默认不允许这样,需要更改root账户的默认密码才可以登录,解决方法是按以下顺序输入: sudo passwd <你现在的用户的密码&g ...

  4. TCP Socket + UDP Socket

    小例子:http://soft.yesky.com/238/2035738.shtml 服务器程序: #include <iostream> #include <WinSock2.h ...

  5. 六种Socket I/O模型幽默讲解

    老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系.他们的信会被邮递员投递到他们的信箱里.这和Socket模型非常类似.下面就以此为例讲解Socket I/O模型. 零:阻塞模型 老陈非常 ...

  6. [转帖]降低 80% 的读写响应延迟!我们测评了 etcd 3.4 新特性(内含读写发展史)

      降低 80% 的读写响应延迟!我们测评了 etcd 3.4 新特性(内含读写发展史) https://www.cnblogs.com/alisystemsoftware/p/11555426.ht ...

  7. .NET细节知识总结,不断更新

    1.catch (Exception)和catch (Exception e) Exception 类包含许多子类 程序执行的时候要将每一个类都搜索一遍 以找到符合的异常类 这样是蛮消耗资源的 影响效 ...

  8. windows版mysql添加远程访问

    use mysql; ##然后查看下当前连接允许情况 select host, user, authentication_string, plugin from user; ##依次执行 CREATE ...

  9. ubuntu 上不了网,解决方案之一

    每个人的情况可能不同,我的情况是由于强制关机网卡坏了,网络没有自动分配ip,ens33网卡没有ip,这时得手动启动命令 sudo dhclient 来自动获取ip地址.这里要感谢这篇博客,让我意识到自 ...

  10. ajax与jsonp中的几个封装函数

    首先是ajax里的get 在页面上添加几个标签用作测试 <body> <input type="text" id="user"> < ...