《手把手教你》系列基础篇(七十五)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 中篇(详解教程)
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相关设置,这里paraller是执行的模式,有tests classes methods三种取值,thread-count表示两个线程执行用例 --> <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> <!-- 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.小结
好了,时间也不早了,今天就分享和讲解到这里,希望对您有所帮助,感谢您耐心地阅读!
感谢您花时间阅读此篇文章,如果您觉得这篇文章你学到了东西也是为了犒劳下博主的码字不易不妨打赏一下吧,让博主能喝上一杯咖啡,在此谢过了!
如果您觉得阅读本文对您有帮助,请点一下左下角“推荐”按钮,您的
本文版权归作者和博客园共有,来源网址:https://www.cnblogs.com/du-hong 欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!
公众号(关注宏哥)                                                                                 客服微信