前面一章中演示了unittest如何执行一个简单的测试,但有两个问题:

  1. 我们知道测试用例的执行顺序是根据测试用例名称顺序执行的,在不改变用例名称的情况下,我们怎么来控制用例执行的顺序呢?
  2. 一个测试文件,我们直接执行该文件即可,但如果有多个测试文件,怎么进行组织,总不能一个个文件执行吧?

要解决上面两个问题,我们就要用到测试套件TestSuite。

import unittest

class Demo(unittest.TestCase):

    @classmethod
def setUpClass(cls) -> None:
print("setUpClass被执行\n") @classmethod
def tearDownClass(cls) -> None:
print("tearDownClass被执行") def setUp(self) -> None:
print("setup被执行") def tearDown(self) -> None:
print("teardown被执行\n") def test_a(self):
print("test_a被执行") def test_c(self):
print("test_c被执行") def test_b(self):
print("test_b被执行")
a, b = 1, 2
assert a+b == 3 def d(self):
print("d被执行") if __name__ == '__main__':
# 生成测试套容器
suite = unittest.TestSuite()
# addTest 一次只能加一个用例
suite.addTest(Demo("test_c"))
# addTests 一次能添加多个用例,多个用例以列表传入
suite.addTests([Demo("test_b"), Demo("test_a"), Demo("d")]) # 生成执行器
runner = unittest.TextTestRunner(verbosity=2)
# 执行用例
runner.run(suite)

注:verbosity 参数可以控制输出的错误报告的详细程度,默认是 1;如果设为 0,则不输出每一用例的执行结果;如果设为 2,则输出详细的执行结果

执行结果

从用例的执行结果中我们可以看出:

  • 用例的执行顺序是按照用例添加时的顺序来执行的
  • 可以执行不以test开头的用例

用例较少时,以上面的方式生成测试套件就比较繁琐了,unittest还提供了其它生成测试套件的方式,只是这些方式的执行用例的顺序和查找用例的规则与unittest.main()一样。

自动加载用例

探索用例使用的是discover()方法,能识别指定目录下所有以test开头的文件以及文件中的用例,并将用例添加到测试套件中。注:指定目录下如果存在子目录,子目录用例无法被加载。

import unittest

if __name__ == '__main__':
# 识别指定目录下所有以test开头的文件以及文件中的用例,并将用例自动添加到测试套中
test_cases_dir = "./test_cases/"
suite = unittest.defaultTestLoader.discover(test_cases_dir) # 生成执行器
runner = unittest.TextTestRunner(verbosity=2)
# 执行用例
runner.run(suite)

指定加载用例

加载用例有4种方法

loadTestsFromName():类似于addTest,一个一个加载;参数为用例的路径id,至少需要精确到文件;不需要import用例类

loadTestsFromNames():类似于addTests,批量加载,,参数为用例的路径id,至少需要精确到文件;不需要import用例类

loadTestsFromTestCase():将指定测试类下所有以test开头的用例添加到测试套中;参数为用例类;需要import用例类

loadTestsFromModule():将指定模块中所有以test开头的用例添加到测试套中;参数为module对象

目录结下:

用法如下:

import unittest

if __name__ == '__main__':
# 创建测试套件:以用例的路径id为参数(路径id最短精确到文件)导入用例;不需要import用例类对象
# loadTestsFromName:单个导入用例,路径id精确到类对象
suite = unittest.TestLoader().loadTestsFromName("test_cases.test_demo.Demo")
# loadTestsFromNames:批量导入用例,路径id精确到文件
suite = unittest.TestLoader().loadTestsFromNames(["test_cases.test_demo"]) # 创建测试套件:将指定测试类下所有以test开头的用例添加到测试套中
from test_cases.test_demo import Demo
suite = unittest.TestLoader().loadTestsFromTestCase(Demo) # 创建测试套件:将指定模块中所有以test开头的用例添加到测试套中
md = __import__("test_cases.test_demo", fromlist=("a",)) # 获取module对象
suite = unittest.TestLoader().loadTestsFromModule(md) # 生成执行器
runner = unittest.TextTestRunner(verbosity=2)
# 执行用例
runner.run(suite)

