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. # 1.创建测试套件
  2. suite = unittest.TestSuite()
  3. # 2.向测试套件中添加测试用例
  4. # 模块名.测试类名('测试用例名')
  5. suite.addTest(test_Demo.TestDmeo('test_case_01'))
  6. # 3.执行测试套件中的用例
  7. runner = unittest.TextTestRunner()
  8. runner.run(suite)

2)示例

  1. # 1 导入unittest
  2. import unittest
  3. # 2 创建测试类
  4. class TestDmeo(unittest.TestCase):
  5. # 3 编写test case
  6. def test_case_01(self):
  7. """测试用例1"""
  8. print("执行测试用例1")
  9. def test_case_02(self):
  10. """测试用例2"""
  11. print("执行测试用例2")
  12. def test_case_03(self):
  13. """测试用例3"""
  14. print("执行测试用例3")
  15. if __name__ == '__main__':
  16. # 执行当前测试类中,以test开头的测试用例
  17. # unittest.main()
  18. # 1. 创建测试套件
  19. suite = unittest.TestSuite()
  20. # 2. 向测试套件中添加测试用例
  21. # 当前模块中的测试用例,可省略模块名(文件名)
  22. suite.addTest(TestDmeo('test_case_02'))
  23. suite.addTest(TestDmeo('test_case_03'))
  24. suite.addTest(TestDmeo('test_case_01'))
  25. # 3. 执行测试套件中的用例
  26. runner = unittest.TextTestRunner()
  27. 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. # 1 导入unittest
  2. import unittest
  3. # 2 创建测试类
  4. class TestDmeo(unittest.TestCase):
  5. # 3 编写test case
  6. def test_case_0001(self):
  7. """测试用例0001"""
  8. print("执行测试用例0001")
  9. def test_case_0002(self):
  10. """测试用例0002"""
  11. print("执行测试用例0002")
  12. def test_case_0003(self):
  13. """测试用例0003"""
  14. print("执行测试用例0003")
  15. if __name__ == '__main__':
  16. # 1. 创建测试套件
  17. suite = unittest.TestSuite()
  18. # 2. 向测试套件中添加测试用例
  19. """
  20. # 2.1 loadTestsFromName
  21. # 提示:
  22. name参数是传入文件名,字符串格式
  23. 格式:模块名.测试类名.测试用例名
  24. """
  25. # suite_1 = unittest.TestLoader().loadTestsFromName('test_demo2.TestDmeo.test_case_01')
  26. """
  27. # 2.2 loadTestsFromNames
  28. 参数是一个列表,列表中的元素格式同上
  29. """
  30. # suite_1 = unittest.TestLoader().loadTestsFromNames(
  31. # ['test_demo2.TestDmeo.test_case_01','test_demo2.TestDmeo.test_case_02'])
  32. """
  33. # 2.3 loadTestsFromTestCase
  34. 参数一个测试类名
  35. 当前模块直接传如测试类名称即可
  36. """
  37. suite_1 = unittest.TestLoader().loadTestsFromTestCase(TestDmeo)
  38. # 加入套件
  39. suite.addTest(suite_1)
  40. # 3. 执行测试套件中的用例
  41. runner = unittest.TextTestRunner()
  42. 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. """
  2. 1.学习目标
  3. run_case.py必须会写
  4. 2.操作步骤
  5. 2.1 明确测试用例存放路径
  6. 2.2 将要执行的用例添加到测试套件中
  7. 2.3 执行测试套件中的用例
  8. 3.注意事项
  9. 1.run_case.py文件需要放置在项目根目录下
  10. 2.所有测试用例都写在test_caset文件夹中
  11. 3.编写用例的py文件需要以test开头
  12. """
  13. # 1.导入unittest
  14. import unittest
  15. # 2.获取测试用例存放路径---测试用例存放文件夹
  16. case_path = "./test_case"
  17. # 3.添加用例到测试套件中
  18. """
  19. # 如果只添加一个文件,pattern就直接填写文件名
  20. start_dir, 指定case目录
  21. pattern='test*.py', 匹配文件规则,# 选择文件夹中的写test_开头的py文件
  22. """
  23. discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py")
  24. # 4.执行测试套件中的用例
  25. runner = unittest.TextTestRunner()
  26. 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. 快成物流科技 x mPaaS | 小程序容器加持下的技术架构“提质增效”

      导言 从 2017 年开始,GMTC"移动技术大会"就更名为"大前端技术大会".发展至今,混合开发.原生开发.前端开发等概念正在深度融合,组成"大 ...

  2. cachecloud生产环境搭建

    步骤 1 机器管理 机器初始化Redis环境 添加机器  执行:  cachecloud-init.sh脚本 2 cachecloud添加机器的时候需要添加一个用户cachecloud-open ad ...

  3. 使用kubeadm部署一套高可用k8s集群

    使用kubeadm部署一套高可用k8s集群 有疑问的地方可以看官方文档 准备环境 我的机器如下, 系统为ubuntu20.04, kubernetes版本1.21.0 hostname IP 硬件配置 ...

  4. TVM适配NN编译Compiler缺陷

    TVM适配NN编译Compiler缺陷 内容纲要 前言 TVM针对VTA的编译流程 自定义VTA架构:TVM的缺陷与性能瓶颈 TVM缺陷与瓶颈 缺陷一:SRAM配置灵活性差 缺陷二:计算阵列配置僵硬 ...

  5. Tengine Framework基础

    Tengine Framework基础 最受开发者喜爱的边缘AI计算框架 Tengine是OPEN AI LAB推出的自主知识产权的边缘AI计算框架,致力于解决AIoT产业链碎片化问题,加速AI产业化 ...

  6. 使用Keil语言的嵌入式C编程教程(上)

    使用Keil语言的嵌入式C编程教程(上) Embedded C Programming Tutorial with Keil Language Embedded System 嵌入式系统是指以单片机为 ...

  7. Json文件解析(上)

    Json文件解析(上) 代码地址:https://github.com/nlohmann/json 自述文件 alt=GitHub赞助商 data-canonical-src="https: ...

  8. Python_Selenium 之以login_page为例实现对basepage封装好的方法调用和对common中公共方法的调用

    目的:简化代码,提供框架该有的东西每一个函数 -提供了一个功能 - 公共的功能有了basepage,在PageObjects当中直接调用元素操作. 以下以login_page 为例,实现从配置文件中读 ...

  9. 量子:基于ERP块对的两步量子直接通信

    学习论文: 题目:Two-step quantum direct communication protocol using the Einstein-Podolsky-Rosen pair block ...

  10. 【NX二次开发】Block UI 树列表

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...