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

自动化测试概念及常用函数篇 [软件测试 基础]

目录

自动化测试

1. 自动化概念

1.1 回归测试

1.2 自动化分类

1.2.1 接口自动化

1.2.1.1 定义

1.2.1.2 测试内容

1.2.1.3 实现方式

1.2.2 UI 自动化

1.2.2.1 移动端自动化测试

1.2.2.2 web 自动化测试

2. web 自动化测试

2.1 驱动

2.1.1 安装驱动管理

2.2 Selenium

2.2.1 安装 Selenium 库

2.2.2 使用 Selenium 编写简单代码

2. 自动化测试常用函数

2.1 元素的定位

2.1.1  cssSelector

2.1.2 xpath

2.2 操作测试对象

2.2.1 点击/提交对象

2.2.2 模拟按键输入

2.2.3 清除文本内容

2.2.4 获取文本信息

2.2.5 获取当前页面标题

2.3 窗口

2.3.1 获取当前页面句柄

2.3.2 获取所有页面句柄

2.3.3 窗口切换

2.3.4 窗口设置大小

2.3.5 屏幕截图

2.3.6 关闭窗口 

2.4 等待

2.4.1 强制等待

2.4.2 隐式等待

2.4.3 显式等待

2.5 浏览器导航及参数设置

2.5.1 打开网站

2.5.2 浏览器的前进, 后退, 刷新  

2.5.3 设置无头模式

2.5.4 设置浏览器加载策略

2.6 弹窗 

2.6.1 警告弹窗 + 确认弹窗

2.6.2 提示弹窗 

​编辑 

2.7 文件上传


自动化测试

1. 自动化概念

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

// 例如: 自动洒水机, 自动洗手液, 自动闸门

// 自动化的主要目的就是用来做回归测试

1.1 回归测试

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

1.2 自动化分类

1.2.1 接口自动化
1.2.1.1 定义

// 接口自动化测试是利用自动化测试工具或编写代码,对软件系统中各个接口进行功能、性能、稳定性等方面的测试。通过模拟客户端和服务器之间的通信,验证接口的正确性和可靠性,确保不同模块之间的交互能够正常进行

1.2.1.2 测试内容

// 功能测试: 检查接口是否按照预期实现了相应的功能,包括请求和响应的参数、数据格式、业务逻辑等是否正确。例如,测试一个用户登录接口,验证输入正确的用户名和密码后是否能返回正确的登录成功信息,以及输入错误信息时是否有相应的错误提示。

// 性能测试: 评估接口在不同负载条件下的性能表现,如响应时间、吞吐量、并发处理能力等。例如,通过模拟大量并发用户访问某个接口,观察其响应时间是否在可接受范围内,以及系统是否能够稳定运行

// 兼容性测试: 验证接口在不同的环境(如不同的操作系统、浏览器、服务器配置等)下是否能够正常工作

1.2.1.3 实现方式

// 通常使用专门的接口测试工具,如 PostmanJMeter 等,也可以通过编写代码来实现,如使用 Python 的 Requests 库、Java 的 HttpClient 等。以 Postman 为例,它提供了图形化的界面,方便用户发送各种 HTTP 请求,并对响应进行分析和验证。通过编写测试脚本,可以实现自动化的接口测试流程,包括请求的发送、响应的验证、数据的断言等操作

// Postman 的安装及使用教程

// JMeter 的安装及使用教程

1.2.2 UI 自动化

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

1.2.2.1 移动端自动化测试

// 移动端自动化测试: 就是对部署在手机上的应用程序进行测试

// 移动端自动化测试主要测试程序部署在手机上能否按照预期的结果进行操作

// 移动端测试通常不是将程序部署在移动端上进行测试, 而是需要安装模拟器, 在电脑谁给你编写自动化测试脚本代码对模拟器上的软件进行操作

// 移动端测试难度相对较大, 移动端测试的稳定性要比接口自动化测试和 文本自动化测试的稳定性差很多, 因为主要是移动端测试收到的环境影响比较多

1.2.2.2 web 自动化测试

// web 自动化测试: 就是对网页进行自动化测试, 模拟人在浏览器上的操作行为

// 例如: 在百度上进行搜索, 自动的打开浏览器, 访问百度首页, 并进行一系列的搜索和验证等行为

2. web 自动化测试

2.1 驱动

// web 系统的测试前提是需要打开浏览器, 通过访问 web 服务器来对服务器界面进行一系列的操作

// 对于自动化程序来说, 不能直接进行操作, 需要依靠驱动来实现执行操作

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

2.1.1 安装驱动管理

// 驱动管理: WebDriverManager 是一个开源 Java 库, 以完全自动化的方式对 Selenium WebDriver 所需的驱动程序竞选管理 (下载, 设置和维护)

// 代码:

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

// 要将这个放在 idea 的 pom.xml 文件中

// 代码输入完成后按照下面操作下载安装驱动

2.2 Selenium

// 安装好驱动之后就可以使用 Selenium 来编写自动化测试脚本了

