1、测试套件的作用

在我们实际工作,使用unittest框架会有两个问题:

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

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

2、使用测试套件

(1)入门示例

1)用法

  1. unittest.TestSuite():创建测试套件。
  2. addTest()addTests()方法是将测试用例添加到测试套件中。
  3. unittest.TextTextRunner():通过该类下面的run()方法来运行suite所组装的测试用例,suite测试套件为run()方法参数。

例如:将test_Demo1模块下的TestDmeo类下的test_case_01测试用例添加到测试套件中。

# 1.创建测试套件
suite = unittest.TestSuite() # 2.向测试套件中添加测试用例
# 模块名.测试类名('测试用例名')
suite.addTest(test_Demo.TestDmeo('test_case_01')) # 3.执行测试套件中的用例
runner = unittest.TextTestRunner()
runner.run(suite)

2)示例

# 1 导入unittest
import unittest # 2 创建测试类
class TestDmeo(unittest.TestCase): # 3 编写test case
def test_case_01(self):
"""测试用例1"""
print("执行测试用例1") def test_case_02(self):
"""测试用例2"""
print("执行测试用例2") def test_case_03(self):
"""测试用例3"""
print("执行测试用例3") if __name__ == '__main__':
# 执行当前测试类中,以test开头的测试用例
# unittest.main() # 1. 创建测试套件
suite = unittest.TestSuite()
# 2. 向测试套件中添加测试用例
# 当前模块中的测试用例,可省略模块名(文件名)
suite.addTest(TestDmeo('test_case_02'))
suite.addTest(TestDmeo('test_case_03'))
suite.addTest(TestDmeo('test_case_01'))
# 3. 执行测试套件中的用例
runner = unittest.TextTestRunner()
runner.run(suite)

提示:向测试套件中添加测试用例的顺序,就是测试用例执行的顺序。(此时解决了第一个问题)

注意:

使用PyCharm执行上边代码,会按顺序执行全部测试用例,这是PyCharm问题。

使用命令行直接执行该Python文件,没有问题。

(2)根据不同的条件加载测试用例(了解)

提示:这种方式很少用,了解一下即可。推荐都用下面的方式(3)。

unittest.TestLoader():根据不同的条件加载测试用例,其中有几个方法:

  1. unittest.TestLoader().loadTestsFromName(测试用例名)
  2. unittest.TestLoader().loadTestsFromNames(测试用例名的列表)
  3. unittest.TestLoader().loadTestsFromTestCase(测试类名)
  4. unittest.TestLoader().loadTestsFromModule(模块名)
  5. unittest.TestLoader().discover()

