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

自动化测试概念篇

目录

一、自动化

1.1 自动化概念

1.2 自动化分类

1.3 自动化测试金字塔

二、web自动化测试

2.1 驱动

2.2 安装驱动管理

三、selenium

3.1 ⼀个简单的web自动化示例

3.2 selenium+驱动+浏览器的工作原理


一、自动化

1.1 自动化概念

在生活中:
  • 自动洒水机,主要通上水就可以自动化洒水并且可以自动的旋转;
  • 自动洗手液,免去了手动挤压可以自动感应出洗手液;
  • 超市自动闸门,不需要手动的开门关门;
生活中的自动化案例有效的减少了人力的消耗,同时也提高了生活的质量。
软件中的自动化测试也是如此,通过自动化测试有效减少人力的消耗的同时,也提高了测试的质量和效率。
自动化的主要目的就是用来进行回归测试。
回归测试是指在软件代码、使用环境或产品需求发生改变时,通过重新执行已经通过的测试用例,以检测产品中是否出现了新的问题或错误的测试过程。这种测试类型主要适用于软件开发周期中的迭代式开发过程和升级维护过程中。
自动化测试能够取代人工测试吗?
自动化测试不一定比人工测试更能保障系统的可靠性,自动化测试是测试人员手工编写,后续如果有功能的变更,自动化也需要进行不定期的维护和更新。
自动化测试可以 大幅度 降低工作量?
错误。或许表达为自动化测试在一定程度上可以降低工作量更加合理。

1.2 自动化分类

1. 接口自动化测试

2. UI/界面自动化: ①客户端自动化测试 ;② web自动化测试

1.3 自动化测试金字塔

理想的自动化测试金字塔表达了自动化测试的理想情况,利用较少的时间和精力在单元测试上就能够发现更多有效的问题。

往往实际开发中,自动化是“冰淇淋蛋筒反模式”。手工测试才能发现更多的问题,投入的精力也更大。

二、web自动化测试

web自动化测试就是 模拟人在浏览器上的操作行为,自动的打开浏览器,访问某个页面,并进行一系列的搜索和验证等行为。

2.1 驱动

对于自动化程序来说,程序如何才能打开浏览器并执行预期的操作流程呢?那么就需要驱动。程序想要打开web浏览器就需要安装web驱动(即WebDriver),WebDriver 以本地化方式驱动浏览器。

2.2 安装驱动管理

WebDriverManager是一个开源Java库,以完全自动化的方式对Selenium WebDriver所需的驱动程序(如chromedriver、geckodriver、msedgedriver等)进行管理(即下载、设置和维护),自版本5起,WebDriverManager还提供了其他相关功能,如发现本地系统中安装的浏览器的能力,构建WebDriver对象(如ChromeDriver、FirefoxDriver、EdgeDriver等)
<dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>5.8.0</version><scope>test</scope>
</dependency>

三、selenium

selenium是一个web自动化测试工具,selenium中提供了丰富的方法供给使用者进行web自动化测
试。

3.1 一个简单的web自动化示例

1. 安装selenium库

<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.0.0</version>
</dependency>

2. 使用selenium编写代码

