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

Selenium + 数据驱动测试:从入门到实战!

引言

在软件测试中,测试数据的多样性和灵活性对测试覆盖率至关重要。而数据驱动测试(Data-Driven Testing)通过将测试逻辑与数据分离,极大地提高了测试用例的可维护性和可扩展性。本文将结合Selenium这一流行的测试工具,手把手讲解数据驱动测试的实现方法,包括环境准备、代码实战以及最佳实践,帮助你快速掌握这一关键技能。  

什么是数据驱动测试?

数据驱动测试是一种通过外部数据源(如Excel、CSV、数据库等)驱动测试用例的自动化测试方法。在这种方法中,测试脚本是固定的,而测试数据可以灵活变化。 

数据驱动测试的优势

  • 提升测试效率: 一套脚本即可覆盖多组数据,减少重复劳动。  

  • 易于维护: 数据与逻辑分离,测试数据的更改无需修改代码。  

  • 覆盖率更高:能够轻松测试多种边界条件和异常情况。  

适用场景

  • 测试输入字段(如表单验证)。  

  • API测试中不同请求参数的验证。  

  • UI自动化测试中的多种用户操作路径。  

图片

环境准备

图片

在开始之前,你需要设置以下开发环境:  

1. 工具与依赖: 

  •    Selenium WebDriver: 用于UI自动化测试。  

  •    TestNG 或 JUnit:测试框架,用于管理测试用例。  

  •    Apache POI: 用于读取和写入Excel文件(如果使用Excel作为数据源)。  

  •    IDE: 推荐使用IntelliJ IDEA或Eclipse。  

  •    JDK: 版本 8 或以上。  

2. Maven依赖配置:

在`pom.xml`文件中添加以下依赖: 

<dependencies>    <dependency>        <groupId>org.seleniumhq.selenium</groupId>        <artifactId>selenium-java</artifactId>        <version>4.0.0</version>    </dependency>    <dependency>        <groupId>org.testng</groupId>        <artifactId>testng</artifactId>        <version>7.4.0</version>    </dependency>    <dependency>        <groupId>org.apache.poi</groupId>        <artifactId>poi-ooxml</artifactId>        <version>5.2.3</version>    </dependency></dependencies>

图片

数据驱动测试的实现方法

以下是一个完整的实战案例,展示如何通过Selenium和TestNG实现数据驱动测试,使用Excel作为测试数据源。  

步骤 1:准备测试数据

在Excel文件中准备测试数据,例如,测试表单的登录功能:  

图片

步骤 2:创建Excel读取工具类

import org.apache.poi.ss.usermodel.*;import java.io.File;import java.io.FileInputStream;public class ExcelUtils {    public static Object[][] getTestData(String filePath, String sheetName) {        Object[][] data = null;        try {            FileInputStream fis = new FileInputStream(new File(filePath));            Workbook workbook = WorkbookFactory.create(fis);            Sheet sheet = workbook.getSheet(sheetName);            int rows = sheet.getPhysicalNumberOfRows();            int cols = sheet.getRow(0).getPhysicalNumberOfCells();            data = new Object[rows - 1][cols];            for (int i = 1; i < rows; i++) {                Row row = sheet.getRow(i);                for (int j = 0; j < cols; j++) {                    data[i - 1][j] = row.getCell(j).toString();                }            }        } catch (Exception e) {            e.printStackTrace();        }        return data;    }}

步骤 3:编写测试脚本

