软件测试常用设计模式

news2024/11/27 21:15:16

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

数据驱动测试: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=reg
        input   id=username    value='zhangsan'
        input   id=password    value='abcdefg'
        input   id=checkpass   value='abcdefg'
        click   class=regbutton
    expected: #预期结果
        code 200
        message 注册成功

KDT:

关键字:Item.Operation(Value)

Operation:input、click、drag、move等

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

value:数据

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

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

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

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

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

单例模式代码示例:

from selenium import webdriver
 
class utility:
    
    driver = None #定义类级变量,
 
    #单例模式,确保只有一个实例在运行
    #classmethod
    def 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;

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

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

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

相关文章

RabbitMQ-基础学习

在虚拟机上安装Erlang的GCC环境,装erlong,然后安装rabbitmq 参考:安装说明链接 安装web端面板 创建交换机 先学习一下工作模式(详细介绍可见官网) 上代码 1.Hello Word模式 写在测试类中: Providucer T…

3 springboot更改tomcat的端口和启动时的banner

3.1 更改tomcat端口 点击resources下的application.properties。 然后,添加以下信息,即可把端口号更改为8081。 # 更改项目的端口号 server.port80813.2 更改启动时的banner 首先,进入网站:https://www.bootschool.net/ascii-art…

git切换账户问题

之前一直用另一个github账户提交代码 今天新创建了一个github账户 用这个账户git项目修改后,push时有问题 1 先执行下面命令,切换了用户 git config --local user.name “xxx” git config --local user.email “xxx” 执行 git config user.name 查看…

电脑端anconda的安装和配置

1.下载官网Anaconda | The World’s Most Popular Data Science Platform 1.1如果上述不行就去清华园源下载镜像Index of / 2.点击下载软件安装,按照图的安装步骤就可以了 安装完毕后点击next就可以了 3.测试是否安装配置成功 WINR键调出运行窗口,输入…

AI免费写作

随着科技的不断发展,人工智能(AI)正逐渐渗透进各个领域,包括以前我们认为只有人类才能胜任的创作型任务——写作。本文将通过深入浅出的方式,为大家剖析AI写作的具体运作机制,并结合案例,带大家一起探索AI写作的无穷可…

方向盘脱手检测原理及主流方案

随着高阶辅助驾驶逐渐普及,逐渐从驾驶员驾驶过渡到人机共驾最终到自动驾驶。而目前阶段受限于技术以及发规等,主要还是人机共驾,由于车辆是辅助人来进行驾驶,因此驾驶员还需要起到主要的监测作用,此时对驾驶员的监控变…

凝心聚力,奋楫启程—易我文化系列课《战略方向定位》讲座圆满举行

易我文化系列课自开课以来,受到了易我员工的一致好评和热烈欢迎。2023年6月20日,易我文化系列课再次发力,《战略方向定位》讲座如期举行,并且取得了圆满的成功。 本次讲座特别邀请易我总经理——万建华先生为大家授课&#xff0c…

Github Pages 快速搭建个人网站教程

官方教程&#xff1a;https://pages.github.com/ 1 创建仓库 命名为 你的名字.github.io 克隆项目 git clone https://github.com/username/username.github.io加入index.html页面 在克隆的项目中&#xff0c;加入一个index.html html文件简单写几个dom <!DOCTYPE html…

最牛,python接口自动化测试-fixtures固件使用详细(实战)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 全局设置请求头部…

2023年7月实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先&#xff0c;来看下效果图 在线体验地址&#xff1a;https://geojson.hxkj.vip&#xff0c;并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

@Data失效 Lombok使用与失效

Data失效 1注入pom </dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.18</version><scope>provided</scope></dependency>2下载插件&#xf…

极速冲浪:影视网站推荐

在快节奏的现代生活中&#xff0c;影视娱乐成为了人们放松和娱乐的重要方式。随着高速互联网的普及&#xff0c;极速冲浪在各种影视网站上成为了我们追逐电影、剧集和综艺节目的常态。这些影视网站不仅提供了海量的内容资源&#xff0c;还通过便捷的在线观看和下载功能&#xf…

Go语言程序设计(五)切片

一、切片的定义 在Go语言中,切片(Slice)是数组的一个引用,它会生成一个指向数组的指针,并通过切片长度关联到底层数组部分或者全部元素。切片还提供了一系列对数组的管理功能(append、copy)&#xff0c;可以随时动态扩充存储空间&#xff0c;并且可以被随意传递而不会导致所管理…

[RapidVideOCR周边] RapidVideOCR初级教程(界面版 下载解压即可使用)

引言 考虑到提取视频字幕的小伙伴大多不是程序员行当&#xff0c;为了降低使用门槛&#xff0c;特此推出界面版的RapidVideOCR Desktop.RapidVideOCR Desktop需要搭配VideoSubFinder使用。它们两个关系如下图所示&#xff1a; #mermaid-svg-keuknVOG1YkfjOkw {font-family:&qu…

在Linux中部署Ansible

Ansible是自动化运维工具&#xff0c;基于模块化工作&#xff0c;本身没有批量部署的能力。 Ansible只是提供一种框架&#xff0c;Ansible运行的模块才有批量部署的能力。 Ansible使用SSH协议对设备进行管理&#xff0c;只需在主控端部署Ansible环境&#xff0c;被控端无需做…

CSS+HTML实现元素定位

文章目录 相对定位 position: relative;总结 绝对定位 position: absolute;总结 固定定位 position: fixed;总结 z-index样式总结 数量角标透明度设置 opacity返回顶部 相对定位 position: relative; position: relative; 【示例代码&#xff1a;】 <!DOCTYPE html> &…

【广州华锐互动】智慧物流3D可视化数据分析展示平台

智慧物流3D可视化数据分析展示平台是一种基于数字孪生技术的新型物流管理工具&#xff0c;它可以帮助物流企业实现对物流过程的全面监控和管理。相比传统的物流管理方式&#xff0c;智慧物流3D可视化数据分析展示平台具有以下意义&#xff1a; 1.提高物流效率&#xff1a;智慧…

vue自定义菜单栏并循环便利使用

浅尝vue 前言&#xff1a; 在网上找了蛮多关于自定义表单对象进行循环处理&#xff0c;写的我都看的一脸懵&#xff0c;最后还是直接修改组件完善了&#xff0c;直接用v-for 进行循环绑定实现了。本例实现了自定义菜单栏和vue-router 路由指向菜单并进行路由跳转&#xff0c;主…

Idea打包Jar文件

https://blog.csdn.net/qq_35356840/article/details/98725948 注意这个坑&#xff1a;

html前端输入框模糊查询

1、一个页面内多个模糊查询情况&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8" /> <meta name"viewport" content"widthdevice-width, initial-scale1.0, user-scalable0, minimum-scale1.0, maximum-…