软件测试常用设计模式

设计模式的重要原则就是:高内聚、低耦合;通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。

数据驱动测试:Data Driven Testing,简称DDT;

数据驱动指的是从数据文件(如数据库、Excel文件、Csv文件等)中读取输入数据并将数据以参数的形式输入脚本测试,这些变量被用作传递(输入/输出)用来验证应用程序的测试数据。不同的测试用例使用不同类型的数据文件。数据驱动模式实现了数据和脚本分离,相对于录制与回放测试技术,数据驱动测试极大地提高了脚本利用率和可维护性,但是对于界面变化较大的情景不适合数据驱动测试。

数据驱动的设计步骤:

编写测试脚本,脚本需要支持程序对象、文件或数据库读入测试数据

将测试脚本使用的测试数据存入程序对象、文件或者数据库等外部介质中

运行脚本,循环调用存储在外部介质的测试数据。

验证所有的测试结果是否符合期望结果

如:pytest 测试框架快速搭建 的 搜索接口测试实例,就是数据驱动设计模式。

数据驱动测试的多行测试数据对应一个测试脚本(或者说对应于一个关键字的实现,例如登录功能的测试,可以有用户名长度、密码长度、密码字符类型、大小写等多条测试用例,但是都是对应登录一个关键字),然后用不同的测试数据反复运行脚本(即每一行数据的处理逻辑是一样的)。如果需要做不同类型的测试,需要新增测试脚本(往往意味着新的测试数据格式)或者沿用同一个测试脚本,但是要做逻辑判断来确定执行哪一种测试。

核心:就是让测试与数据分离。

关键字驱动测试:Keyword Driven Testing,简称KDT;

关键字驱动的自动化测试(也被称为表驱动测试或基于动作词的测试),是数据驱动自动化测试的变种,关键字驱动的自动化测试框架建立在数据驱动手段之上,表中包含指令(关键词),而不只是数据。这些测试被开发成使用关键字的数据表,它们独立于执行测试的自动化工具。关键字驱动的自动化测试是对数据驱动的自动化测试的有效改进和补充;关键字驱动将数据域与脚本分离、界面元素与内部对象分离测试过程与实现细节分离。关键字驱动的测试逻辑为按照关键字进行分解得到数据文件,常用的关键字主要包括三类:被操作对象(Item)、操作(Operation)和值(value),用面向对象形式可将其表现为Item.Operation(Value);将测试逻辑按照这些关键字进行分解,形成数据文件。测试框架低层负责解释这些关键字,并完成相应的指令操作。  

将测试用例的步骤(元素)和用例分离。关键字驱动表示把项目中的一些逻辑封装成关键字(一个函数名)。例如login、 register、点击、打开浏览器、等待、输入,进行设置变量, 调用不同的关键字组合实现不同的业务逻辑,从而驱动测试用例的执行。

关键字驱动的框架基本工作是将测试用例分成4个不同的部分,测试步骤、测试对象、测试对象执行的动作、测试数据。

示例:

testCase:testName:#正确地注册用户pretc:step:open    'http://localhost:8080/register'click   id=reginput   id=username    value='zhangsan'input   id=password    value='abcdefg'input   id=checkpass   value='abcdefg'click   class=regbuttonexpected: #预期结果code 200message 注册成功

KDT:

关键字:Item.Operation(Value)

Operation:input、click、drag、move等

Item:元素的标签、元素的定位方式;

value:数据

本质是面向对象编程思维的一种体现,其实就是将代码,基于业务的实际使用场景,通过合理的封装,然后基于封装好的函数,通过调用这些函数驱动业务的执行。没有固定形式,

页面对象模式:Page Object Model,简称POM;

selenium在测试一个web页面时,通常是针对一个个页面进行测试的,基于此前提,我们可以把一个页面中的对象和操作进行封装,这就是POM;不难理解,POM本质就是将页面对象和操作进行封装,作为一个对象库而存在,这样在测试脚本中直接调用方法来进行相关操作并传递相应的参数即可。

