首页 > 其他分享 >四、浅谈 unittest 框架

四、浅谈 unittest 框架

时间:2024-06-21 14:55:34浏览次数:23  
标签:浅谈 框架 unittest ddt 测试用例 print 执行 data

1.分层模型:

  (1)页面元素处理层:即 Page Object(PO模式)表示页面对象管理,将每个页面上所有元素定义在一个模块中,便于维护脚本。

  (2)业务流操作层:基于页面元素处理层实现业务流的自由组织,对应自动化测试的业务流场景的执行测试用例。

  (3)测试用例层:根据业务流场景设计相应的测试用例并执行,用例的执行都是通过框架完成(如:unittest、pytest),可以很好组织测试用例的执行并分析结果。

  (4)数据分离层:将脚本中的所有数据提取出来进行专门的数据模块管理,后期直接修改相应数据即可,不需要进行底层代码的查看分析。

  (5)公共层:进行常量数据的存储、报告的生成、日志的保存、邮件的发送等。

  (6)主程序入口应用层:设定主程序入口。

 

2.Page Object 模式优点:

  (1)PO 模式实现了页面元素的独立管理,实现页面元素与业务流的分离;

  (2)在用例层可以自由组织各个业务操作,提高了其页面元素的方法及页面业务的方法的可复用性;

 

3. unittest 框架:

  unittest 框架主要构成:TestCase、TestSuite、TestRunner、TestFixture

  TestCase:测试用例,对应一个完整的业务流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),测试后环境还原(tearDown),一个用例表示一个完整业务。

  TestSuite:一组测试用例的集合,可以以模块化的形式实现用例,以测试类的形式组织用例。

  TestRunner:测试运行器,定义执行测试用例的方式

  TestFixture:测试固件(夹具),完成某些对象初始化操作,即测试用例运行所需的环境搭建和销毁操作。

  

  unittest 框架测试流程:

    定义好 TestCase,由 TestLoader 加载 TestCase 到 TestSuite 中,再由 TextTestRunner 来运行 TestSuite,运行结果保存到 TextTestResult 中,最后通过 unittest.main() 完成测试用例的执行。

 

4. unittest 框架常用断言:

  assertEqual(arg1, arg2, msg=None):验证 arg1 = arg2 是否成立,不成立则 fail

  assertTrue(expr, msg=None):验证 expr,如果为 false,则 fail

  assertIs(arg1, arg2, msg=None):验证arg1,arg2 是否是同一个对象,不是则 fail

  assertIsInstance(arg1, arg2):验证 arg1 与 arg2 的实例对象是否相同,不是则 fail

 

5. unittest 框架中的 testfixture:

  testfixture:实现整个测试中所有用例所需要资源的管理操作,如资源(文件流、数据库资源、驱动器对象等)创建、销毁等。

  testfixture 主要由两个方法构成:setUp(创建)、tearDown(销毁),方法名固定,严格区分大小写。

  serUp():每个测试用例执行之前都会执行一次

  tearDown():每个测试用例执行完毕之后都会执行一次

  

  @classmethod

  serUpClass():在所有测试用例执行之前仅执行一次

  tearDownClass():在所有测试用例执行之后仅执行一次,

 

6. unittest 框架实现参数化 --ddt

  ddt:表示数据驱动测试,用于实现测试用例参数化的一种实现方式

  ddt 提供了一个类装饰器 @ddt,提供了两个方法装饰器 @data、@file_data

  多种参数类型的数据结构传入:

    (1)单一型数据结构:无论传入的数据是何种类型,都当做一个值处理。

    (2)复合数据类型结构处理(list、tuple、dict):需添加一个装饰器 @ddt.unpack

代码举例:  

import unittest
from ddt import ddt, data, unpack


def add(a, b):
return a + b


@ddt
class TestDemo(unittest.TestCase):
# data 可传递元组
@data((1, 2, 3))
def test_01(self, a):
print(a)
print(type(a))

# data 可传递列表,通过索引取值
@data([1, 2, 3])
def test_02(self, b):
print(b[0])
print(type(b))

# 使用 unpack 拆分数据 data 传递的列表(元组),使用形参接收,形参个数需与列表长度相同否则报错
@data([1, 2, 3])
@unpack
def test_03(self, a, b, c):
print(a)
print(b)
print(c)