// Selenium 是一个 Web 自动化测试工具, Selenium 中提供了丰富的方法让我们用来进行 Web 自动化测试

2.2.1 安装 Selenium 库

// 代码:

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

 // 只需要在上面那个安装了驱动的代码下面加上, 然后重新点击下方按钮下载安装

2.2.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();
}

2. 自动化测试常用函数

2.1 元素的定位

// Web 自动化测试的操作核心是能够找到页面对应的元素, 然后才能对元素进行具体的操作

// 常用的 主要有: cssSelector 和 xpath

// 在需要的网页右键选择 "检查", 就可以定位相对应的元素

2.1.1  cssSelector

// 选择器的功能: 选中页面中指定的标签元素

// 选择器的种类分为基础选择器和复合选择器, 常见的元素定位方式可以通过 id 选择器和子类选择器来进行定位

//  通过下面的操作就可以获取这个元素对应的 cssSelector 

// "搜索输入框元素" : #kw

// "百度一下按钮" : #su

2.1.2 xpath

// XML 路径语言, 不仅可以在 XML 文件中查找信息, 还可以在 HTML 中选取节点

// xpath 使用路径表达式来选择 XML 文档中的节点

// xpath 语法中: 1) 获取 HTML 页面所以得节点:  //* ; 2) 获取 HTML 页面指定的节点: //[指定节点] ; 3) 获取一个节点中的直接子节点: ; 4) 获取一个节点的父节点: .. ; 5) 实现节点属性的匹配: [@...] 

// 注意: 元素的定位方式必须唯一

// 更方便的方式就是我们上面说的 "Copy"

2.2 操作测试对象

// 获取到页面元素之后, 我们就需要对元素进行操作了

// 常见的操作有: 点击, 提交, 输入, 清除, 获取文本等

2.2.1 点击/提交对象

// click() 

// 示例:

driver.findElement(By.cssSelector("#su")).click()
2.2.2 模拟按键输入

// sendKeys()

// 示例:

driver.findElement(By.cssSelector("#kw")).sendKeys("输入文字")
2.2.3 清除文本内容

// 输入文本后又想换一个新的关键词, 这里就需要将原本内容清除后重新输入

// clear()

// 示例:

driver.findElement(By.cssSelector("#kw")).sendKeys("我爱游戏");
driver.findElement(By.cssSelector("#kw")).clear();
driver.findElement(By.cssSelector("#kw")).sendKeys("我爱学习");
2.2.4 获取文本信息

// getText()

// 示例:

driver.findElement(By.cssSelector("#session-list > li.selected > p")).getText();

// 文本 和 属性 是不一样的, 获取属性需要用到方法: getAttribute("属性名称") 

2.2.5 获取当前页面标题

// getTitle()  

2.2.6 获取当前页面 URL

// getCurrentUrl()

2.3 窗口

// 因为我们有时候在测试的时候需要对多个窗口进行操作, 所以我们就需要用到窗口有关句柄来操作

2.3.1 获取当前页面句柄

// driver.getWindowHandle()

2.3.2 获取所有页面句柄

// driver.getWindowsHandles()

2.3.3 窗口切换
String curWindow = driver.getWindowHandle();
Set<String> allWindow = driver.getWindowHandles();
for( String w : allWindow){if(w!=curWindow){driver.switchTo().window(w);}
}
2.3.4 窗口设置大小
//窗口最⼤化
driver. Manage().window().maximize();
//窗口最⼩化
driver.manage().window().minimize();
//全屏窗口
driver. Manage().window().fullscreen();
//⼿动设置窗口⼤⼩
driver. Manage().window().setSize(new Dimension(1024, 768));
2.3.5 屏幕截图

 // 我们的自动化脚本一般部署在机器上自行的去运行, 如果出现了报错, 我们是不知道的, 可以通过抓拍截图的方式记录下发生错误的场景

// 屏幕截图也需要额外导入包 (方法和上面安装 Selenium 差不多), 代码如下

        <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>

// 简单的截图版本: 

File srcfile = driver.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(srcfile,new File("my.png"));

// 高阶版本:

public void getScreenShot(String str) throws IOException {// 屏幕截图SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");String dirTime = sim1.format(System.currentTimeMillis());String fileTime = sim2.format(System.currentTimeMillis());// 生成文件的格式为: 年-月-日/test.类名-时分秒毫秒.pngString fileName = "./src/test/image/" + dirTime + "/" + str + "-" + fileTime + ".png";// System.out.printf("fileName:" + fileName);File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);// srcFile 放到指定位置FileUtils.copyFile(srcFile,new File((fileName)));}
2.3.6 关闭窗口 

 // driver.close();

 // 窗口关闭后 driver 需要重新定义

2.4 等待

// 通常代码执行速度比页面渲染的速度更快, 为了避免因渲染过慢出现的自动化误报的问题, 可以使用 Selenium 中提供的三种等待方法

2.4.1 强制等待

// Tread.sleep()

// 优点: 使用简单, 调试的时候比较有效

// 缺点: 影响运行效率, 浪费大量的时间

2.4.2 隐式等待

// 隐式等待是一种智能等待, 他可以规定, 在查找元素时, 在指定时间内不断查找元素

// 如果找到则代码继续执行, 直到超时还没找到元素才会报错

// implicityWait()

// 参数: Duration 类中提供的 毫秒, 秒, 分钟 等方法

// 示例:

//隐式等待1000毫秒
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(1000));
//隐式等待5秒
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));

