当前位置: 首页 > news >正文

selenium (自动化概念 测试环境配置)

什么是自动化测试

自动化测试介绍

自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统.
预设条件包括正常和异常,最后评估运行结果。

自动化测试,就是将人为驱动的测试行为转化为机器执行的过程。
【机器 代替 人工】

自动化测试包括UI自动化,接口自动化,单元测试自动化。
按照这个金字塔模型来进行自动化测试规划,可以产生最佳的自动话测试产出投入比(ROI),可以用较少的投入获得很好的收益。

单元测试:

最大的投入应该在单元测试上,单元测试运行的频率也更加高。
不过,单元测试在 开发阶段就可以做,而且一般都是由开发人员来测试。
因为方便开发人员观察代码运行的结果,从而及时修正。
所以说,一般单元测试 开发人员很有可能就顺手做了。
当然,也不排除测试人员来做的。
更常见的方式:开发人员 协助测试人员 进行单元测试。

因为代码不是测试人员写的,不知道某块代码对应的是哪个功能。
所以,一般是需要开发人员来协助的。

接口自动化

接口测试就是API测试,相对于UI自动化,API自动化更加容易实现,执行起来也更稳定。
接口自动化的有以下特点:

1、可在产品前期,接口完成后介入
2、用例维护量小
3、适合接口变动较小,界面变动频繁的项目


常见的接口自动化测试工具有,RobotFramework(RF框架),JMeter,SoupUI,TestNG+HttpClient,Postman【推荐使用】等。

UI自动化

虽然测试金字塔告诉我们尽量多做API层的自动化测试,但是UI层的自动化测试更加贴近用户的需求和软件系统的实际业务。
并且有时候我们不得不进行UI层的测试。

UI自动化测试是根据 界面元素,对元素进行操作,模拟用户的使用,编写自动化脚本,进行测试。

UI自动化的特点:
1、用例维护量大【缺点】
2、页面相关性强,必须在后期项目页面开发完成后介入
3、UI测试适合与界面变动较小的项目
4、可以支持繁琐复杂,手工不易操作,反复执行的功能测试【优点】

UI自动化测试的好处:

1、降低大型系统的由于变更或者多期开发引起的大量的回归测试的人力投入,这可能是自动化测试最主要的任务,特别是在程序修改比较频繁,效果是非常明显的.

2、自动化测试前期人力投入较多.,但后期进入维护期后,可节省大量人力,而手工测试后期需要增加大量人力用于回归测试

3、减少重复测试的时间,实现快速回归测试

4、创建优良可靠的测试过程,减少人为错误

5、可以运行更多更繁琐的测试

6、可以执行一些手工测试困难 或 不可能进行的测试

7、更好的利用资源【脚本的复用性】

UI层自动化测试框架 - Selenium

UI层的测试框架比较多,比如Windows客户端测试的AutoIT,web测试的selenium以及TestPlant,eggPlant,Robot framework,QTP等。

我们主要以Web UI自动化测试框架Selenium为例进行详细介绍。

selenium有以下优点:

1、免费,也不用再为破解软件而大伤脑筋

2、小巧,对于不同的语言它只是
一个包而已,而QTP 需要下载安装1个多G 的程序。

3、支持多平台:windows、linux、MAC ;支持多浏览器:ie、ff、safari、opera、chrome

4、支持分布式测试用例的执行,可以把测试用例分布到不同的测试机器执行,相当于分 “学习委员发作业” 的功能。

UI自动化测试的适用对象

实施自动化测试的前提条件:
需求变动不频繁、项目周期足够长、自动化测试脚本可重复使用。

适合做自动化的项目:
1、产品型项目
       
 产品型的项目,新版本是在旧版本的基础上进行改进,功能变动不大的项目,但项目的新老功能都必须重复的进行回归测试。回归测试是自动化测试的强项,它能够很好的验证你是否引入了新的缺陷,老的缺陷是否修改过来了。
在某种程度上可以把自动化测试工具叫做回归测试工具。

2、机械并频繁
的测试。每次需要输入相同、大量的一些数据,并且在一个项目中运行的周期比较长。比如兼容性测试。

以下情况的项目不适合做自动化测试:
1、需求变动频繁的项目,自动化
脚本不能重复使用,维护成本太大,性价比低

2、项目周期短
自动化脚本编制完成后使用次数不多,性价比低

3、交互型较强的项目
需要人工干预的项目,自动化无法实施

如何实施自动化测试

单纯的讲,自动化测试的具体实现,应该是包含下面七个过程的。
1、分析:
总体把握系统逻辑,分析出系统的核心体系架构。
2、设计:设计测试用例,测试用例要足够明确和清晰,覆盖面广而精
3、实现:现脚本,有两个要求一是断言,二是合理的运用参数化。
4、执行:执行脚本远远没有我们想象中那么简单。脚本执行过程中的异常需要我们仔细的去分析原因。
5、总结:
测试结果的分析,和测试过程的总结是自动化测试的关键