# unpack 拆包字典,使用形参接收,形参名需与字典 key 相同否则报错
@data({"a": 1, "b": 2, "expect": 3}, {"a": 33, "b": 2, "expect": 35})
@unpack
def test_04(self, a, b, expect):
print(a)
print(b)
print(expect)
self.assertEqual(add(a, b), expect)


if __name__ == '__main__':
unittest.main()

 

标签:浅谈,框架,unittest,ddt,测试用例,print,执行,data
From: https://www.cnblogs.com/xianyumaixianyu/p/18260503

相关文章

  • 基于C#的winform和halcon开发的通用视觉框架,类似visionpro
    基于C#的winform和halcon开发的通用视觉框架界面风格和visionpro的很像,线条连线的流程风格,代码编译无报错,程序可运行,工具不是很完善,适合大家学习使用。需要源码请私信或者加QQ......
  • 基于C#的winform和halcon开发的通用视觉框架
    基于C#的winform和halcon开发的通用视觉框架代码编译无报错,程序可运行,有些地方有BUG,适合大家学习使用。需要源码请私信或者加QQ......
  • 基于C#的WPF+halcon开发,视觉和运动控制软件框架源码
    基于C#的WPF+halcon开发,视觉和运动控制软件框架源码带ui设计器和轴卡运控,上手可用,WPFMVVM开发模式,1:1参考easyvision开发,集成几十个软件算子,插件框架可以自定义变量,写c#脚本,自定义流程,包含了halcon脚本和封装的算子,可自定义ui,通过插件形式开发很方便拓展自己的功能。可学......
  • Java串口框架jSerialComm替换rxtxcomm
    问题最开始使用的是rxtxcomm框架,部署时还要手动放驱动文件,而且后面没有进行维护,导致一些一些新系统不再支持,需要手动打包。<dependency><groupId>org.bidib.jbidib.org.qbang.rxtx</groupId><artifactId>rxtxcomm</artifactId><version>2.2</version><sc......
  • HUSKY:一个优化大语言模型多步推理的新代理框架
    推理被高度认可为生成人工智能的下一个前沿领域。通过推理,我们可以将任务分解为更小的子集并单独解决这些子集。例如以前的论文:思维链、思维树、思维骨架和反射,都是最近解决LLM推理能力的一些技术。此外推理还涉及一些外围功能,例如访问外部数据或工具。在最近的几年里,我们已经看到......
  • 若依框架页面新增时,富文本加入图片保存时出现:JSON parse error: Unexpected character
    在使用若依框架的富文本框新增时,如果插入一个图片的时候会出现一个JSONparseerror:Unexpectedcharacter('/'(code47)):maybea(non-standard)comment?(notrecognizedasonesinceFeature'ALLOW_COMMENTS'notenabledforparser);nestedexceptioniscom.fas......
  • selenium框架学习之获取文本框内容和Xpath元素不唯一
    本周一直写创建简历的测试用例,由于元素和内容过多,只能把各个方法单独封装,然后在测试用例里面使用,以此优化用例。在封装的时候遇到的一些问题,和大家说下怎么解决~1. 获取文本框输入---新增了一个【输入微信号】的功能模块,需要同时测试点击【同手机】和输入文本的功能。于是......
  • 如何使用Decider将网络攻击行为映射到MITRE ATT&CK®框架之中
    关于DeciderDecider是一款功能强大的网络威胁行为映射工具,该工具可以帮助网络安全防御人员、网络威胁分析人员和网络安全研究人员将攻击者的行为映射到MITREATT&CK®框架之中。Decider通过引导用户完成映射过程,使创建ATT&CK映射变得更容易。该工具支持通过向用户询问一系列......
  • java的日志记录框架
    1.什么是日志日志是记录应用程序运行时所产生的事件信息的工具。2.日志的分类(1)SQL日志(2)异常日志(3)业务日志3.日志的主要用途问题追踪、状态监控、安全审计4.使用log4j2日志的步骤a.配置log4j2配置文件b.创建日志容器log对象c.使用log对象对应的危险等级提示来记录日......
  • 嵌入式Linux中platform平台设备模型的框架(实现LED驱动)
    在前面讨论的所有LED驱动程序中,把全部设备信息和驱动代码都写在了一个文件中,从本质上看,这种开发方式与单片机的开发并没有太大的区别,一旦硬件信息发生变化,就必须要修改驱动程序的源码。然而,Linux作为一个发展成熟、功能齐全、结构复杂的操作系统,它对于代码的可维护性、复用性非常......