// 隐式等待作用域是整个脚本的所有元素, 即: 只要driver 对象没有被释放掉 (driver.quit()), 隐式等待就一直生效

// 优点: 智能等待, 作用于全局

2.4.3 显式等待

//  显式等待也是一种智能等待, 在指定超时时间范围内只要满足操作的条件就会继续执行后续代码

new WebDriverWait(driver, Duration.ofSeconds(3)).until($express)

 // $express: 涉及到 Selenium.support.ui.ExpectedConditions 包下的 ExpectedCondition 类

// 返回值: boolean

// 示例:

WebDriverWait foo = new WebDriverWait(driver, Duration.ofSeconds(3))
foo.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#id")));

// ExpectedConditions 预定义方法的一些示例:

// elementToBeClickable(By locator) : 用来检查元素的期望是可见的并已启用, 以便可以单击它

// textToBe(By locator, String str) : 检查元素 

// presenceOfElementLocated(By locator) : 检查页面的 DOM 上是否存在元素

// urlToBe(java.lang.String url) : 检查当前页面的 URL 是一个特定的 URL

// 优点: 智能等待, 可以自定义显式等待的条件, 操作灵活

// 缺点: 写法复杂

// 隐式等待和显式等待意识使用最好不要混合, 可能导致不看预测的等待时间

2.5 浏览器导航及参数设置

2.5.1 打开网站

// driver.navigate().to("url")

// driver.get("url")

2.5.2 浏览器的前进, 后退, 刷新  
driver.navigate().back(); // 后退
driver.navigate().forward(); // 前进
driver.navigate().refresh(); // 刷新
2.5.3 设置无头模式
ChromeOptions options = new ChromeOptions();
options.addArguments("-headless");
2.5.4 设置浏览器加载策略
options.setPageLoadStrategy(PageLoadStrategy.NONE);

 

2.6 弹窗 

// 弹窗在页面是找不到任何元素的, 这种情况我们只能使用 Selenium 提供的 Alert 接口来处理

2.6.1 警告弹窗 + 确认弹窗

Alert alert = driver.switchTo.alert();
//确认
alert.accept();
//取消
alert.dismiss();
2.6.2 提示弹窗 

// 多一个可以输入的输入框

 
Alert alert = driver.switchTo.alert();
alert.sendKeys("hello"); // 输入内容
alert.accept();
alert.dismiss();

2.7 文件上传

// 点击文件上传的场景下会弹窗系统窗口, 进行文件的选择

// Selenium 无法识别非 Web 的控件, 上传文件窗口是系统自带的, 无法识别窗口元素, 但是可以使用 sendKeys 来上传指定路径的文件, 达到的效果是一样的

WebElement ele = driver.findElement(By.cssSelector("body > div > div >
input[type=file]"));
ele.sendKeys("D:\\selenium2html\\selenium2html\\upload.html");

相关文章:

  • GIT 使用小记
  • C++ 类与对象(上):从基础定义到内存布局的深度解析
  • 直播预告 |【仓颉社区】第32期WORKSHOP
  • 02_java的运行机制以及JDKJREJVM基本介绍
  • 视频汇聚平台EasyCVR赋能高清网络摄像机:打造高性价比视频监控系统
  • Python基础语法:查看数据的类型type(),数据类型转换,可变和不可变类型
  • 如何使用无线远程控制模块来实现rs-485无线控制?
  • 4.24工作总结
  • 安全生产知识竞赛活动方案流程规则
  • Linux内核之struct pt_regs结构
  • Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
  • 虚拟机系统介绍
  • ZeroNet 地址生成器1.0
  • Redis的过期删除策略和内存淘汰策略
  • Spring MVC HandlerAdapter 的作用是什么? 为什么 DispatcherServlet 不直接调用 Controller 方法?
  • YOLOv8融合CPA-Enhancer【提高恶略天气的退化图像检测】
  • oracle 锁的添加方式和死锁的解决
  • Yocto meta-toradex-security layer 创建独立数据分区
  • MongoDB副本集搭建与核心机制
  • 【回眸】香橙派Zero2(全志H616)初探
  • 何立峰出席跨境贸易便利化专项行动部署会并讲话
  • 给印度立“人设”:万斯访印祭出美国关税战新招,但效果存疑
  • 消费者买国外电话卡使用时无信号,店铺:运营商故障,较少见
  • 证券时报:金价再创历史新高,“避险”黄金不应异化为投机工具
  • 童书湃|世界读书日:在书里去辽阔的自然里撒个欢
  • 谁为金子疯狂:有人贷款十万博两千,有人不敢再贸然囤货