自动化测试必会之数据驱动测试

news2024/11/16 7:56:08

数据驱动测试

在实际的测试过程中,我们会发现好几组用例都是相同的操作步骤,只是测试数据的不同,而我们往往需要编写多次用例来进行测试,此时我们可以利用数据驱动测试来简化该种操作。

参数化:

输入数据的不同从而产生不同的测试结果(简单来说就是将输入的数据作为变量传入)。

比如搜索商品,不同的搜索关键字和搜索条件作为入参,就会得到不同的搜索结果。

数据驱动:

测试数据的改变驱动自动化测试的执行,产生不同的测试结果,数据驱动本质上是高级的参数化。

对于测试数据,我们可以将其存放在代码的数据结构中(比如数组、集合),也可以存放在外部文件(比如json、csv、yaml、Excel)或数据库中,通过相应的读取技术拿到测试数据实现数据驱动测试。

各大语言测试框架都有对应的功能,比如Python的Unitest,Java的TestNG/Junit

如TestNG有提供DataProvider注解实现数据驱动测试

方式一:将测试数据保存到代码中(数组)

//指定数据提供者,注入测试数据到测试方法中实现数据驱动测试
@Test(dataProvider="getDatasFromArray")
public void test(String name,String phone,String pwd) {
	//TODO
}

//从二维数组中获取数据驱动测试所需的测试数据(包含入参和期望值)
@DataProvider
public Object [][] getDatasFromArray(){
	Object [][] datas = {{"13323234545","123456","登录成功"},{"133232345451","123456","手机号码格式不正确"},{"13323234545","","密码不能位空"}};
	return datas;
}

方式二:将数据保存到外部的文件中(Excel)

//指定数据提供者,注入测试数据到测试方法中实现数据驱动测试
//需要注意的是:此时数据提供者返回的是一维数组,数组里元素类型是ExcelData对象,所以方法这里需要通过ExcelData类型接收
@Test(dataProvider="getDatasFromExcel")
public void test(ExcelData excelData) {
	//TODO
}

//从外部文件(Excel)中获取数据驱动测试所需的测试数据
@DataProvider
public Object [] getDatasFromExcel(){
    //读取指定Sheet 
    List<ExcelData> list = EasyExcel.read("filePath").
                head(ExcelData.class).sheet("Sheet1").doReadSync();
    //将集合转换为数组
    return list.toArray;
  
}

数据驱动测试的优点:

1、相似的测试步骤只需要编写一条用例,可以直接通过多条测试数据驱动执行,提高了测试脚本的复用性

2、测试数据和测试脚本分离,提高后期脚本可维护性

无论是将测试数据保存在代码或者文件,又或者数据库中都可以。至于保存在哪里取决于测试数据量大小和使用场景

  • 少量的数据,比如账号相关的信息,可以直接写入代码中进行维护
  • 数据的量级在几十~几千之间,可以通过外部的文件进行管理,比如Excel
  • 当数据量级特别大的情况下,通过数据库这样方式的管理数据相对比较高效

如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

END配套学习资源分享

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

软件测试面试文档

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

在这里插入图片描述

全套资料获取方式:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/657032.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言:输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

题目&#xff1a; 描述 输入两个升序排列的序列&#xff0c;将两个序列合并为一个有序序列并输出。 输入描述&#xff1a; 输入包含三行&#xff0c; 第一行包含两个正整数n, m&#xff0c;用空格分隔。n表示第二行第一个升序序列中数字的个数&#xff0c;m表示第三…

C++ 教程(12)——循环

C 循环 有的时候&#xff0c;可能需要多次执行同一块代码。一般情况下&#xff0c;语句是顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了允许更为复杂的执行路径的多种控制结构。 循环语句允许我们多次…

朋友圈功能合集来咯!定时发朋友圈,查看朋友圈,朋友圈跟圈,一键转发朋友圈,延迟评论

&#x1f30a;发布朋友圈 功能介绍&#xff1a;可使用已登录在系统上的微信号发送朋友圈。支持发送图片、文字、视频和公众号链接等几种类型的内容。 &#xff08;1)朋友圈内容编辑&#xff1a;可以在输入框中输入要发送的文本&#xff0c;并在浮窗中选择表情。上传图片可以点…

【c++11】c++11特性

c11 c11简介列表初始化std::initializer_list autodecltypenullptr 结语 c11简介 从C0x到C11&#xff0c;C标准10年磨一剑&#xff0c;第二个真正意义上的标准珊珊来迟。相比于C98/03&#xff0c;C11则带来了数量可观的变化&#xff0c;其中包含了约140个新特性&#xff0c;以…

QT QTreeView\QTreeWidget控件 使用详解

本文详细的介绍了QTreeView、QTreeWidget控件的各种操作&#xff0c;例如&#xff1a;新建界面、QTreeWidget、QTreeView、控件布局、设置列、设置宽高、设置列表头、设置复选框、设置图标、添加树、删除树、查找树、修改树、设置选中、树排序、事件、信号、槽函数、添加节点、…

【玩转Docker小鲸鱼叭】MacOS系统安装Docker

安装Docker Mac 系统安装 Docker 其实很简单&#xff0c;我们在官方文档下载安装一下就可以了&#xff0c;但是需要注意 Docker 官方建议 MacOS 必须是版本 11 或更高版本&#xff0c;如果版本较低&#xff0c;建议先升级 MacOS 版本。 可以通过左上角的小  图片查看系统版…

浅析Spring-kafka源码——消费者模型的实现