public void example_test()
{//驱动程序管理的⾃动化WebDriverManager.chromedriver().setup();ChromeOptions options = new ChromeOptions();//允许访问所有链接options.addArguments("--remote-allow-origins=*");//1、打开浏览器WebDriver driver = new ChromeDriver(options);//2.输⼊百度⽹址:https://www.baidu.comdriver.get("https://www.baidu.com");//3、找到输⼊框并输⼊“迪丽热巴”driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("迪丽热巴");//4、找到“百度⼀下”按钮并点击driver.findElement(By.xpath("//*[@id=\"su\"]")).click();//5、关闭浏览器driver.quit();}
public class runCase {public static void main(String[] args) throws InterruptedException {example_demo test = new example_demo();test.example_test();}
}

 运行测试代码之后,测试完成,也可以在代码中添加sleep,以便更好的观察,更改代码为:

//测试百度搜索关键词:迪丽热巴public void example_test() throws InterruptedException {//驱动程序管理的⾃动化WebDriverManager.chromedriver().setup();//增加浏览器配置:创建驱动对象要强制指定运行访问所有的链接ChromeOptions options = new ChromeOptions();//允许访问所有链接options.addArguments("--remote-allow-origins=*");//1、打开浏览器WebDriver driver = new ChromeDriver(options);Thread.sleep(3000);//2.输⼊百度⽹址:https://www.baidu.comdriver.get("https://www.baidu.com");Thread.sleep(3000);//3、找到输⼊框并输⼊“迪丽热巴”driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("迪丽热巴");Thread.sleep(3000);//4、找到“百度⼀下”按钮并点击driver.findElement(By.xpath("//*[@id=\"su\"]")).click();Thread.sleep(3000);//5、关闭浏览器driver.quit();}

3.2 selenium+驱动+浏览器的工作原理

实现web自动化测试需要浏览器、浏览器驱动、selenium自动化脚本。

  1. 通过selenium编写的自动化脚本代码中在ChromeDriverService中创建一个服务;
  2. 通过创建好的服务打开webdriver,安装在本地的驱动服务IP为localhost,PORT为 ChromeDriverService中创建的端口号,该服务地址为selenium向webdriver发送请求的服务地址;
  3. 向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,打开浏览器,并获得SessionId,如果再次对浏览器操作需携带此id;
  4. 打开浏览器后,所有的selenium的操作(访问地址,查找元素等)均通过创建好的服务链接到 webdriver,然后使用execute发送请求;
  5. 驱动收到请求并对请求进行解析,转成浏览器能够解析的脚本并发送给浏览器,浏览器通过请求的内容执行对应动作;
  6. 浏览器再把执行的动作结果通过浏览器驱动程序返回给测试脚本。

相关文章:

自动化测试概念篇

目录 一、自动化 1.1 自动化概念 1.2 自动化分类 1.3 自动化测试金字塔 二、web自动化测试 2.1 驱动 2.2 安装驱动管理 三、selenium 3.1 ⼀个简单的web自动化示例 3.2 selenium驱动浏览器的工作原理 一、自动化 1.1 自动化概念 在生活中&#xff1a; 自动洒水机&am…...

Mojo值的生命周期(Life of a value)详解

到目前为止,我们已经解释了 Mojo 如何允许您使用 Mojo 的所有权模型构建内存安全的高性能代码而无需手动管理内存。但是,Mojo 是为 系统编程而设计的,这通常需要对自定义数据类型进行手动内存管理。因此,Mojo 允许您根据需要执行此操作。需要明确的是,Mojo 没有引用计数器…...

java对接kimi详细说明,附完整项目

需求&#xff1a; 使用java封装kimi接口为http接口&#xff0c;并把调用kimi时的传参和返回数据&#xff0c;保存到mysql数据库中 自己记录一下&#xff0c;以做备忘。 具体步骤如下&#xff1a; 1.申请apiKey 访问&#xff1a;Moonshot AI - 开放平台使用手机号手机号验证…...

鸿蒙媒体开发【基于AVCodec能力的视频编解码】音频和视频

基于AVCodec能力的视频编解码 介绍 本实例基于AVCodec能力&#xff0c;提供基于视频编解码的视频播放和录制的功能。 视频播放的主要流程是将视频文件通过解封装->解码->送显/播放。视频录制的主要流程是相机采集->编码->封装成mp4文件。 播放支持的原子能力规…...

django集成pytest进行自动化单元测试实战

文章目录 一、引入pytest相关的包二、配置pytest1、将django的配置区分测试环境、开发环境和生产环境2、配置pytest 三、编写测试用例1、业务测试2、接口测试 四、进行测试 在Django项目中集成Pytest进行单元测试可以提高测试的灵活性和效率&#xff0c;相比于Django自带的测试…...

48天笔试训练错题——day40

目录 选择题 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 编程题 1. 发邮件 2. 最长上升子序列 选择题 1. DNS 劫持又称域名劫持&#xff0c;是指在劫持的网络范围内拦截域名解析的请求&#xff0c;分析请求的域名&#xff0c;把审查范围以外的请求放行&#xff0c;否则返回…...

LabVIEW在DCS中的优势

DCS&#xff08;Distributed Control System&#xff0c;分布式控制系统&#xff09;是一种用于工业过程控制的自动化系统。它将控制任务分散到多个控制单元中&#xff0c;通过网络连接和协调这些单元来实现对整个过程的监控和控制。DCS通常用于大型工业设施&#xff0c;如化工…...

英特尔:从硅谷创业到全球科技巨头

在科技行业&#xff0c;英特尔不仅是一个品牌&#xff0c;更是一种精神的象征。自1968年成立以来&#xff0c;英特尔经历了从初创企业到全球半导体产业领导者的华丽转变&#xff0c;其发展历程是科技创新与市场战略完美结合的典范。本文将深入探讨英特尔的发展历程&#xff0c;…...

生物计算与纳米技术:交汇前沿的科学领域

在当今科技迅猛发展的时代&#xff0c;生物计算和纳米技术作为前沿科技领域的两个重要方向&#xff0c;正在逐渐融合并带来深远的影响。生物计算涉及使用生物系统进行计算和数据存储&#xff0c;而纳米技术则关注制造极小尺度的电子器件和材料科学。本文将深入探讨这两个领域的…...

C#中栈和队列

在C#中&#xff0c;Stack和Queue是两种不同的集合类型&#xff0c;它们用于实现后进先出&#xff08;LIFO&#xff09;和先进先出&#xff08;FIFO&#xff09;的数据结构。 Stack&#xff08;堆栈&#xff09; Stack是一个后进先出的集合&#xff0c;这意味着最后一个添加到堆…...

技战法丨攻防演练防御——纵深、联动、诱捕(可搬运、可cv)

演习活动经过近几年的发展&#xff0c;攻击方的专业水平已大幅提高&#xff0c;逐渐呈现出隐秘化、APT化的趋势。其利用渗透技术对目标系统做深入探测&#xff0c;不断挖掘防守方网络系统的薄弱环节&#xff0c;这就要求防守方构建立体式纵深防护体系来抵御入侵。同时&#xff…...

1、 window平台opencv下载编译, 基于cmake和QT工具链

1. 环境准备&#xff0c;源码下载 1.1 前置环境 qt 下载安装cmake 安装&#xff0c;可参考&#xff1a; https://blog.csdn.net/qq_51355375/article/details/139186681 1.2 opencv 源码下载 官网地址&#xff1a; https://opencv.org/releases/ 下载源码&#xff1a; 2 …...

C++20三向比较运算符详解

三向比较运算符可以用于确定两个值的大小顺序&#xff0c;也被称为太空飞船操作符。使用单个表达式&#xff0c;它可以告诉一个值是否等于&#xff0c;小于或大于另一个值。 它返回的是类枚举&#xff08;enumeration-like&#xff09;类型&#xff0c;定义在 <compare> …...

监听机制与耗电量

一、监听机制与耗电量的关系 监听机制通常涉及对特定事件、状态或数据的持续监测。在移动设备和嵌入式系统中&#xff0c;这种监听可能由多种组件和传感器实现&#xff0c;如GPS、传感器&#xff08;如加速度计、陀螺仪&#xff09;、网络连接等。监听的频率越高&#xff0c;意…...

C++ //练习 16.29 修改你的Blob类,用你自己的shared_ptr代替标准库中的版本。

C Primer&#xff08;第5版&#xff09; 练习 16.29 练习 16.29 修改你的Blob类&#xff0c;用你自己的shared_ptr代替标准库中的版本。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 template <typename> class BlobP…...

【Mode Management】CanNm处于PBS状态下接收到一帧诊断报文DCM会响应吗

目录 前言 正文 1.CanNm从RSS状态切换到PBS状态行为分析 1.1.CanNm动作 1.2.ComM动作 1.3.DCM动作 1.4 小结 2.CanNM在PBS状态下收到一帧诊断报文行为分析 2.1.DCM动作1 2.2. ComM动作 2.3. DCM动作2 2.3. CanNm动作 2.4 问题 2.5 分析 3.总结 前言 我们知道EC…...

【C++】模版:范式编程、函数模板、类模板

目录 一.范式编程 二.函数模板 1.概念与格式 2.原理 3.实例化 4.匹配规则 三.类模板 一.范式编程 在写C函数重载的时候&#xff0c;可能会写很多同一类的函数&#xff0c;例如交换函数&#xff1a; void Swap(int& left, int& right) {int temp left;left r…...

验证图片旋转

最近在使用百度图片翻译时遇到一个问题&#xff0c;就是图片会翻转90&#xff0c;经与百度沟通&#xff0c;发现是原始图片中有个旋转参数引起的。 于是写个demo验证一下。 // 获取元数据中的旋转方向 func getOrientation() int {//打开图像文件f, err : os.Open("image…...

宏景eHR /ajax/ajaxService SQL注入漏洞复现

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR /ajax/ajaxService 接口处存在SQL注入漏洞,,未经身份验证的远程攻击者通过利用SQL注入漏洞配合数据库xp_cmdshell可…...

从源码看 Redis:深入理解 redisDb 和 redisObject

Redis 是一个广泛使用的内存数据库&#xff0c;以其高性能和丰富的数据结构而闻名。不同于磁盘数据库&#xff0c;磁盘数据库将数据读取到文件中维护&#xff0c;而内存数据库将数据存储在内存中&#xff0c;意味着其想要维护数据&#xff0c;必须在代码中维护一个保存数据的结…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...