Testng测试框架(3)-数据驱动TestNG@DataProvider

TestNG 是一个强大的 Java 测试框架,它提供了许多高级功能,如参数化测试、依赖注入、分组等。其中,@DataProvider 是 TestNG 中一个非常有用的注解,用于为测试方法提供数据。

@DataProvider 的作用

使用 @DataProvider 注解的方法可以为测试方法提供多组数据。这样,你就可以用同一组测试逻辑来测试不同的输入数据。

如何使用 @DataProvider

  1. 创建 @DataProvider 方法

这个方法应该返回一个 Object[][] 数组,其中每个内部数组代表一组测试数据。

@DataProvider(name = "testData")
public Object[][] createData() {return new Object[][] {{"input1", "expectedOutput1"},{"input2", "expectedOutput2"},// ... 更多数据};
}
  1. 在测试方法中使用 @TestdataProvider 属性

在测试方法上,使用 dataProvider 属性来指定要使用的数据提供器的名称。

@Test(dataProvider = "testData")
public void testMethod(String input, String expectedOutput) {// ... 测试逻辑// 使用 input 作为输入,并验证输出是否与 expectedOutput 匹配
}

注意事项

  • @DataProvider 方法可以是静态的或非静态的。
  • 如果 @DataProvider 方法返回 null 或空数组,则不会运行任何测试。
  • 如果 @Test 方法需要特定数量的参数,则 @DataProvider 返回的每个数组也必须有相同数量的元素。

示例

下面是一个简单的示例,展示如何使用 @DataProvider

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;public class MyTest {@DataProvider(name = "addNumbers")public Object[][] createData() {return new Object[][] {{2, 3, 5},{5, 7, 12},{-1, 1, 0}};}@Test(dataProvider = "addNumbers")public void testAdd(int a, int b, int expectedSum) {int actualSum = a + b;assert actualSum == expectedSum;}
}

示例登录场景

在这个示例中,createData 方法为 testAdd 方法提供了三组数据。testAdd 方法会对每组数据进行加法运算,并验证结果是否与预期一致。
举一个登录的场景,每种不同的输入都对应了不同的提示。

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;public class LoginTest {@Test(dataProvider = "data")public void testLogin(String username, String password,String prompt) {System.out.println("如果输入" + username + " password:" + password + " 提示:" + prompt);}@DataProvider(name = "data")public Object[][] dataProvider1() {return new Object[][]{{"admin", "123456", "登录成功"},{"admin", "1234567", "密码错误"},{"admin1", "123456", "用户名不存在"},{"admin", "123456", "登录成功"},{"admin", "123456", "登录成功"},{"admin", "123456", "登录成功"},{"admin", "123456", "登录成功"}};}
}

在这里插入图片描述
该函数是一个Java方法,用于提供测试数据。它使用了@Test注解,并指定了dataProvider的name为daa。这意味着在使用该测试数据时,需要在@Test注解中指定name为data。该方法返回一个Object二维数组,其中每个子数组代表一组测试数据,每个子数组的第一个元素是用户名,第二个元素是密码,第三个元素是预期结果。该函数提供了七组测试数据,包括了不同的用户名、密码和预期结果的情况

import org.testng.annotations.*;public class DataProviderExampleTest {@Test(dataProvider = "data")public void testLogin(String username, String password,String prompt) {System.out.println("如果输入" + username + " password:" + password + " 提示:" + prompt);}@DataProvider(name = "data")public Object[][] dataProvider1() {return new Object[][]{new Object[] {"admin", "123456", "登录成功"},new Object[]  {"admin", "1234567", "密码错误"},new Object[]  {"admin1", "123456", "用户名不存在"}};}}

在这里插入图片描述

并行运行

parallel如果设置为true,则使用此数据访问接口生成的测试将并行运行,默认值为false。

 @DataProvider(name = "data",parallel = true)public Object[][] dataProvider1() {return new Object[][]{new Object[] {"admin", "123456", "登录成功"},new Object[]  {"admin", "1234567", "密码错误"},new Object[]  {"admin1", "123456", "用户名不存在"}};

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

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

相关文章

【算法刷题day24】回溯算法+简单剪枝

77.组合 文档链接&#xff1a;[代码随想录] 题目链接&#xff1a;77.组合 题目&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 class Solution { private:vector<int> path;vector<vector&…

java数据结构与算法刷题-----LeetCode260. 只出现一次的数字 III

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 与运算取末尾1分组 与运算取末尾1分组 解题思路&#xff1a;时间…

文献速递:深度学习肝脏肿瘤诊断---基于多相增强 CT 和临床数据的恶性肝肿瘤鉴别诊断深度学习

Title 题目 Deep learning for diferential diagnosisof malignant hepatic tumors based on multi-phase contrast-enhanced CT and clinical data 基于多相增强 CT 和临床数据的恶性肝肿瘤鉴别诊断深度学习 Abstract 摘要 Liver cancer remains the leading cause of can…

Node.js 开发技巧

轻松创建 HTTP 服务器&#xff1a; 使用 Node.js&#xff0c;你可以轻松创建自己的 HTTP 服务器。只需几行代码&#xff0c;你就可以像一位传统的酒保一样为客户端提供服务。记住&#xff0c;不要忘记问客户端想要些什么&#xff01; const http require(http);const server …

事件冒泡、事件捕获、事件委托

事件冒泡、事件捕获、事件委托 事件冒泡和事件捕获: 解释事件冒泡和事件捕获的概念。 事件冒泡和事件捕获是DOM事件传播的两个阶段。当一个事件发生在DOM中的某个元素上时&#xff0c;它可以在父元素之间传播。事件捕获阶段从根节点开始&#xff0c;逐级向下直到触发事件的元素…

2024年150道高频Java面试题(二十六)

51. 线程和进程的区别&#xff1f; 线程和进程是操作系统中进行任务调度和资源分配的两个基本概念。 进程&#xff1a; 进程是操作系统进行资源分配的基本单位。每个进程都有独立的地址空间&#xff0c;一个进程崩溃后&#xff0c;在保护模式下不会影响到其他进程&#xff0…

计算机网络——TCP和UDP协议

目录 前言 前篇 引言 TCP与UDP之间的区别 TCP 三次握手 为什么要三次握手而不是两次握手&#xff1f; 丢包问题与乱序问题的解决 四次挥手 为什么客户端需要等待超时时间&#xff1f; UDP协议 TCP和UDP的主要区别 前言 本博客是博主用于复习计算机网络的博客&…

软件开发安全备受重视,浙江某运营商引入CWASP认证课程,

​浙江省某大型运营商是一家实力雄厚、服务优质的通信运营商&#xff0c;致力于为全省用户提供优质、高效的通信服务。数字时代&#xff0c;该运营商顺应信息能量融合发展趋势&#xff0c;系统打造以5G、算力网络、能力中台为重点的新型信息基础设施&#xff0c;夯实产业转型升…

Redis入门到通关之五大基本数据类型及其使用场景

文章目录 一 什么是NoSQL&#xff1f;二 Redis是什么&#xff1f;三 Redis五大基本类型1 String&#xff08;字符串&#xff09;应用场景 2 List&#xff08;列表&#xff09;应用场景 3 Set&#xff08;集合&#xff09;4 sorted set&#xff08;有序集合&#xff09;应用场景…

基于Python的邮件分类系统设计与实现

基于python的邮件分类系统设计与实现 Design and Implementation of a Python-based Email Classification System 完整下载链接:基于python的邮件分类系统设计与实现 文章目录 基于python的邮件分类系统设计与实现摘要第一章 引言1.1 研究背景1.2 研究目的1.3 研究内容1.4 创…

历史数据或许并不能反映未来趋势

历史数据可以帮助我们理解和分析过去的趋势和模式&#xff0c;从而推测未来的趋势。然而&#xff0c;历史数据并不能直接反映未来的趋势&#xff0c;因为未来的情况可能会受到许多不可预测的因素和变量的影响。历史数据可以作为参考和依据&#xff0c;但在预测未来趋势时需要综…

java内部类和引用传递的理解

日常中的疑惑&#xff0c;不能让他随意溜走 疑惑1&#xff1a; 看到一些代码常常用静态内部类&#xff0c;以及内部类&#xff0c;为什么我不经常用&#xff0c;偶尔是为了省事 才会用到内部类&#xff0c;难道还有一些其他好处&#xff1f; 内部类可以实现多重继承&#x…

代码随想录阅读笔记-回溯【组合总和II】

题目 给定一个数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 说明&#xff1a; 所有数字&#xff08;包括目标数&#xff09;都是正整数。解集不能包含重复的组…

VBA中如何对工作表进行排序

代码 在VBA中对工作表进行排序的最简单方法是直接使用Move方法来移动工作表。 Sub SortSheetsByNameDescending()Dim sheetsDim sheet As WorksheetDim i As Integer, j As IntegerDim sortedSheets() As Array 获取当前工作簿中的所有工作表Set sheets ThisWorkbook.Sheets…

numpy学习笔记(4),通用函数

7. 通用函数 通用函数(ufunc)使得NumPy数组操作用于数组中的每一个元素。通用函数是C语言实现的&#xff0c;这样会取得更快的执行效率。 7.1 数学运算函数 7.1.1 算术运算函数 通用函数说明add(x1, x2[, y])y x1 x2substrace(x1, x2[, y])y x1 - x2mulitply(x1, x2[, y…

MySQL索引、B+树相关知识汇总

MySQL索引、B树相关知识汇总 一、有一个查询需求&#xff0c;MySQL中有两个表&#xff0c;一个表1000W数据&#xff0c;另一个表只有几千数据&#xff0c;要做一个关联查询&#xff0c;如何优化&#xff1f;1、为关联字段建立索引二、小表驱动大表 二、b树和b树的区别1、更高的…

EventLoop

JavaScript是一门单线程执行的编程语言。同一时间只能做一件事情。单线程执行任务队列的问题&#xff1a;如果前一个任务非常耗时&#xff0c;则后续的任务就要一直等待&#xff0c;从而导致程序假死的问题。 1.同步任务和异步任务 同步任务&#xff1a;非耗时任务&#xff0…

什么是NLP?

&#x1f916;NLP是什么&#xff1f;&#x1f916; NLP&#xff08;Natural Language Processing&#xff09;&#xff0c;全称自然语言处理&#xff0c;是人工智能不可或缺的一环&#xff0c;它搭建了人与计算机之间沟通的桥梁&#x1f309;。 &#x1f6e0;️NLP强大功能一…

高校实习管理系统的设计与实现(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统高校实习管理系统信息管理难度大&#xff0c;容错率低&am…

C语言经典例题(23)

1.求n的阶乘。(不考虑溢出) #include <stdio.h>int fac(int n);int main() {int n 0;scanf("%d", &n);int sum fac(n);printf("%d", sum);return 0; }int fac(int n) {if (n > 1){return n * fac(n - 1);}elsereturn 1; }2.求第n个斐波那契…