详解自动化测试框架特点和原理

【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程,一周学完让你面试通过率提高90%!(自动化测试)

今天捡一些比较典型的工具型自动化框架来介绍,主要围绕历史、特点和原理来讲解,至于使用教程,网络上已经有很多资料,这里就不加以展开。

Quick Test Professional

图片

如果时光倒流二十年,QTP 在自动化领域绝对是王者一般的存在。它诞生于 03 年,由 Mercury Interactive 发布,前身是 Astra Quick Test,和同出一门的 LR(LoadRunner)并称当时测试工具界的倚天剑和屠龙刀。08 年卖给了惠普,17 年又卖给了 MicroFocus,现在的名字叫 UFT(Unified Functional Testing)。

Mercury 早在 95 年还做过另一款自动化工具叫 WinRunner,使用比较流行的录制回放模式,曾经也是风靡一时。但它的生命周期却不算很长,数年之后即被同门兄弟 QTP 超越,渐渐退出历史舞台。

之所以说 QTP 是一个标杆性的产品,是因为它在很多方面提供了较为先进的方法,对后来的其他自动化工具产生了很强的影响,特别是关键字驱动测试,至今仍然是自动化测试领域的一个重要设计方式。

QTP 使用 VB 做为脚本语言,学习成本比较低。通过加装各种插件,可以支持多平台的自动化测试,可以实现对 Excel、XML 等常用文件的操作。这种时代适应性和易用性,可能是 Mercury 为什么在有 WinRunner 之后,还要开发 QTP 的原因。

但是随着开源风潮的到来,各种免费的自动化工具越来越成熟,QTP 的没落似乎也成为了一种必然。B/S 几乎已经是 Selenium 的天下,C/S 虽说还有它的一席之地,不过缺乏创新的 QTP,前景恐怕也是不容乐观。

Selenium

图片

如果说 QTP 是最具代表性的商业自动化工具,那么 Selenium 无疑是最具代表性的开源自动化工具。Selenium 这个名字其实也在暗暗“致敬” QTP,因为 Mercury 的意思是汞,Selenium 的意思是硒,而硒是汞的解毒品。不得不说老外玩起梗来,也是很有内涵的。

Selenium 的出生比 QTP 略晚。04 年的时候,ThoughtsWorks 的程序员 Jason Huggins 出于对回归测试的需要,使用JavaScript 写了一个自动化测试工具叫 JavascriptTestRunner。后来同事们用着感觉都不错,就正式改名为 Selenium Core 并开源。

由于浏览器的同源策略,当时 Selenium Core 还存在着诸多问题。所谓的同源策略,是浏览器本身的一个“规则”,粗略地说就是其他来源的 JS 脚本,不能对主站文档进行操作。因此早期的 Selenium Core,很难被大范围地应用,为了解决这个问题,又有一位程序员发展出了 Selenium RC。

RC(Remote Contol)的思路是:即然同源策略无法改变,那想办法变成“同源”就行了。网上的架构图画得比较复杂,我们可以这么简单理解:RC 做为一个中间代理,向目标发起请求,获得页面内容后,注入 Selenium Core,再一起返回给调用方。这样对于调用方而言,就拥有一个附带“同源”脚本的页面文档了。

再后来,随着 Selenium 群体的不断壮大,Selenium IDE 和 Selenium Grid 也先后加入进来,弥补了录制回放能力和分布式测试方面的空白。Selenium RC + Selenium IDE + Selenium Grid 这一整套东西,就是 Selenium 1.0。

代理的方式虽说可行,但整个过程实在复杂,稳定性和速度都不是很理想。好在 WebDriver 的加入,大大简化了这个过程。由 Selenium 主持的 WebDriver Wire Protocal,提供了一套客户端和浏览器的通信标准,各个浏览器基于协议分别实现自己的 API,比如 ChromeDriver,FirefoxDriver 等。由于它们是官方提供的接口,自然就没有同源策略的问题。

但是正如 JS 和 CSS 标准一样,WebDriver 无线协议也只是字面规范,实际上各个浏览器的 Driver 实现,多少会存在一些差异。所以 Selenium 在其中也承担了一定的“兼容”角色,尽可能(有些还做不到)地隐藏这样差异,并向用户提供统一的调用方式。Selenium 1.0 + WebDriver,就是 Selenium 2.0。

