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

软件测试--自动化测试1

本章目标

1.自动化测试

2.Web自动化测试

3.selenium

1.自动化

1.1自动化概念

        自动的替代人的行为完成操作

        自动化生活中随处可见:自动洒水机,自动闸门..

        软件中的自动化测试也是如此,通过自动化有效的减少人力的消耗的同时提高了测试的质量和效率.

        自动化测试主要是目的就是用来进行回归测试.

1.1.1回归测试

        软件有多个版本需要进行功能的整体回归,为了避免新增功能影响到历史的功能,需要进行功能的回归.

       手工测试新增加的功能,自动化测试历史功能,最后进行回归测试

        手工测试的功能少,能保障产品尽快上线,时间足够,测试的质量也会更高一些

        如果存在历史功能的优化/变更,自动化测试脚本可能会出现报错,测试人员需要维护并解决自动化脚本里的问题

        自动化脚本出现报错有时不一定是代码写的问题,有可能是开发人员编写新的功能影响了历史功能--自动化脚本发现了bug

       常见问题

1.自动化测试能取代人工测试吗?

        自动化测试不一定比人工测试更能保障系统的可靠性,自动化测试是测试人员手工编写的,后续如果有功能的变更,自动化也需要进行不定期的维护和更新.

2.自动化测试可以大幅降低工作量?

       自动化测试并不能直接减少工作量。它需要前期投入大量时间搭建框架、编写脚本,并持续维护更新。只有在长期稳定、重复执行的场景中,自动化测试才能逐步体现效率优势。

        自动化测试可以一定程度上降低工作量

1.2自动化分类

        自动化测试是一个统称

        自动化测试分为UI/界面自动化测试接口自动化测试

        UI自动化测试也称为界面自动化测试,常见的UI自动化测试包含web自动化测试,移动端自动化测试等等.

        

1.3自动化测试金字塔

        

这是理想的自动化测试金字塔

越往上走投入更多的时间和精力,获得的回报越少

越往下走投入更少的时间和精力,获得的回报越大

在企业中,越来越多的人开始重视单元测试,编写单元测试脚本

单元测试是由开发人员来进行的,存在较少的公司会招聘专业的单元测试人员

对于开发人员来说,又是一部分工作,会不太愿意做,所以需要测试人员来推动开发人员实施单元测试

企业中实际上往往是"冰淇淋蛋筒反模式"

        实际工作中手工测试阶段才能发现问题,投入的精力也就是更大

        UI自动化:可以发现的问题相较于接口自动化来说更多,很多后端问题都会体现在界面上,界面不仅可以发现界面问题,也能发现后端问题

        接口自动化:关注接口(url,请求方案,请求参数,响应码,相应数据...)

2.Web自动化测试

目标:百度搜索关键字"洛克王国"并展示相关词条

手工测试

1.打开浏览器

2.请求网址http://www,baidu.com

3.找到百度输入框,并输出关键词"洛克王国"

4.找到百度一下并且点击

5.关闭浏览器

自动化测试无非也是如此步骤,只不过需要使用代码实现

1.打开浏览器

2.请求网址http://www,baidu.com

3.找到百度输入框,并输出关键词"洛克王国"

4.找到百度一下并且点击

5.关闭浏览器

自动化的打开浏览器需要使用驱动程序

程序想打开web浏览器就需要安装web驱动(即WebDriver),WebDriver 以本地化方式驱动浏览器.

安装驱动有两种方式,一种是通过手动下载,另一种是由驱动管理工具下载与浏览器版本匹配的

                               手动下载驱动,驱动必须要跟浏览器匹配(浏览器的名称和版本)

                                产生的问题:浏览器会不定时更新,更新之后旧版本驱动无法使用

自动下载:使用 WebDriverManager 自动管理驱动,但需要添加相关依赖

<dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>5.8.0</version><scope>test</scope>
</dependency>

使用驱动管理程序下载驱动的时候,必须要保证对应的浏览器程序一定是存在的(必须是正版)