unittest_TestSuite测试套件(2)的更多相关文章

  1. selenium测试套件

    1.测试套件测试套件,简单理解就是讲多个用例,装在一个容器里来同时执行完成. 2.测试套件分析 #coding=utf-8 import unittestimport BaiDuSearch,BaiD ...

  2. selenium-webdriver用例批量运行和测试套件使用 ------之我见

    用例批量运行和测试套件使用 ------之我见 学习selenium-webdriver已经一段时间了,最近学习到,测试用例的批量执行,和测试套件的使用,有点自己的理解,不晓得对不对,希望大家指正! ...

  3. 【转】兼容性测试套件(CTS)框架用户手册

    原文网址:http://blog.sina.com.cn/s/blog_416166e90102v6bi.html 兼容性测试套件(CTS)框架用户手册 1.为什么需要兼容性测试(以下称CTS)? 2 ...

  4. JUnit4中的测试套件

    测试套件 JUnit3.8中,用测试套件同时运行多个测试类(http://www.cnblogs.com/mengdd/archive/2013/04/07/3006265.html). 在JUnit ...

  5. 安卓CTS官方文档之兼容性测试套件简介-attach

    官方英文文档原文:https://source.android.com/compatibility/cts-intro.html Compatibility Test Suite  兼容性测试套件 H ...

  6. 安卓CTS官方文档之兼容性测试套件简介

    官方英文文档原文:https://source.android.com/compatibility/cts-intro.html Compatibility Test Suite 兼容性测试套件 Ho ...

  7. Junit4学习(五)Junit4测试套件

    一,背景 1,随着开发规模的深入和扩大,项目或越来越大,相应的我们的测试类也会越来越多:那么就带来一个问题,假如测试类很多,就需要多次运行,造成测试的成本增加:此时就可以使用junit批量运行测试类的 ...

  8. python实例编写(7)---测试报告与测试套件(多个py文件,1个py文件内多个用例)

    一.  一个.py文件批量执行测试用例(一个.py文件下多个用例执行) 如果直接使用:unittest.main(),则按字母顺序执行, 对于前后之间又依赖关系的用例,需要按特定的顺序执行,则使用 s ...

  9. junit测试套件

    在实际项目中,随着项目进度的开展,单元测试类会越来越多,可是直到现在我们还只会一个一个的单独运行测试类,这在实际项目实践中肯定是不可行的.为了解决这个问题,JUnit 提供了一种批量运行测试类的方法, ...

随机推荐

  1. Kafaka相关命令

    开启zookeeper命令(备注:先进入zookeeper的bin目录) ./zkServer.sh start 关闭zookeeper命令(备注:先进入zookeeper的bin目录) ./zkSe ...

  2. freeswitch APR库线程读写锁

    概述 freeswitch的核心源代码是基于apr库开发的,在不同的系统上有很好的移植性. 线程读写锁在多线程服务中有重要的作用.对于读数据比写数据频繁的服务,用读写锁代替互斥锁可以提高效率. 由于A ...

  3. 【Linux】【RedHat】下载 安装 注册

    RedHat 下载 安装 注册 记录 因为找入口太麻烦了,所以写了篇博文记录下来大致入口@萌狼蓝天 注册 点击进入注册地址(https://www.redhat.com/wapps/ugc/regis ...

  4. Nginx状态码和日志

    目录 一.Nginx状态返回码 二.Nginx日志统计 一.Nginx状态返回码 http返回状态码(Status-Code), 以3位数字组成 200 成功 301 永久重定向(redirect) ...

  5. JS 中常用的去重

    第一种:indexOf (获取字符串值在字符串中首次出现的位置,若没有这个值,则返回-1) let arr = [15,45,88,45,78,15,55,88]; let arr1 = []; // ...

  6. Linux 三剑客之sed

    目录 Linux 三剑客之sed 命令补充: sort命令 uniq命令 cut命令 tr命令 wc命令 三剑客 - sed 编辑模式: 定位分类: 实例如下: d模式--删除模式 p模式--打印 a ...

  7. grep 命令过滤配置文件中的注释和空

    grep 用法 Usage: grep [OPTION]... PATTERN [FILE]... Search for PATTERN in each FILE or standard input. ...

  8. java 常用类库:时间类LocalDate;LocalTime;LocalDateTime;Calendar 类;Date ;

    LocalDate类 LocalDate类代表不带时区的日期,列入2020-12-20.该类提供了静态的now()方法来获取当前的日期.这个类是线程安全的. LocalTime类 代表不带时区的时间, ...

  9. 出现线上bug,测试人能做些什么?

    测试奇谭,BUG不见. 大家好,我是谭叔. 一提到线上问题,很多测试小白要么"原则性"恐惧,要么憨憨如也,不知如何下手. 本篇文章,我再细化下这道常见的面试题,跟大家捋捋发生线上问 ...

  10. mysql三种提交类型

    mysql提交分显式提交.隐式提交及自动提交. (1) 显式提交用COMMIT命令直接完成的提交为显式提交.其格式为:SQL>COMMIT: (2) 隐式提交用SQL命令间接完成的提交为隐式提交 ...