有了 WebDriver 之后,Selenium 也不再需要通过代理的方式进行调用,但出于对历史兼容的需要,2.0 并没有抛弃 RC,直到 3.0 才彻底移除。所以 Selenium 2.0 - RC + 一些优化,就是 Selenium 3.0。

现如今,Selenium 也迎来了 4.0 的时代,在标准化、IDE、Grid 等多个方面都有新的变化。Selenium 当下仍然保持着强大的生命力和社区群体,在可预见的未来内,它还会是较为主流的自动化工具框架之一。

Appium

图片

Appium 是 Selenium 的好兄弟,一个是移动端自动化测试的利器,一个是网页端自动化测试的利器。肯定会有人好奇它们的关系到底是什么,为何都叫 xxium,又为何都支持 WebDriver。接下来就讲讲这个神奇的故事。

这次的主人公是 Dan Cuellar,11 年加入 Zoosk 做 Test Manager,在职期间研究了 iOS 的自动化测试,因不满足于 Apple 自带的 UIAutomation 方案,自行研发了一款自动化工具叫 iOSAuto。iOSAuto 使用 C# 编写测试代码,语法风格上大量借鉴 Selenium,它就是 Appium 的前身。

12 年的时候,Dan 参加了 Selenium 大会,对外展示了这款 iOSAuto 工具,引起了参会者的兴趣,并建议他晚些时候再进行一次演讲,以便具体解释这款工具的运作方式。意外的是,Dan 第二天的演讲遇到了技术故障,只讲了五分钟就结束了,因此 iOSAuto 在当时并没能引起较大的反响。

然而在 4 个月之后,Jason(就是最早做 Selenium 的那哥们,大会主持人)找到了 Dan,原来他在 Sauce Labs 为客户提供 iOS 测试支持,想起了 Dan 演讲过的 iOSAuto。两人在酒吧里见面,Dan 展示了 iOSAuto 的源码,Jason 鼓励 Dan 将代码开源,并修改语言以便吸引更多的潜在贡献者。

同年 9 月,Dan 上传了基于 Python 的新版本,而 Jason 通过 HTTP 实现了 WebDriver Wire Protocal,使得 iOSAuto 可以直接使用 Selenium WebDriver。Jason 认为它应该在 11 月的移动测试峰会上展示,但要先确定一个新名字。两人讨论之后决定命名为 Appium(Application + Selenium,即 APP 版的 Selenium)。

13 年 1 月,Sauce Labs 决定全力支持 Appium,团队认为 Appium 需要一次重构,最终选择了 Node.js 做为框架。新版本的 Appium 在 13 年的 Google 测试大会上首次亮相,后来又发布了 Android 和 Selendroid 支持,直到 14 年正式发布 Appium 1.0。

与 Selenium 一样,Appium 也要解决目标操作权限的问题。它采用的办法是向终端安装一个本地执行器,在 Android 上叫 bootstrap.jar,在 iOS 上叫 bootstrap.js,它们分别与 UIAutomator(2) 以及 UIAutomation 进行通信,以实现对终端设备的操作。

我们可以近似等价地理解为:UIAutomator/UIAutomation = WebDriver,但由于移动端的特殊性,Appium 天生就只能以 Server/Client 的模式来运行,这和 Selenium 的情况有所不同。Selenium 在只需要进行本地浏览器测试的时候,可以没有 Selenium Server,从这方面来看,Appium 似乎比 Selenium 更加“云原生”。

Appium 在 21 年发布了它的 2.0 版本,最核心的改变是将 Appium 视为一个生态系统而非单一的项目,允许更多开发者自行研发驱动和插件。同时 Appium 也是 OPENJS 基金会的重要项目,这种开放性的特点,也许是 Appium 为什么具有如此旺盛生命力的原因。

未来的工具型框架

由于篇幅的关系,其他工具型自动化框架就不多介绍了。现有的测试方案大多依托于本地工具和团队内部的二次开发,但在不久的未来,我相信“上云”必然是工具型框架要走的道路。

