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

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

数据驱动测试

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

参数化:

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

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

数据驱动:

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

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

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

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

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


//指定数据提供者,注入测试数据到测试方法中实现数据驱动测试@Test(dataProvider="getDatasFromArray")public void test(String name,String phone,String pwd) {//TODO}//从二维数组中获取数据驱动测试所需的测试数据(包含入参和期望值)@DataProviderpublic Object [][] getDatasFromArray(){Object [][] datas = {{"13323234545","123456","登录成功"},{"133232345451","123456","手机号码格式不正确"},{"13323234545","","密码不能位空"}};return datas;}

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

 

//指定数据提供者,注入测试数据到测试方法中实现数据驱动测试//需要注意的是:此时数据提供者返回的是一维数组,数组里元素类型是ExcelData对象,所以方法这里需要通过ExcelData类型接收@Test(dataProvider="getDatasFromExcel")public void test(ExcelData excelData) {//TODO}//从外部文件(Excel)中获取数据驱动测试所需的测试数据@DataProviderpublic Object [] getDatasFromExcel(){//读取指定SheetList<ExcelData> list = EasyExcel.read("filePath").head(ExcelData.class).sheet("Sheet1").doReadSync();//将集合转换为数组return list.toArray;}

数据驱动测试的优点:

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

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

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

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

**ps:**小编个人收集啦许多软测资料,希望能够帮到学软件测试的朋友们软件资料分享包括但不限于:Java自动化测试、Python自动化测试、性能测试、web测试、APP测试

测试开发工具包:appuim安装包、fiddler安装包(也有配套视频教程)、eclipse、git、jmeter、loadrunner、monkey、postman、soapul、Xmind等等

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【数据结构和算法】时间复杂度和空间复杂度
  • springBoot框架
  • 守护数字堡垒:全面掌握安全配置管理
  • 什么是令牌桶算法?工作原理是什么?使用它有哪些优点和注意事项?
  • C++ | 深入理解C++的IO流:从控制台输出流到文件输出流的应用
  • LeetCode面试题Day8|LeetCode13 罗马数字转整数、LeetCode12 整数转罗马数字
  • Events and the Kernel
  • HarmonyOS NEXT星河版零基础入门(2)
  • 3-2 光敏电阻(智能应用篇)
  • 构建坚不可摧的防线:全面指南到高效信息安全管理体系
  • 力扣第五十六题——合并区间
  • 设计模式-装饰者模式
  • ubuntu创建txt
  • 2024年TI杯E题-三子棋游戏装置方案分享-jdk123团队-第二弹 手搓机械臂
  • 搅拌站智能化改造,数字化管理如何助力降本增效?
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 07.Android之多媒体问题
  • 2017 年终总结 —— 在路上
  • css的样式优先级
  • ERLANG 网工修炼笔记 ---- UDP
  • Flex布局到底解决了什么问题
  • HTTP那些事
  • JavaScript设计模式与开发实践系列之策略模式
  • Java到底能干嘛?
  • JAVA多线程机制解析-volatilesynchronized
  • js作用域和this的理解
  • Shadow DOM 内部构造及如何构建独立组件
  • Vue.js-Day01
  • 复杂数据处理
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 解析带emoji和链接的聊天系统消息
  • 区块链分支循环
  • 学习笔记:对象,原型和继承(1)
  • 用简单代码看卷积组块发展
  • ​flutter 代码混淆
  • ​浅谈 Linux 中的 core dump 分析方法
  • #define与typedef区别
  • #Linux(帮助手册)
  • #QT(智能家居界面-界面切换)
  • #考研#计算机文化知识1(局域网及网络互联)
  • ${ }的特别功能
  • (1)SpringCloud 整合Python
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (动态规划)5. 最长回文子串 java解决
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (一)基于IDEA的JAVA基础1
  • (转)关于多人操作数据的处理策略
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET CORE Aws S3 使用
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .Net Core和.Net Standard直观理解
  • .Net Remoting(分离服务程序实现) - Part.3