如何实现工具无关化?关于自动化测试脚本的设计

news2025/1/11 11:09:43

1.问题的提出

最近几年来,我的自动化测试工具之旅大致是这样的,最早用的是QTP,然后是RFT(IBM的功能测试自动化产品),之后也经历了Selenium, Watir等,再后还是一些商业工具主要是偏web自动化及移动自动化,如sahi, appnium, Keynote DeviceAnywhere, SeeTest, HP UFT等,这一系列的变化,让人痛苦的不是学习的过程,也不是各种编程语言的转换,最痛苦的是我们的自动化测试脚本要因为工具的变化而需要重写,因为无法重用,我们或是维护多种自动化工具脚本,或是将自动化测试脚本为最近使用的工具进行重写编写,有太多的effort花在这些事情上。

我们怎么解决这类问题呢?试想,如果我们能够有这样一个平台,如果提供统一的自动化编程API,而且独立于某种工具,那该 有多好。所以本文的目的要设计 这样一个平台,能够对自动化测试人员提供统一的编程接口,能够适应测试工具的变化,而无须修改已经基于此平台编程好的自动化测试脚本。

2. 如何实现工具无关化

首先,我们要考虑工具无关化,如果要实现工具无关化,那么对于使用者(自动化测试脚本实现者)一定是使用一致的api,一致的测试元素,一致的数据访问方式。那么我们先要考虑一下测试元素的一致性。

这里我们先假设我们未来的待测试应用都是web应用或是mobile应用,而mobile应用我们使用的都是hybrid应用。对于测试元素来讲,最重要的是如何能够识别它,我们在识别元素的时候,都会找到一个唯一id或属性来标识它。来看我们上边假设的应用,我们可以使用xpath来做为唯一id来识别元素。你可能根据自已实际场景来设计来定义它。除此之外,为了能够操作元素,我们需要知道它的名字,因为我们还需要为它命名。除此之外,我们还需要使用一个类型字段来区别不同工具之间可能对测试元素有些特别的要求,我们通常使用type字段来标识它。所以我们从逻辑上来看,一个工具无关的测试元素大致看起来是这样的。

对于测试数据来讲,我认为,每个数据都是有一个列和一个值组成,所有数据看起来比较简单。

数据有一点需要注意一下,如果我们要实现数据驱动的自动化测试,我们就需要在此平台提供处理多行数据能力。

有了测试对象和测试数据之后,我们需要了解我们的待测试应用,我们的平台需要对待测试应用使用之前进行一些配置,使用时还要进行一些初始化等工作,使用完我们还会对些进行一些清理销毁等工作。。如此一来,我们的平台需要考虑如何进行测试设置工作,因为未来我们平台面对可能各种不同的测试工具,那么在这里我们也需要在些考虑好一致的接口。所以此部分看来如下所示:

对于测试元素的操作,我们通常会使用类似 click, setValue 等一些点击,填值的操作,我们同时还会检查一些测试元素是否在页面中存在,也会检测一个测试元素是否展示在屏幕上。我们可以将些部分统一归结为 action. 所以对象的 action 看起来如下所示:

除了 action 之外,我们的平台还要提供 checkpoint 功能,此功能是为了能够让我们脚本有能力判断最近测试结果是通过还是失败。即有一个 checkpoint 失败了,整个测试脚本就是失败状态。Checkpoint 的功能使用起来极其简单,我们需要为其输入两个参数,一个为 expect,一个为 actual,二者进行比较并返回比较结果。这里需要强调的一点是,我们设计 checkpoint 时,要使其能够为其二个参数可以自适应到各种数据类型,因为我们实际应用时,有时会使用两个布尔值进行判断,有时可能会使用两个字符串进行判断,也可能我们可能直接将两个对象传过来进行比较。所以这里我们要让其能够自适应。

讲到这里,我们的平台还需要至少要有的一个功能是 report, 我们的 report 要能够展示测试脚本最终是通过了还是失败了。同时能够记录每个步骤的状态,能够截屏。当然,如果 report 能够提供更多的 metric 数据就更好了。方便未来计算 ROI.