原因有这么几点:首先,云服务在国内已经很成熟,基础条件上已经具备这样的可能性;其次,云能够提供成本更低的解决方案,比如设备成本、管理成本、人员成本;再者,云在专项领域,能够为中小企业设计更加专业的服务,比如专项性能测试、安全测试等。

还有一个重要的原因是,随着智能化时代的到来,测试智能化所需的专业能力和机器算力,已经不是一般企业能够负担得了的,所以 AI 的普及会进一步加速这个时间节点的到来。不得不说,时代的变迁,实在是令人感叹。

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们 如果需要可以自行免费领取 【保证100%免费】
在这里插 入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

文件上传之图片马

图片马介绍 图片马&#xff1a;就是在正常图片中插入木马。 图片马的制作 1.我们先创建php木马文件1.php&#xff0c;内容有以下两种方式&#xff1a; <?php eval($_POST[a]); ?> /* 常规一句话木马 */ <?php $aPD9waHAgQGV2YWwoJF9QT1NUWydhJ10pOz8; $myfile…

MYSQL07高级_Hash结构、平衡二叉树、B树、B+树介绍

文章目录 ①. 全表遍历②. Hash结构③. 平衡二叉搜索树(AVL)④. B树⑤. B树⑥. 时间复杂度 选择的合理性 磁盘的I/O操作次数对索引的使用效率至关重要查找都是索引操作,一般来说索引非常大,尤其是关系型数据库,当数据量比较大的时候,索引的大小有可能几个G甚至更多,为了减少索引…

VMwareWorkstation17.0虚拟机安装搭建PcDos2000虚拟机(完整图文详细步骤教程)

VMwareWorkstation17.0虚拟机安装搭建PcDos2000虚拟机&#xff08;完整图文详细步骤教程&#xff09; 一、PcDos20001.PcDos2000简介2.PcDos2000下载 二、创建PcDos2000虚拟机1.新建虚拟机2.类型配置3.类型配置4.选择版本5.命名、存位置6.磁盘容量7.调整虚拟配置7.1 调整虚拟配…

pytest多重断言插件-pytest-assume

最近准备废弃之前用metersphere做的接口自动化&#xff0c;转战pytest了&#xff0c;先来分享下最近接触到的一个插件&#xff1a;pytest-assume。 在使用这个插件之前&#xff0c;如果一个用例里面有多个断言的话&#xff0c;前面的断言失败了&#xff0c;就不会去执行后面的断…

flutter打包命令

apk Build and release an Android app | FlutterHow to prepare for and release an Android app to the Play store.https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration flutter build apk --split-per-abi 如果不同cpu架构不打到同一个…

EI论文部分复现:含VSC-HVDC的交直流系统内点法最优潮流计算Simulink模型!

适用平台&#xff1a;MatlabSimulink&#xff1b;复现内容&#xff1a;VSC-HVDC模型 简介 高压直流传输系统主要包括换流站、输电线路和终端设备&#xff0c;其中换流站起着关键作用&#xff0c;他可以实现交流整流和直流逆变。常见的HVDC系统有全桥式、半桥式和两水平VSC等。…

基于springboot+vue的社区智慧养老监护管理平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Android logcat系统

一 .logcat命令介绍 android log系统: logcat介绍 : logcat是android中的一个命令行工具&#xff0c;可以用于得到程序的log信息. 二.C/Clogcat访问接口 Android系统中的C/C日志接口是通过宏来使用的。在system/core/include/android/log.h定义了日志的级别&#xff1a; /…

Linkedln领英账号限制问题|通过代理IP安全使用Linkedln

LinkedIn是跨境外贸必备的拓客工具&#xff0c;世界各地的许多专业人士都使用领英来作为发布和共享内容的主要工具&#xff0c;这使得它成为跨境出海必备的渠道工具。 但是不少做外贸的朋友都知道&#xff0c;领英账号很容易遭遇限制封禁&#xff0c;但如果善用工具&#xff0…

【数据集】ENSO-基于NOAA发布ONI值