SpringBoot项目中的消费端实现而言,Spring-kafka没有用原生的ConsumerConnector,,而是借助原生client的拉取消息功能做了自己的消费模型的实现,提供了@KafkaListener注解这种方式实现消费。 开发中在使用Spring-kafka时,一般也都是通过使用@KafkaListener注解的方法来实现…

Android MPAndroidChart折线图渐变填充实现

效果如下&#xff1a; 以下是一个从上到下渐变的drawable&#xff0c;上面是蓝色&#xff0c;逐步向下变成白色&#xff1a; chart_bg.xml <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk…

静态链接和动态链接 -- 静态加载(隐式调用)和动态加载(显式调用)

区别 静态链接和动态链接 静态链接 : 由链接器在链接时将库的内容加入到可执行程序中&#xff0c;这里的库是静态库&#xff0c;Windows下是*.lib后缀&#xff0c;Linux下是*.a后缀。动态链接 : 可执行程序加载时(静态加载) 或者 运行时(动态加载)&#xff0c;将库文件中的内容…

OpenShift Virtualization - 通过外部固定 IP 访问 VM 中的服务(附视频)

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.12 的环境中验证 文章目录 方法1&#xff1a;通过 Service 的 NodePort 访问 VM方法2&#xff1a;通过外部 IP 访问 VM确认 OpenShift 集群环境为 Worker 节点添加 Linux Bridge创建使用 Li…

『DevOps最佳实践』使用Jenkins和Harbor进行持续集成和交付的解决方案

&#x1f4e3;读完这篇文章里你能收获到 全文采用图文形式讲解学会使用Harbor配置项目学会在Jenkins中配置Harbor推送权限使用Jenkins和Harbor进行持续集成的实践感谢点赞收藏&#xff0c;避免下次找不到~ 文章目录 一、准备工作1. 环境准备2. 修改Docker配置文件3. Docker登陆…

2023蓝桥杯大学A组C++国赛游记+个人题解

Day0 发烧了一晚上没睡着&#xff0c;感觉鼻子被打火机烧烤一样难受&#xff0c;心情烦躁 早上6点起来吃了个早饭&#xff0c;思考能力完全丧失了&#xff0c;开始看此花亭奇谭 看了六集&#xff0c;准备复习数据结构考试&#xff0c;然后秒睡 一睁眼就是下午2点了 挂了个…

04- c语言数组 (C语言)

一 数组的概念 1、在程序设计中&#xff0c;为了方便处理数据把具有相同类型的若干变量按有序形式组织起来,这些按序排列的 同类数据元素的集合 称为 数组。 2、在C语言中&#xff0c;数组属于构造数据类型。一个数组可以分解为多个数组元素&#xff0c;这些数组元素可以是基本…

力扣动态规划专题(三)完全背包 518.零钱兑换II 377. 组合总和 Ⅳ 70. 爬楼梯 322. 零钱兑换 279.完全平方数 步骤及C++实现

文章目录 完全背包一维dp数组 滚动数组 518.零钱兑换II377. 组合总和 Ⅳ70. 爬楼梯322. 零钱兑换279.完全平方数139.单词拆分 完全背包 完全背包的物品数量是无限的&#xff0c;01背包的物品数量只有一个 完全背包和01背包分许步骤一样&#xff0c;唯一不同就是体现在遍历顺序上…

deque的介绍

前言 为什么会存在deque呢&#xff1f;在c标准库中deque是作为 stack和queue的底层容器就是deque&#xff0c;我们要是了解过list和vector就会知道这两种容器各有优劣&#xff0c;vector的优点是支持随机访问&#xff0c;进而可以支持排序和二分查找等算法&#xff0c;它的缺点…

鼠标事件 获取鼠标坐标及点击事件

运行效果&#xff1a; 头文件 #ifndef MOUSEEVENT_H #define MOUSEEVENT_H #include #include #include #include class MouseEvent : public QMainWindow { Q_OBJECT public: MouseEvent(QWidget *parent 0); ~MouseEvent(); protected: void mousePressEvent(QMouse…

Linux:一键搭建ftp服务(vsftpd)

《TRO-23614-VSFTPD》 如果csdn收费 可以和我si liao 我会免费发给你 我发的这个是一个tar归档包&#xff0c;脚本就在其中 Linux&#xff1a;《tar》归档命令_鲍海超-GNUBHCkalitarro的博客-CSDN博客 tar xfz tarro_vsftpd.tar.gz -C /root/ # tar xfz tar包路径 -…

SpringBoot第27讲:SpringBoot集成MySQL - MyBatis 多个数据源

SpringBoot第27讲&#xff1a;SpringBoot集成MySQL - MyBatis 多个数据源 本文是SpringBoot第27讲&#xff0c;在某些场景下&#xff0c;Springboot需要使用多个数据源&#xff0c;以及某些场景会需要多个数据源的动态切换。本文主要介绍上述场景及 SpringBootMyBatis实现多个数…

【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)

大家好&#xff0c;各位努力奋斗的大学生小伙伴们&#xff01;今天&#xff0c;我将带你们领略一项令人惊叹的程序设计奇迹——《奖学金评定系统》&#xff01;是不是感到激动呢&#xff1f;别急&#xff0c;让我为你们揭开这个能让你在C语言程序设计中拿满分的秘密武器&#x…

ASP.NET Core MVC 从入门到精通之Identity入门

随着技术的发展&#xff0c;ASP.NET Core MVC也推出了好长时间&#xff0c;经过不断的版本更新迭代&#xff0c;已经越来越完善&#xff0c;本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容&#xff0c;适用于初学者&#xff0c;在校毕业生&#xff0c…