讲到这里我们都是讲的都是对外提供的统一的 API,从使用都角度,这些已经基本够用了。但是对于工具来讲,我们要实现工具无关化,我们要讲起来可能会简单一些,但是实际做的时候还是比较麻烦的。因为我们需要针对我们平台支持的每一套测试工具编写接口,使其在外边看起来是一样的。所以平台这边说起来是简单的,但实现工作量还是比较大的,因为每套工具都有其复杂性,再次封装后并提供统一的简单易用接口并非总是那么容易。所以编写接口的人,必须 是对其封装的工具是极其熟悉的,并且有丰富的实际应用经验,因为这种你们才能为使用者写出他们真正所需的接口。

3. 总结

在上面我大致讲解了要实现一个工具无关的自动化测试平台所应该具有最少元素集合。在实际应用中,我们所做的工作远远大于这个集合。但是有了这个平台之后,我们自动化脚本的重用率有了很大的提升。对于团队中的自动化实现者来说,它们不需要再痛苦了学习和掌握每一种新的工具,或是因为工具的变化而重写自动化测试脚本了。

最后:

可以到我的个人号:atstudy-js,免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!其中包括了有基础知识、Linux必备、Mysql数据库、抓包工具、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试等。

这些测试资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

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

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

相关文章

你知道ArcGIS电子地图也有大字体地图吗(附下载方法)

概述 如果你经常使用水经微图,应该知道在水经微图内,百度电子地图和高德电子地图有大字体地图,最近我偶然发现ArcGIS电子地图也有大字体地图,这里给大家介绍一下下载方法。 加载地图 在ArcGIS中打开目录窗格,点击添…

五、卷积神经网络CNN8(不同卷积后图像大小计算)

类型划分 2 维卷积的计算分为了 3 类:1.full 2.same 3. valid 1、full蓝色为原图像,白色为对应卷积所增加的 padding,通常全部为 0,绿色是卷积后图片。图中的卷积的滑动是从卷积核右下角与图片左上角重叠开始进行卷积&#xff…

为什么企业需要实时跟踪进度的项目管理工具?

市场上的大多数 项目管理工具,都是垃圾进-垃圾出,这意味着如果你的团队没有输入正确甚至漏了输入他们活动的状态信息,就无法准确跟踪项目进展。 当选择了一个不能跟踪实时进度状态的项目管理工具,它不能给你提供准确报告进度所需…

大型复杂项目管理之风险预防

最近一个项目让项目经理小王焦头烂额,一问才知是第一次主导大型项目,各个维度的风险问题频发不断,项目感觉推动不下去了。例如,子项目进度延误、项目资源不足、项目交付物质量不过关等因素造成项目的整体延误等等。 项目案例信息&…

GoogLeNet 与 Inception

本篇主要介绍GoogLeNet,其被改进并应用在了YOLOV1目标检测算法中。 GoogLeNet是google推出的基于Inception模块的深度神经网络模型,在2014年的ImageNet竞赛中夺得了冠军,在随后的两年中一直在改进,形成了Inception V2、Inception V3、Incepti…

Java 将PDF转为Word

众所周知,PDF文档除了具有较强稳定性和兼容性外, 还具有较强的安全性,在工作中可以有效避免别人无意中对文档内容进行修改。但与此同时,也妨碍了对文档的正常修改。这时我们可以将PDF转为Word文档进行修改或再编辑。使用软件将 PDF 文档转换为…

Spring事务,浅谈!

目录 一、EnableTransactionManagement工作原理 二、Spring事务基本执行原理 三、Spring事务详细执行流程 四、Spring事务传播机制 五、Spring事务传播机制分类 六、Spring事务强制回滚 七、TransactionSynchronization 一、EnableTransactionManagement工作原理 开启Spr…