import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.By;import org.openqa.selenium.chrome.ChromeDriver;import org.testng.Assert;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;public class DataDrivenTest {    WebDriver driver;    @DataProvider(name = "loginData")    public Object[][] getData() {        return ExcelUtils.getTestData("testdata.xlsx", "Sheet1");    }    @Test(dataProvider = "loginData")    public void loginTest(String username, String password, String expectedResult) {        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");        driver = new ChromeDriver();        driver.get("https://example.com/login");        WebElement usernameField = driver.findElement(By.id("username"));        WebElement passwordField = driver.findElement(By.id("password"));        WebElement loginButton = driver.findElement(By.id("login"));        usernameField.sendKeys(username);        passwordField.sendKeys(password);        loginButton.click();        String actualResult = driver.findElement(By.id("result")).getText();        Assert.assertEquals(actualResult, expectedResult);        driver.quit();    }}

图片

数据驱动测试的最佳实践

1. 数据设计需全面:

   包括正常数据、边界数据和异常数据,确保覆盖率高。  

2. 数据文件与代码分离:  

   数据存储在外部文件中(如Excel或CSV),代码仅处理逻辑部分。  

3. 自动化与手动测试结合:

   数据驱动测试能有效覆盖大量数据场景,但手动测试更适合探索性验证。  

4. 关注日志与报告:

   使用TestNG生成的测试报告,记录测试用例的执行结果,便于问题定位。  

常见问题与解决方法

问题:Excel文件无法读取

  检查路径是否正确,确保Excel文件未被其他程序占用。  

问题:数据驱动导致用例执行缓慢

 使用更高效的文件读取库,或优化测试脚本逻辑。 

图片

写在最后

通过本文,你了解了数据驱动测试的核心概念、实现步骤以及实际应用场景。结合Selenium的强大功能,数据驱动测试能够有效提升测试效率和覆盖率。接下来,尝试在你的项目中实现这一方法,将理论与实践相结合,让自动化测试更上一层楼!  

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

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

相关文章:

Selenium + 数据驱动测试:从入门到实战!

引言 在软件测试中&#xff0c;测试数据的多样性和灵活性对测试覆盖率至关重要。而数据驱动测试&#xff08;Data-Driven Testing&#xff09;通过将测试逻辑与数据分离&#xff0c;极大地提高了测试用例的可维护性和可扩展性。本文将结合Selenium这一流行的测试工具&#xff0…...

LLaMA与ChatGLM选用比较

目录 1. 开发背景 2. 目标与应用 3. 训练数据 4. 模型架构与规模 5. 开源与社区支持 6. 对话能力 7. 微调与应用 8. 推理速度与资源消耗 总结 LLaMA(Large Language Model Meta AI)和 ChatGLM(Chat Generative Language Model)都是强大的大型语言模型,但它们有一…...

GPTZero:高效识别AI生成文本,保障学术诚信与内容原创性

产品描述 GPTZero 是一款先进的AI文本检测工具&#xff0c;专为识别由大型语言模型&#xff08;如ChatGPT、GPT-4、Bard等&#xff09;生成的文本而设计。它通过分析文本的复杂性和一致性&#xff0c;判断文本是否可能由人类编写。GPTZero 已经得到了超过100家媒体机构的报道&…...

C/C++ 优化,strlen 示例

目录 C/C optimization, the strlen examplehttps://hallowed-blinker-3ca.notion.site/C-C-optimization-the-strlen-example-108719425da080338d94c79add2bb372 揭开优化的神秘面纱... 让我们来谈谈 CPU 等等&#xff0c;SIMD 是什么&#xff1f; 为什么 strlen 是一个很…...

【动手学深度学习Pytorch】1. 线性回归代码

零实现 导入所需要的包&#xff1a; # %matplotlib inline import random import torch from d2l import torch as d2l import matplotlib.pyplot as plt import matplotlib import os构造人造数据集&#xff1a;假设w[2, -3.4]&#xff0c;b4.2&#xff0c;存在随机噪音&…...

深入理解PyTorch中的卷积层:工作原理、参数解析与实际应用示例

深入理解PyTorch中的卷积层&#xff1a;工作原理、参数解析与实际应用示例 在PyTorch中&#xff0c;卷积层是构建卷积神经网络&#xff08;CNNs&#xff09;的基本单元&#xff0c;广泛用于处理图像和视频中的特征提取任务。通过卷积操作&#xff0c;网络可以有效地学习输入数…...

DataGear 5.2.0 发布,数据可视化分析平台

DataGear 企业版 1.3.0 已发布&#xff0c;欢迎体验&#xff01; http://datagear.tech/pro/ DataGear 5.2.0 发布&#xff0c;图表插件支持定义依赖库、严重 BUG 修复、功能改进、安全增强&#xff0c;具体更新内容如下&#xff1a; 重构&#xff1a;各模块管理功能访问路径…...

uniapp: vite配置rollup-plugin-visualizer进行小程序依赖可视化分析减少vender.js大小

一、前言 在之前文章《uniapp: 微信小程序包体积超过2M的优化方法&#xff08;主包从2.7M优化到1.5M以内&#xff09;》中&#xff0c;提到了6种优化小程序包体积的方法&#xff0c;但并没有涉及如何分析common/vender.js这个文件的优化&#xff0c;而这个文件的大小通常情况下…...

深度学习:如何复现神经网络

深度学习&#xff1a;如何复现神经网络 要复现图中展示的卷积神经网络&#xff08;CNN&#xff09;&#xff0c;我们需详细了解和配置每层网络的功能与设计理由。以下将具体解释各层的配置以及设计选择的原因&#xff0c;确保网络设计的合理性与有效性。 详细的网络层配置与设…...

Spring Boot与MyBatis-Plus的高效集成

Spring Boot与MyBatis-Plus的高效集成 引言 在现代 Java 开发中&#xff0c;MyBatis-Plus 作为 MyBatis 的增强工具&#xff0c;以其简化 CRUD 操作和无需编写 XML 映射文件的特点&#xff0c;受到了开发者的青睐。本篇文章将带你一步步整合 Spring Boot 与 MyBatis-Plus&…...

【Unity ShaderGraph实现流体效果之Function入门】

Unity ShaderGraph实现流体效果之Node入门&#xff08;一&#xff09; 前言Shader Graph NodePosition NodeSplit NodeSubtract NodeBranch Node 总结 前言 Unity 提供的Shader Graph在很大程度上简化了开发者对于编写Shader的工作&#xff0c;只需要拖拽即可完成一个视觉效果…...

Spark RDD sortBy算子执行时进行数据 “采样”是什么意思?

一、sortBy 和 RangePartitioner sortBy 在 Spark 中会在执行排序时采用 rangePartitioner 进行分区&#xff0c;这会影响数据的分区方式&#xff0c;并且这一步骤是通过对数据进行 “采样” 来计算分区的范围。不过&#xff0c;重要的是&#xff0c;sortBy 本身仍然是一个 tr…...

React-useRef与DOM操作

#题引&#xff1a;我认为跟着官方文档学习不会走歪路 ref使用 组件重新渲染时&#xff0c;react组件函数里的代码会重新执行&#xff0c;返回新的JSX&#xff0c;当你希望组件“记住”某些信息&#xff0c;但又不想让这些信息触发新的渲染时&#xff0c;你可以使用ref&#x…...

Mistral AI 发布 Pixtral Large 模型:多模态时代的开源先锋

Mistral AI 最新推出的 Pixtral Large 模型&#xff0c;带来了更强的多模态能力。作为一款开源的多模态模型&#xff0c;它不仅在参数量上达到 1240 亿&#xff0c;更在文本和图像理解上实现了质的飞跃。 模型亮点 1. 多模态能力再升级 Pixtral Large 配备了 123B 参数的解码器…...

Windows、Linux多系统共享蓝牙设备

Windows、Linux多系统共享蓝牙设备 近来遇到一个新问题&#xff0c;就是双系统共享蓝牙鼠标。因为一直喜欢在Windows、Linux双系统之间来回切换&#xff0c;而每次切换系统蓝牙就必须重新配对&#xff0c;当然&#xff0c;通过网络成功解决了问题。 通过这个问题&#xff0c;稍…...

C语言 | Leetcode C语言题解之第564题寻找最近的回文数

题目&#xff1a; 题解&#xff1a; #define MAX_STR_LEN 32 typedef unsigned long long ULL;void reverseStr(char * str) {int n strlen(str);for (int l 0, r n-1; l < r; l, r--) {char c str[l];str[l] str[r];str[r] c;} }ULL * getCandidates(const char * n…...

wsl虚拟机中的dockers容器访问不了物理主机

1 首先保证wsl虚拟机能够访问宿主机IP地址&#xff0c;wsl虚拟机通过vEthernet (WSL)的地址访问&#xff0c;着意味着容器也要通过此IP地址访问物理主机。 2 遇到的问题&#xff1a;wsl虚拟机中安装了docker&#xff0c;用在用到docker容器内的开发环境&#xff0c;但是虚拟机…...

Spark RDD 的宽依赖和窄依赖

通俗地理解 Spark RDD 的 宽依赖 和 窄依赖&#xff0c;可以通过以下比喻和解释&#xff1a; 1. 日常生活比喻 假设你在管理多个团队完成工作任务&#xff1a; 窄依赖&#xff1a;每个团队只需要关注自己的分工&#xff0c;完成自己的任务。例如&#xff0c;一个人将纸张折好&…...

二进制转十进制

解题思路分析 二进制转十进制原理&#xff1a;二进制数转换为十进制数的基本原理是按位权展开相加。对于一个二进制数&#xff0c;从右往左每一位的位权依次是将每一位上的数字&#xff08;0 或 1&#xff09;乘以其对应的位权&#xff0c;然后把所有结果相加&#xff0c;就得…...

深度学习:神经网络中的非线性激活的使用

深度学习&#xff1a;神经网络中的非线性激活的使用 在神经网络中&#xff0c;非线性激活函数是至关重要的组件&#xff0c;它们使网络能够捕捉和模拟输入数据中的复杂非线性关系。这些激活函数的主要任务是帮助网络解决那些无法通过简单的线性操作&#xff08;如权重相乘和偏…...

如何安全备份QQ空间历史说说?GetQzonehistory工具全攻略

如何安全备份QQ空间历史说说&#xff1f;GetQzonehistory工具全攻略 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心过QQ空间里那些承载着青春记忆的说说有一天会突然消失&…...

C++ 无原生 JSON 支持?一文实现通用序列化与反序列化封装方案

前言 在现代软件开发中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;因其轻量级和易读性成为数据交换的主流格式。C虽无原生JSON支持&#xff0c;但通过封装第三方库&#xff08;如nlohmann/json&#xff09;&#xff0c;可高效实现序列化&#xff08;…...

AMD显卡也能玩转GPU编程?ROCm环境搭建与OpenCL入门避坑指南

AMD显卡也能玩转GPU编程&#xff1f;ROCm环境搭建与OpenCL入门避坑指南 在GPU计算领域&#xff0c;NVIDIA的CUDA生态长期占据主导地位&#xff0c;但AMD显卡用户同样拥有强大的并行计算选择。本文将带你探索AMD ROCm平台的完整搭建流程&#xff0c;并深入OpenCL编程的核心技巧&…...

从黑盒到白盒:基于GB28181/RTSP全栈源码交付的AI视频平台OEM与低代码集成实战

引言&#xff1a;掌握核心代码&#xff0c;重塑交付价值链 对于系统集成商&#xff08;SI&#xff09;和独立软件开发商&#xff08;ISV&#xff09;而言&#xff0c;依赖厂商的“黑盒”产品无异于将命运交予他人。功能定制周期长、接口开放受限、Logo无法替换、私有协议无法打…...

GEO时代的技术突围:Infoseek媒体发布如何改写内容分发规则

最近在技术圈刷到一个新词——GEO&#xff08;生成式引擎优化&#xff09;。和传统SEO不一样&#xff0c;GEO的目标不是让网页排到搜索结果前面&#xff0c;而是让AI在回答用户问题时&#xff0c;把你的内容当成“标准答案”来引用。这个变化挺有意思&#xff0c;意味着内容分发…...

GlitchTip:开源错误追踪平台完全指南:Sentry替代方案的完整教程

GlitchTip&#xff1a;开源错误追踪平台完全指南&#xff1a;Sentry替代方案的完整教程 背景 在应用开发和运维过程中&#xff0c;错误追踪是保障服务质量的关键环节。Sentry 作为业界领先的错误追踪服务&#xff0c;提供了强大的错误收集和分析能力&#xff0c;但其云服务版…...

深度学习训练中loss震荡与不收敛的常见原因及实战调优策略

1. 为什么你的模型loss像过山车&#xff1f;先看懂这些典型症状 第一次打开TensorBoard看到自己的loss曲线像心电图一样上蹿下跳&#xff0c;那种感觉就像新手司机开车时方向盘失控。其实loss震荡和不收敛是深度学习中再常见不过的问题&#xff0c;但不同表现背后藏着完全不同的…...

计算机毕业设计springboot研友帮系统设计与实现 基于SpringBoot的考研互助社区平台开发与实现 SpringBoot框架下研究生学术协作系统的设计与应用

计算机毕业设计springboot研友帮系统设计与实现w2zpm5oh &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 随着研究生招生规模的持续扩大&#xff0c;考研竞争日益激烈&#xff0…...

YOLOv8 Detect Head 源码拆解:从张量变形到边界框解码,一步步带你理解Anchor-Free预测

YOLOv8 Detect Head 深度解析&#xff1a;从特征图到预测框的完整实现路径 在计算机视觉领域&#xff0c;目标检测一直是核心任务之一。YOLOv8作为当前最先进的实时检测器&#xff0c;其Detect Head模块的设计尤为精妙。本文将带您深入探索这一模块的内部工作机制&#xff0c;从…...

sdkman 一键切换 JDK 版本管理工具

&#x1f449; 这是一个或许对你有用的社群&#x1f431; 一对一交流/面试小册/简历优化/求职解惑&#xff0c;欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料&#xff1a; 《项目实战&#xff08;视频&#xff09;》&#xff1a;从书中学&#xff0c;往事中…...