6、维护:自动化测试脚本的维护是一个难以解决但又必须要解决的问题。 
7、分析:在自动化测试过程中深刻的分析自动化用例的覆盖风险和脚本维护的成本。

自动化测试需要了解的技能

了解被测试系统的基本业务
了解业务的技术框架
懂得功能测试
懂得一种编程语言
懂数据库、操作系统
了解常见的测试框架


selenium介绍

Selenium是web应用中基于UI的自动化测试框架,支持多平台、多浏览器、多语言。

早期的 selenium RC 已经被现在的webDriver所替代,可以简单的理解为 selenium1.0 + webdriver 构成现在的Selenium2.0。
现在我们说起selenium,一般指的是Selenium2.0。
它由Selenium IDE,Webdriver,Selenium Grid组成。
分别做一下介绍:
1,Selenium IDE

Selenium IDE一个用于Selenium测试的完成集成开发环境,可以直接录制在浏览器的用户操作,并且能回放,编辑和调试测试脚本。调试过程中可以逐步进行或调整执行的速度,并且可以在底部浏览日志出错信息。
录制的测试脚本可以以多种语言导出,比如java,C#,Python,Ruby等,方便掌握不同语言的测试人员操作。

2,Webdriver

Selenium RC 在浏览器中运行 JavaScript 应用,会存在环境沙箱问题,而 WebDriver 可以跳出 JavaScript 的沙箱,针对不同的浏览器创建更健壮的,分布式的,跨平台的自动化测试脚本。
基于特定语言(Java,C#,Python,Ruby,Perl,JavaScript等)绑定来驱动浏览器对Web元素进行操作和验证。

webdriver的工作原理:

启动浏览器后,selenium-webdriver会将目标浏览器绑定到特定的端口,启动后的浏览器则作为webdriver 的 remote serve【远程服务器】。

客户端【也就是测试脚本】,借助ComandExecutor发送HTTP请求给sever端。【通信协议:The WebDriver Wire Protocol,在HTTP request的body中,会以WebDriver Wire协议规定的JSON格式的字符串来告诉Selenium我们希望浏览器接下来做什么事情】

Sever端需要依赖原生的浏览器组件,转化Web Service的命令为浏览器native【本地的 / 原生】的调用来完成操作。

浏览器就好比是出租车,乘客的指令较好比是脚本, webdriver 就好比 司机。
司机( webdriver)把乘客的“需求(脚本)”,“告诉 / 翻译(操作)” 出租车(浏览器)实现它。

3,selenium Grid

        selenium Grid是一个服务器,提供对浏览器实例访问的服务器列表,管理各个节点的注册和状态信息。可以实现在同一时刻不同服务器上执行不同的测试脚本。 


下载驱动 Chrome driver

安装谷歌浏览器【过程省略】,并且下载驱动 Chrome driver
下载地址:CNPM Binaries Mirror
下载解压,你会得到一个chromedriver.exe 文件 
只有安装了对应的driver才能运行对应的浏览器

禁止 Chrome 浏览器更新

selenium + Java 环境搭建

1、下载谷歌Chrome浏览器 And ChromeDriver

这个操作前面已经做了。记住 驱动的版本 一定要和 浏览器的版本一致,并且一定要进制 浏览器的自动更新服务!!!
不然,浏览器每更新一次,我们都需要去下载对应版本的驱动。

不同之处来了!!
我们需要将驱动,再拷贝一份放到 jdk 的 bin 的目录下。

2、下载selenium

这个我们直接在项目中使用 Maven 引入 就行了,无需关注!

那么驱动在其中又担当什么角色呢?
既然能够接收请求的,驱动应该是一个服务器,那么就需要知道它的IP 和 端口号,才能定位它。
下面我们来打开 Chrome 浏览器的驱动,看一下究竟是否像我们想象的那样。

通过上述的分析,我们确认是 驱动就是一个服务器。

接着我们继续分析:
当我们的脚本的代码生成一个HTTP请求 发送到 浏览器驱动(WebDrive)的时候,WebDrive 会对这个请求进行解析,然后再发送给我们的浏览器,让我们的浏览器以原生的方式去执行前端的一个命令。

在浏览器执行完成之后,会把执行的结果返回 驱动,驱动再把这个结果传递给我们的脚本代码

相关文章:

selenium (自动化概念 测试环境配置)

什么是自动化测试 自动化测试介绍 自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统. 预设条件包括正常和异常,最后评估运行结果。   自动化测试,就是将人为驱动的测试行为转化为机器执行的过程。 【机器 代替 人工】 自动化…...

Mybatis-Plus(企业实际开发应用)

一、Mybatis-Plus简介 MyBatis-Plus是MyBatis框架的一个增强工具,可以简化持久层代码开发MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 官网&a…...

Spring Web MVC入门

一:了解Spring Web MVC (1)关于Java开发 🌟Java开发大多数场景是业务开发 比如说京东的业务就是电商卖货、今日头条的业务就推送新闻;快手的业务就是短视频推荐 (2)Spring Web MVC的简单理解 💗Spring Web MVC:如何使…...

【C++】mapset的底层结构 -- AVL树(高度平衡二叉搜索树)

前面我们对 map / multimap / set / multiset 进行了简单的介绍,可以发现,这几个容器有个共同点是:其底层都是按照二叉搜索树来实现的。 但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索…...

吴恩达《机器学习》1-4:无监督学习

一、无监督学习 无监督学习就像你拿到一堆未分类的东西,没有标签告诉你它们是什么,然后你的任务是自己找出它们之间的关系或者分成不同的组,而不依赖于任何人给你关于这些东西的指导。 以聚类为例,无监督学习算法可以将数据点分成…...

一个简单的注册页面,如有错误请指正(2.css)

这段CSS代码定义了页面的样式,让我逐个解释其功能: 1. * {}:通配符选择器,用于将页面中的所有元素设置统一的样式。这里将margins和paddings设置为0,以去除默认的边距。 2. div img {}:选择页面中所有div…...

【Unity精华一记】特殊文件夹

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…...

Node.js中的单线程服务器

为了解决多线程服务器在高并发的I/O密集型应用中的不足,同时避免早期简单单线程服务器的性能障碍,Node.js采用了基于"事件循环"的非阻塞式单线程模型,实现了如下两个目标: (1)保证每个请求都可以…...

如何删除数组中的某个元素?

如何删除数组中的某个元素? 例:给你一个数组 nums 和一个值 val,你需要移除所有数值等于 val 的元素,并返回移除后数组的新长度。 三种方法 1.元素前移(时间复杂度:O(N^2),空间复杂度&#x…...

Apache ActiveMQ RCE漏洞复现(CNVD-2023-69477)

0x01 产品简介 ActiveMQ是一个开源的消息代理和集成模式服务器,它支持Java消息服务(JMS) API。它是Apache Software Foundation下的一个项目,用于实现消息中间件,帮助不同的应用程序或系统之间进行通信。 0x02 漏洞概述 Apache ActiveMQ 中存…...

【BUG】Nginx转发失败解决方案

最近在做项目的时候出现了一个问题,琢磨了好久,来浅浅记录一下。 这个项目后端使用的是gateway网关和nacos实现动态的路由,前端使用nginx来管理前端资源,大体流程:浏览器发起请求,经过nginx代理&#xff0c…...

综合OA管理系统源码 OA系统源码

综合OA管理系统源码 OA系统源码 功能介绍: 编号:LQ10 一:系统管理 系统配置,功能模块,功能节点,权限角色,操作日志,备份数据,还原数据 二:基础数据 审批…...

9-MySQL提高数据管理效率(分库分表实践)

MySQL提高数据管理效率(分库分表实践) 在当今的互联网时代,随着业务规模的不断扩大,数据量也呈现出爆炸性的增长。如何有效地管理和存储这些数据,以及提高数据库的性能和可扩展性,成为了一个迫切需要解决的…...

经典卷积神经网络 - NIN

网络中的网络,NIN。 AlexNet和VGG都是先由卷积层构成的模块充分抽取空间特征,再由全连接层构成的模块来输出分类结果。但是其中的全连接层的参数量过于巨大,因此NiN提出用1*1卷积代替全连接层,串联多个由卷积层和“全连接”层构成…...

leetcode_2558 从数量最多的堆取走礼物

1. 题意 给定一个数组,每次从中取走最大的数,返回开根号向下取整送入堆中,最后计算总和。 从数量最多的堆取走礼物 2. 题解 直接用堆模拟即可 2.1 我的代码 用了额外的空间O( n ) priority_queue会自动调用make_heap() 、pop_heap() c…...

01. 嵌入式与人工智能是如何结合的?

CPU是Arm A57的 GPU是128cuda核 一.小车跟踪的需求和设计方法 比如有一个小车跟踪的项目。 需求是:小车识别出罪犯,然后去跟踪他。方法:摄像头采集到人之后传入到开发板,内部做一下识别,然后控制小车去跟随。在人工智…...

vue3.0运行npm run dev 报错Cannot find module node:url

vue3.0运行npm run dev 报错Cannot find module 问题背景 近期用vue3.0写项目,npm init vuelatest —> npm install 都正常,npm run dev的时候报错如下: failed to load config from F:\code\testVue\vue-demo\vite.config.js error when starting…...

26. 删除排序数组中的重复项、Leetcode的Python实现

博客主页:🏆看看是李XX还是李歘歘 🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗点关注不迷路,总有一些📖知识点📖是你想要的💗 ⛽️今…...

荣耀推送服务消息分类标准

前言 为了提升终端用户的推送体验、营造良好可持续的通知生态,荣耀推送服务将对推送消息进行分类管理。 消息分类 定义 荣耀推送服务将根据应用类型、消息内容和消息发送场景,将推送消息分成服务通讯和资讯营销两大类别。 服务通讯类,包…...

[数据结构]-二叉搜索树

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、二叉搜…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

golang循环变量捕获问题​​

在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下: 问题背景 看这个代码片段: fo…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...