《手把手教你》系列基础篇(七十五)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 中篇(详解教程)

简介: 【6月更文挑战第16天】本文介绍了TestNG中`@DataProvider`的两种使用方法。本文通过实例展示了TestNG如何利用`@DataProvider`结合方法名和`ITestContext`来灵活地为测试方法传递参数。

1.简介

上一篇中介绍了DataProvider如何传递参数,以及和一些其他方法结合传递参数,今天宏哥接着把剩下的一些常用的也做一下简单的介绍和分享。

2.项目实战1

@DataProvider + 方法:此示例显示如何根据测试方法名称传递不同的参数。

2.1代码设计

2.2参考代码

package library;


import java.lang.reflect.Method;

import org.testng.Assert;

import org.testng.annotations.DataProvider;

import org.testng.annotations.Test;


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列基础篇(七十四)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 上篇(详解教程)

*

* 2022年2月23日

*/


public class TestParameterDataProvider {

   

   @Test(dataProvider = "dataProvider")

   public void test1(int number, int expected) {

       Assert.assertEquals(number, expected);

   }


   @Test(dataProvider = "dataProvider")

   public void test2(String email, String expected) {

       Assert.assertEquals(email, expected);

   }


   @DataProvider(name = "dataProvider")

   public Object[][] provideData(Method method) {


       Object[][] result = null;


       if (method.getName().equals("test1")) {

           result = new Object[][] {

               { 1, 1 }, { 200, 200 }

           };

       } else if (method.getName().equals("test2")) {

           result = new Object[][] {

               { "bjhg@gmail.com", "bjhg@gmail.com" },

               { "bjhg@yahoo.com", "bjhg@yahoo.com" }

           };

       }


       return result;


   }

}

2.3运行代码

1.运行代码,右键Run AS->TestNG Suite,控制台输出,如下图所示:

2.这里根据调用DataProvider的函数名,返回了不同的参数。由于没有指定运行顺序,所以Test会按照字母顺序然后再按数字执行,先执行Test1,然后Test2。

执行Test1时发现有两组参数,就先把第一组参数传进去执行一遍,再把第二组参数传进去执行一遍。执行Test2时也是同样的顺序,所以最后的执行顺序是:

①Test1输入第一组参数

②Test1输入第二组参数

③Test2输入第一组参数

④Test2输入第二组参数

3.项目实战2

@DataProvider + ITestContext:在TestNG中,我们可以使用org.testng.ITestContext来确定调用当前测试方法的运行时参数。 在最后一个例子中,我们将演示如何根据包含的分组名称传递参数。

在Dataprovider中可以带一个ITestContext 参数,从这个参数中可以获取该方法执行时的一些上下文信息,比如context.getIncludeGroups就可以得到这个测试执行的分组,这样在不同的分组中就可以可以向测试执行类传递不同的参数了。

3.1代码设计

1.创建一个名称为:TestParameterDataProvider.java 的文件, 其代码如下图所示:

2.按照宏哥前边讲解的方法,创建一个名称为:testng.xml 的文件, 其代码如下图所示:

xml version="1.0" encoding="UTF-8"?>

DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="Suite" parallel="tests" thread-count="2">

 <test name="example1">

     <groups>

         <run>

             <include name="groupA" />

         run>

     groups>

     <classes>

         <class name="library.TestParameterDataProvider" />

     classes>

 test>

suite>

3.2参考代码

package library;


import org.testng.Assert;

import org.testng.ITestContext;

import org.testng.annotations.DataProvider;

import org.testng.annotations.Test;


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列基础篇(七十四)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 上篇(详解教程)

*

* 2022年2月26日

*/


public class TestParameterDataProvider {


   @Test(dataProvider = "dataProvider", groups = { "groupA" })

   public void test1(int number) {

       Assert.assertEquals(number, 1);

   }


   @Test(dataProvider = "dataProvider", groups = "groupB")

   public void test2(int number) {

       Assert.assertEquals(number, 2);

   }


   @DataProvider(name = "dataProvider")

   public Object[][] provideData(ITestContext context) {


       Object[][] result = null;


       // get test name

       // System.out.println(context.getName());


       for (String group : context.getIncludedGroups()) {


           System.out.println("group : " + group);


           if ("groupA".equals(group)) {

               result = new Object[][] { { 1 } };

               break;

           }


       }


       if (result == null) {

           result = new Object[][] { { 2 } };

       }

       return result;


   }

}

3.3运行代码

1.运行代码,选中testng.xml文件,右键Run AS->TestNG Suite,控制台输出,如下图所示:

4.小结

 好了,时间也不早了,今天就分享和讲解到这里,希望对您有所帮助,感谢您耐心地阅读!


每天学习一点,今后必成大神-


往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问):


Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试

Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南

Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架

Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架

Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程

Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程

Pycharm工具基础使用教程

相关文章
|
4月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
5月前
|
人工智能 Java 开发者
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
JManus是阿里开源的Java版OpenManus,基于Spring AI Alibaba框架,助力Java开发者便捷应用AI技术。支持多Agent框架、网页配置、MCP协议及PLAN-ACT模式,可集成多模型,适配阿里云百炼平台与本地ollama。提供Docker与源码部署方式,具备无限上下文处理能力,适用于复杂AI场景。当前仍在完善模型配置等功能,欢迎参与开源共建。
2325 58
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
|
4月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
252 8
|
4月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
4月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
145 7
|
XML JSON 前端开发
阿里云JAVA高级测试试题及答案(十二)
阿里云JAVA高级测试试题及答案
349 0
阿里云JAVA高级测试试题及答案(十一)
阿里云JAVA高级测试试题及答案
294 0
|
XML 缓存 druid
阿里云JAVA高级测试试题及答案(十)
阿里云JAVA高级测试试题及答案
379 0
|
XML 缓存 前端开发
阿里云JAVA高级测试试题及答案(九)
阿里云JAVA高级测试试题及答案
255 0
|
XML 前端开发 JavaScript
阿里云JAVA高级测试试题及答案(八)
阿里云JAVA高级测试试题及答案(八)
411 0