核心:就是让操作与元素分离。

单例模式:大力魔兽指在程序的生命周期中,只做一次实例化,只分配一块内存空间,以确保所有操作和调用在同一块内存空间发生。例如:selenium的webdriver每实例化一次,都会打开一个新的浏览器,如果要对多个模块进行测试,不可能把所有的测试脚本放到同一个类中,因此需要使用单例模式。

单例模式代码示例:

from selenium import webdriverclass utility:driver = None #定义类级变量,#单例模式,确保只有一个实例在运行#classmethoddef get_webdriver(cls,borwser='chrome'):#如果没有被实例化,则实例化,否则直接返回;传参数做浏览器兼容if cls.driver is None:if browser=='chrome'cls.driver = webdriver.chrome()return  cls.driver

基于组件的测试:Component Based Testing,简称CBT;

业务流程测试:Business Process Testing,简称BPT;

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看。

【2025最新版】字节大牛讲的最全最细的自动化测试全套教程!永久白嫖,拿走不谢,全程干货无废话!逼自己15天内学完,从软件测试基础到项目实战一套全通关!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 Fluent-Bit 和 Fluentd 的分布式日志采集与处理方案

#作者:任少近 文章目录 需求描述系统目标系统组件Fluent BitFluentdKafka 数据流与处理流程日志采集日志转发到 Fluentd日志处理与转发到 KafkaKafka 作为消息队列 具体配置Fluent-Bit的CM配置Fluent-Bit的DS配置Fluentd的CM配置Fluentd的DS配置Kafka查询结果 需求…

正则表达式(Regular Expression,简称 Regex)

一、5w2h(七问法)分析正则表达式 是的,5W2H 完全可以应用于研究 正则表达式(Regular Expressions)。通过回答 5W2H 的七个问题,我们可以全面理解正则表达式的定义、用途、使用方法、适用场景等&#xff0c…

爬虫获取1688关键字搜索接口的实战指南

在当今电商行业竞争激烈的环境下,数据的重要性不言而喻。1688作为国内领先的B2B电商平台,拥有海量的商品信息,这些数据对于商家的市场分析、选品决策、价格策略制定等都有着重要的价值。本文将详细介绍如何通过爬虫技术获取1688关键字搜索接口…

如何快速解决django存储session变量时出现的django.db.utils.DatabaseError错误

我们在学习django进行web编程的时候,有时需要将一些全局变量信息存储在session中,但使用过程中,却发现会引起数据库的报错。通过查看django源码信息,发现其对session信息进行了ORM映射,如果数据库中不存在对应的表信息…

C语言复习--assert断言

assert.h 头⽂件定义了宏 assert() ,⽤于在运⾏时确保程序符合指定条件,如果不符合,就报错终止运行。这个宏常常被称为“断⾔”。 assert(p ! NULL); 代码在程序运⾏到这⼀⾏语句时,验证变量 p 是否等于 NULL 。如果确实不等于 NU…

STL新增内容

文章目录 C11 中的 STL 新增内容容器算法 C14 中的 STL 新增内容容器算法 C17 中的 STL 新增内容容器算法 C20 中的 STL 新增内容容器算法 C11 中的 STL 新增内容 容器 std::array:这是一个固定大小的数组容器,和原生数组类似,但具备更好的…

C#测试Excel开源组件ExcelDataReader

使用微软的com组件Microsoft.office.Interop.Excel读写Excel文件虽然可用,但是列多、行多的时候速度很慢,之前测试过Sylvan.Data.Excel包的用法,如果只是读取Excel文件内容的话,还可以使用ExcelDataReader包,后者是C#开…

位置编码汇总 # 持续更新

看了那么多还没有讲特别好的,GPT老师讲的不错关于三角函数编码。 一、 手撕transformer常用三角位置编码 GPT说:“低维度的编码(例如,第一个维度)可以捕捉到大的位置差异,而高维度的编码则可以捕捉到小的细…