3.Selenium

驱动程序准备好了,这里还需要使用 selenium 中提供的方法来通过驱动程序操作浏览器

添加相关依赖:

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

 

第一个简单的web界面自动化的代码如下(火狐浏览器打开):

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;public class auto_test {public void test01() throws InterruptedException {//驱动管理程序下载驱动WebDriverManager.chromedriver().setup();ChromeOptions options=new ChromeOptions();//允许访问所有链接options.addArguments("--remote-allow-origins=*");//1.驱动打开浏览器WebDriver driver=new ChromeDriver(options);Thread.sleep(3000);//2.请求百度 http://www.baidu.com/driver.get("http://www.baidu.com/");Thread.sleep(3000);//3.找到百度输入框输入"洛克王国"driver.findElement(By.cssSelector("#kw")).sendKeys("洛克王国");Thread.sleep(3000);//4.找到百度一下按钮并点击driver.findElement(By.cssSelector("#su")).click();Thread.sleep(3000);//5.关闭浏览器driver.quit();}
}

这里是Edge浏览器版本的戴拿,在4处地方稍作修改即可

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;public class auto_test2 {public void test02(){WebDriverManager.edgedriver().setup();EdgeOptions options=new EdgeOptions();options.addArguments("--remote-allow-origins=*");WebDriver driver=new EdgeDriver(options);driver.get("http://www.baidu.com/");driver.findElement(By.cssSelector("#kw")).sendKeys("洛克王国");driver.findElement(By.cssSelector("#su")).click();driver.quit();}
}

可能会存在自动下载的驱动跟浏览器版本号不是一模一样(但不影响程序),存在两种情况

1)浏览器已经更新了,但是驱动还没有发布最新版本,那么最近的历史版本就可以接着使用

2)浏览器还未更新,但是下载的是最新版本的驱动,新的版本驱动可以兼容历史版本的浏览器

使用的驱动自动下砸的驱动存放位置:C:\Users\用户名\.cache\selenium

http://www.xdnf.cn/news/447.html

相关文章:

  • 如何使用flatten函数在Terraform 中迭代嵌套map
  • 【HDFS入门】HDFS性能调优实战:压缩与编码技术深度解析
  • 若依(笔记)
  • C++入门小馆: 深入string类
  • Redis启动报错(error) NOAUTH Authentication required
  • NodeRED模拟复杂流程处理
  • MACOS 上的 快捷指令怎么用,有哪些分享资源可以用
  • WSL (ext4.vhdx文件)占用空间过大,清理方式记录,同时更改 WSL 保存位置
  • 电脑 访问 github提示 找不到网页,处理方案
  • CRC实战宝典:从原理到代码,全面攻克循环冗余校验
  • 驱动-自旋锁死锁
  • Linux系统之部署TestNet资产管理系统
  • Java使用javacv实现的多种音视频格式播放器
  • 字符串系列一>二进制求和
  • 【重走C++学习之路】12、模板进阶
  • 智慧农业新视界:视频监控管理平台如何赋能现代农业
  • Trae,字节跳动推出的 AI 编程助手插件
  • TensorFlow 实现 Mixture Density Network (MDN) 的完整说明
  • JavaScript 回调函数详解
  • spring三级缓存如何解决循环依赖问题
  • 数量关系 多级数列1
  • 文档内容提取以及合成
  • 卸载Anaconda并保留虚拟环境,重装Anaconda并还原之前的虚拟环境
  • [Swift]pod install成功后运行项目报错问题error: Sandbox: bash(84760) deny(1)
  • 老年保健与管理实训室建设要点:设备选型与技术应用关键
  • ELK日志系统
  • 卷积神经网络基础(二)
  • Redis-分布式锁
  • PyTorch深度学习框架60天进阶学习计划 - 第46天:自动化模型设计(二)
  • n8n 中文系列教程_02. 自动化平台深度解析:核心优势与场景适配指南