NOAA-ONI&#xff08;Oceanic Nino Index&#xff09; ENSO划分标准&#xff1a; 当某ENSO年的指数值连续6个月大于0.5 ℃时&#xff0c;将该年归类为El Nio年当低于-0.5℃时&#xff0c;将其归类为La Nia年否则&#xff0c;年份为中性。 数据下载 注意&#xff1a;此页面将…

改造muduo,不依赖boost,用C++11重构

组件的实现 1. 序 1.1. 总述 muduo库是基于多Reactor-多线程模型实现的TCP网络编程库&#xff0c;性能良好。如libev作者&#xff1a;“One loop per thread is usually a good model”&#xff0c;muduo库的作者陈硕在其《Linux多线程服务端编程》中也力荐这种“One loop pe…

每日五道java面试题之mysql数据库篇(四)

目录&#xff1a; 第一题&#xff1a; Hash索引和B树所有有什么区别或者说优劣呢?第二题&#xff1a;数据库为什么使用B树而不是B树&#xff1f;第三题&#xff1a;B树在满足聚簇索引和覆盖索引的时候不需要回表查询数据&#xff1f;第四题&#xff1a;什么是聚簇索引&#xf…

浅谈WPF之Binding数据校验和类型转换

在WPF开发中&#xff0c;Binding实现了数据在Source和Target之间的传递和流通&#xff0c;就像现实生活中的一条条道路&#xff0c;建立起了城镇与城镇之间的衔接&#xff0c;而数据校验和类型转换&#xff0c;就像高速公路之间的收费站和安检站。那在WPF开发中&#xff0c;如何…

Redis核心数据结构之SDS(一)

数据结构与对象 简单动态字符串 概述 Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组&#xff0c;简称C字符串)&#xff0c;而是自己构建了一种名为简单动态字符串(Simple Dynamic String, SDS)的后向类型&#xff0c;并将SDS用作Redis的默认字符串表示。在…

数据库学习案例20240304-mysql数据库案例总结(碎片,统计信息)

1 表中的碎片 在InnoDB中删除行的时候&#xff0c;这些行只是被标记为“已删除”&#xff0c;而不是真正从物理存储上进行了删除&#xff0c;因而存储空间也没有真正被释放回收。InnoDB的Purge线程会异步地来清理这些没用的索引键和行。但是依然没有把这些释放出来的空间还给操…

基于SSM的农业电商服务系统(农产品销售管理系统)(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的农业电商服务系统&#xff08;农产品销售管理系统&#xff09;&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#…

五、软考-系统架构设计师笔记-信息安全技术基础知识

信息安全技术基础知识 1、信息安全基础知识概述 信息安全的概念 信息安全包括 5 个基本要素&#xff1a; 机密性:确保信息不暴露给未授权的实体或进程。完整性:只有得到允许的人才能修改数据&#xff0c;并且能够判别出数据是否已被篡改。可用性:得到授权的实体在需要时可以…

SpringBoot源码解读与原理分析(四十)基于jar/war包的运行机制

文章目录 前言第14章 运行SpringBoot应用14.1 部署打包的两种方式14.1.1 以可独立运行jar包的方式14.1.2 以war包的方式 14.2 基于jar包的独立运行机制14.2.1 可独立运行jar包的相关知识14.2.2 SpringBoot的可独立运行jar包结构14.2.3 JarLauncher的设计及工作原理14.2.3.1 Jar…

06、MongoDB -- MongoDB 基本用法(删除文档、查询文档、查询运算符)

目录 MongoDB 基本用法演示前提&#xff1a;登录单机模式的 mongodb 服务器命令登录【admin】数据库的 mongodb 客户端命令登录【test】数据库的 mongodb 客户端命令 删除文档语法格式两个变体版本&#xff1a;1、remove&#xff1a;根据【name】字段删除一条文档2、deleteOne&…

代码工具APEX的入门使用(未包含安装)

第一次使用APEX是2019年&#xff0c;这个技术成名已久只是我了解的比较晚。请看Oracle ACE的网站&#xff0c;这就是用APEX做的。实际上有一次我看O记的人操作他们的办公流程&#xff0c;都是用APEX做的。 那一年&#xff0c;我用APEX做了一个CMDB的管理系统。那时候还没有流行…