Java 模块系统深度解析

Java 模块系统深度解析 Java 模块系统(Java Platform Module System, JPMS)是 Java 9 引入的一项重要特性,它从根本上改变了 Java 应用程序的打包和依赖管理方式。本文将全面介绍 Java 模块系统的核心概念、优势及实际应用。 一、为什么需要…

蓝桥杯杯赛-日期模拟

知识点 处理日期 1. 按天枚举日期:逐天遍历起始日期到结束日期范围内的每个日期。 2. 处理闰年:正确判断闰年条件。闰年定义为:年份 满足以下任意一个条件:(闰年的2月只有29天) 满足下面一个条件就是闰年 1> 是 400 的倍数…

.Net中对称加密的实现

常见对称加密算法及优缺点 1. DES(Data Encryption Standard) 优点:是最早被广泛应用的加密算法,算法公开,实现简单,效率较高。缺点:密钥长度较短(56 位),在…

SQLMesh调度系统深度解析:内置调度与Airflow集成实践

本文系统解析SQLMesh的两种核心调度方案:内置调度器与Apache Airflow集成。通过对比两者的适用场景、架构设计和操作流程,为企业构建可靠的数据分析流水线提供技术参考。重点内容包括: 内置调度器的轻量级部署与性能优化策略Airflow集成的端到…

centos线程数查看

查看当前最大支持的线程数 cat /proc/sys/kernel/threads-max当前用户进程可以创建的最大线程数(包括子进程) [rootlocalhost tmp]# ulimit -u得到当前实际的线程数 [rootlocalhost tmp]# ps -eLf | wc -l统计每个进程的总线程数前20的数据 [rootloc…

【大模型】视觉语言模型:Qwen2.5-VL的使用

官方github地址:https://github.com/QwenLM/Qwen2.5-VL 目录 Qwen家族的最新成员:Qwen2.5-VL 主要增强功能 模型架构更新 快速开始 使用Transformers聊天 Docker Qwen家族的最新成员:Qwen2.5-VL 主要增强功能 强大的文档解析功能&am…

HDMI接口设计

1. HDMI简介 HDMI(High Definition Multimedia Interface)高清多媒体接口,是首个支持在单线缆上传输,不经过压缩的全数字高清晰度、多声道音频和智能格式与控制命令数据的数字接口。这个接口可以同时传输视频信号、音频信号和控制信号。 从上图里面可以看到HDMI有3组数据信号…

C/C++ JSON 库综合对比及应用案例(六)

第六部分:C/C JSON 库综合对比及应用案例 📢 快速掌握 JSON!文章 视频双管齐下 🚀 如果你觉得阅读文章太慢,或者更喜欢 边看边学 的方式,不妨直接观看我录制的 JSON 课程视频!🎬 …

LXC 导入(Rockylinux,almalinux,oraclelunx,debian,ubuntu,openEuler,kail,opensuse)

前提要求 ubuntu下安装lxd 参考Rockylinux下安装lxd 参考LXC 源替换参考LXC 容器端口发布参考LXC webui 管理<

Spring MVC 页面跳转方案与区别

SpringMVC 的页面跳转方案主要分为 ‌转发&#xff08;Forward&#xff09;‌ 和 ‌重定向&#xff08;Redirect&#xff09;‌ 两类&#xff0c;具体实现方式和区别如下&#xff1a; 一、页面跳转方案 1. ‌转发&#xff08;Forward&#xff09;‌ 默认方式‌&#xff1a;直…

基于Spring Boot的轻型卡车零部件销售平台的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

高性能计算面经

高性能计算面经 C八股文真景一面凉经自我介绍&#xff0c;介绍一下你做过的加速的模块(叠噪&#xff0c;噪声跟原图有什么关系&#xff1f;)OpenGL和OpenCL有什么区别&#xff1f;**1. 核心用途****2. 编程模型****3. 硬件抽象****4. API设计****5. 典型应用场景****6. 互操作性…