例如:将``test_demo2模块下的TestDmeo类下的test_case_01`测试用例添加到测试套件中。

测试用例名格式:文件名+类名+方法名,一级一级的。

示例

# 1 导入unittest
import unittest # 2 创建测试类
class TestDmeo(unittest.TestCase): # 3 编写test case
def test_case_0001(self):
"""测试用例0001"""
print("执行测试用例0001") def test_case_0002(self):
"""测试用例0002"""
print("执行测试用例0002") def test_case_0003(self):
"""测试用例0003"""
print("执行测试用例0003") if __name__ == '__main__':
# 1. 创建测试套件
suite = unittest.TestSuite() # 2. 向测试套件中添加测试用例
"""
# 2.1 loadTestsFromName
# 提示:
name参数是传入文件名,字符串格式
格式:模块名.测试类名.测试用例名
"""
# suite_1 = unittest.TestLoader().loadTestsFromName('test_demo2.TestDmeo.test_case_01') """
# 2.2 loadTestsFromNames
参数是一个列表,列表中的元素格式同上
"""
# suite_1 = unittest.TestLoader().loadTestsFromNames(
# ['test_demo2.TestDmeo.test_case_01','test_demo2.TestDmeo.test_case_02']) """
# 2.3 loadTestsFromTestCase
参数一个测试类名
当前模块直接传如测试类名称即可
"""
suite_1 = unittest.TestLoader().loadTestsFromTestCase(TestDmeo) # 加入套件
suite.addTest(suite_1)
# 3. 执行测试套件中的用例
runner = unittest.TextTestRunner()
runner.run(suite)

(3)常用方式(推荐)

unittest.defaultTestLoader():通过该类下面的discover()方法可自动根据测试目录test_dir匹配查找测试用例文件,如test*.py,并将查找到的测试用例组装到测试套件中。

1)简单示例:

discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

2)测试套件示例:

  1. 创建test_case包用来存放测试用例。
  2. 以上面两个测试类做例子,把test_demo1test_demo2两个测试用例类文件放入test_case包中。
  3. 编写调用用例脚本run_case.py文件执行多个测试用例。

3)说明:

test_demo1test_demo2两个文件,就是上面(1)(2)的示例。

下面是run_case.py文件内容,需求是同时执行test_demo1test_demo2两个文件中的测试用例。

"""
1.学习目标
run_case.py必须会写
2.操作步骤
2.1 明确测试用例存放路径
2.2 将要执行的用例添加到测试套件中
2.3 执行测试套件中的用例
3.注意事项
1.run_case.py文件需要放置在项目根目录下
2.所有测试用例都写在test_caset文件夹中
3.编写用例的py文件需要以test开头
"""
# 1.导入unittest
import unittest # 2.获取测试用例存放路径---测试用例存放文件夹
case_path = "./test_case" # 3.添加用例到测试套件中
"""
# 如果只添加一个文件,pattern就直接填写文件名
start_dir, 指定case目录
pattern='test*.py', 匹配文件规则,# 选择文件夹中的写test_开头的py文件
"""
discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py") # 4.执行测试套件中的用例
runner = unittest.TextTestRunner()
runner.run(discover)

『心善渊』Selenium3.0基础 — 28、unittest中测试套件的使用的更多相关文章

  1. 『心善渊』Selenium3.0基础 — 2、Selenium测试框架环境搭建(Windows)

    目录 1.浏览器安装 2.浏览器驱动下载 (1)ChromeDriver for Chrome (2)Geckodriver for Firefox (3)IEDriverServer for IE ...

  2. 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍

    目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...

  3. 『心善渊』Selenium3.0基础 — 11、Selenium对元素常用操作

    目录 1.Selenium对元素常用操作 2.Selenium对元素的其他操作 1.Selenium对元素常用操作 操作 说明 click() 单击元素 send_keys() 模拟输入 clear( ...

  4. 『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件

    目录 (一)对鼠标的操作 1.鼠标事件介绍 2.ActionChains 类鼠标操作的常用方法 3.perform()方法 4.鼠标事件操作步骤 5.示例 (1)右键单击.左键双击 (2)鼠标拖拽动作 ...

  5. 『心善渊』Selenium3.0基础 — 1、Selenium自动化测试框架介绍

    目录 1.Selenium介绍 2.Selenium的特点 3.Selenium版本说明 4.拓展:WebDriver与Selenium RC的区别 5.Webdriver工作原理 1.Seleniu ...

  6. 『心善渊』Selenium3.0基础 — 25、unittest单元测试框架

    目录 1.unittest基本简介 2.unittest基本概念 (1)unittest核心的四个概念 (2)如何创建一个测试类 (3)test fixture常用的四个方法 (4)unittest编 ...

  7. 『心善渊』Selenium3.0基础 — 26、unittest测试框架的断言

    目录 1.断言介绍 2.常用的断言方法 3.断言示例 1.断言介绍 在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的,这时会用到断言方法. 本着没有消 ...

  8. 『心善渊』Selenium3.0基础 — 29、使用HTMLTestRunner生成unittest的HTML报告

    目录 1.HTMLTestRunner介绍 2.HTMLTestRunner的使用 3.测试报告示例 4.封装成模块 1.HTMLTestRunner介绍 HTMLTestRunner是一个基于uni ...

  9. 『心善渊』Selenium3.0基础 — 3、使用Selenium操作浏览器对象的基础API

    目录 1.导入Selenium库 2.创建浏览器对象 3.浏览器窗口大小设置 4.浏览器位置设置 5.请求访问网址 6.浏览器页面前进.后退和刷新 7.关闭浏览器 相比于高大上的各种Selenium进 ...

随机推荐

  1. 安装spark 报错:java.io.IOException: Could not locate executable E:\hadoop-2.7.7\bin\winutils.exe

    打开 cmd 输入 spark-shell 虽然可以正常出现 spark 的标志符,但是报错:java.io.IOException: Could not locate executable E:\h ...

  2. 安全利器 — SELinux

    在 Linux 系统中一切皆文件,资源也属于某种文件.用户在访问文件的时候,系统对权限(读.写 .执行)进行检查.只要用户对文件有足够的权限,就可以任意操作资源.root 用户对所有资源拥有所有权限, ...

  3. XGBoost原理介绍

    XGBoost原理介绍 1. 什么是XGBoost XGBoost是一个开源机器学习项目,实现了GBDT算法,进行了算法和工程上的许多改进,广泛应用在Kaggle竞赛及许多机器学习竞赛中. 说到XGB ...

  4. APA自动泊车系统

    APA自动泊车系统 1. 半自动泊车 自动泊车又称为自动泊车入位,它对于新手来说是一项相当便捷的配置,对于老手来说也省了些不少力气.那么自动泊车的原理是什么呢?能想怎么停就怎么停,想停哪儿就停哪儿吗? ...

  5. Linux架构思维导图

    Linux架构思维导图 GUI(Graphical User Interface,图形用户界面) Linux学习路径 软件框架 Linux桌面介绍 FHS:文件系统目录标准 Linux需要特别注意的目 ...

  6. 快手推荐系统及 Redis 升级存储

    快手推荐系统及 Redis 升级存储  借傲腾 补上 DRAM 短板 内容简介: 作为短视频领域的领先企业,快手需要不断导入更先进的技术手段来调整和优化其系统架构,以应对用户量和短视频作品数量的爆炸式 ...

  7. 孟老板 BaseAdapter封装 (一) 简单封装

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  8. Java网络编程实践

    网络编程的目的 无线电台......传播交流信息,数据交换.通信 想要达到这个效果需要什么: 1. 如何准确的定位网络上的第一台主机 192.168.16.124:端口,定位到这个计算机上的某个资源. ...

  9. Django(63)drf权限源码分析与自定义权限

    前言 上一篇我们分析了认证的源码,一个请求认证通过以后,第二步就是查看权限了,drf默认是允许所有用户访问 权限源码分析 源码入口:APIView.py文件下的initial方法下的check_per ...

  10. C#开发之基于NPOI的操作Excel开发体验

    最近遇到一个数据导入的需求,语言是.net framework 4.7的C#.但是,这次主要探讨NPOI的体验,原则就是向前兼容.所以采用.xls的支持.网上的资料,我稍微整合了一些. #1 单元格下 ...