在C++中,为什么部分程序员喜欢在循环中写‘++i’而不是‘i++’?

自入行以来,无论是查阅资料、技术博客亦或是同事间的技术交流,都有一个共识:在循环的时候,务必使用前置操作符,因为其性能优于后置操作符,久而久之,这个就像一个不成文的规定,大家都在遵循&…

C++异常介绍

目录 一.异常 1.1C异常概念 1.2异常的使用 1.3异常和栈帧,重新抛出 二.异常体系 2.1自定义异常体系 2.2C标准库的异常体系 2.3异常规范 3.异常的优缺点 3.1优点 3.2缺点 一.异常 1.1C异常概念 语言传统的处理错误的方式: 1. 终止程序,如assert…

浮点类型的比较

浮点类型的比较一.浮点数精度的损失二.浮点数的比较1.方法一2.方法二3.方法三:系统方案一.浮点数精度的损失 关于浮点数的比较就不得不提到浮点数在内存中的存储,但这里篇幅太大,故我将其放在另一篇博客里,(如果不了解…

laravel对于百万级别数据导出的一些经验

业务上的需求,我们开发的供应链系统某些业务表也陆续突破了百万级别。 原先使用 \Maatwebsite\Excel 插件导出的效率越来越慢,5w条数据导出基本要达到20min,甚至于30w数据导出基本上都超时。 为了解决这个问题,多种尝试&#xf…

AI 让观众成为 3D 版《老友记》的导演了?

《老友记》上线 3D 版了? 允许用户旋转镜头,且从近景切换到全景观看故事? 今年出炉的 3D 方向 AI 项目 SitCom3D,能够自动补齐《老友记》原剧中的三维拍摄空间,用户可以选择主视图、侧视图等不同角度欣赏剧集。镜头的…

[ vulhub漏洞复现篇 ] solr 远程命令执行 (CVE-2019-17558)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

优秀的内部知识库对企业的重要性

我们都知道在客户服务方面,选择正确的知识库软件的重要性。但我们经常忘记的是,我们的员工也是我们的客户。根据盖洛普公司最近的研究,世界正在经历一场员工参与危机。只有大约三分之一的美国员工在工作中具有参与感,而在全球范围…

一文读懂Docker、K8s

目标: docker原理以及在运维工作的地位和作用,运维工作进化论,docker、微服务、k8s的联系、devops和docker的关系,docker的前世今生容器、镜像和仓库、容器和虚拟化,优势和劣势,底层的核心容器除了docker还…

什么是项目管理软件,能带来哪些作用?

在这个信息化时代,企业的项目管理除了需要一位出色的项目管理者外,还需要借助项目管理软件来对项目进行全面管理。因为如今的项目需求多样化,内容也愈加丰富,传统的项目管理方式已经难以满足,所以很多项目管理软件也应…

[附源码]JAVA毕业设计小型医院药品及门诊管理(系统+LW)

[附源码]JAVA毕业设计小型医院药品及门诊管理(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项…

CMake中add_subdirectory的使用

CMake中的add_subdirectory命令用于将子目录添加到构建,其格式如下: add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL] [SYSTEM]) source_dir指定源CMakeLists.txt和代码文件所在的目录。如果它是相对路径,则将相对于当前目录(…

毕业设计 - java web 酒店管理系统的设计与实现【源码+论文】

文章目录前言一、项目设计1. 模块设计总体设计具体模块数据库部分设计2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 优秀的毕业设计项目: 酒店管理系统的设计与实现 源码获取方式: https://gitee.com/sinonfin/L-javaWebSha/tree/master 一、项目设计 1. 模…

FreeRTOS任务切换过程深层解析

FreeRTOS 系统的任务切换最终都是在 PendSV 中断服务函数中完成的,uCOS 也是在 PendSV 中断中完成任务切换的。 【为什么用PendSV异常来做任务切换】 PendSV 可以像普通中断一样被 Pending(往 NVIC 的 PendSV 的 Pend 寄存器写 1)&#xff…