gpt4 book ai didi

java - TestNG中数据参数化的优化方式

转载 作者:行者123 更新时间:2023-11-28 21:25:44 25 4
gpt4 key购买 nike

我正在尝试使用 selenium 和 TestNG 创建一个框架。作为框架的一部分,我正在尝试实现数据参数化。但我对实现数据参数化的优化方式感到困惑。这是我采用的以下方法。

  1. 使用数据提供者(我正在从 excel 中读取并存储在对象 [][] 中)
  2. 用testng.xml

数据提供者的问题:

  1. 假设我的测试需要处理大量数据,比如说 15 种不同的数据,那么我需要向它传递 15 个参数。或者,如果我尝试创建一个类 TestData 来处理此参数并在其中维护,那么对于每个测试,都会有不同的数据集。所以我的 TestData 类将充满 40 多个不同的参数。

例如:在电子商务网站中,将存在许多不同的参数,例如帐户、卡片、产品、奖励、历史记录、商店位置等,为此我们可能需要至少 40 个不同的参数需要在测试数据中声明.我认为这不是一个可建议的解决方案。其他一些测试有时可能需要 10 个不同的测试数据,有些可能需要 12 个。甚至有时在单个测试中,一次迭代我只需要 7 个参数,在其他迭代中我需要 12 个参数。

我如何有效地管理它?

Testng.xml 的问题

维护 20 个不同的帐户、40 个不同的产品详细信息、卡片、历史记录都在一个 xml 文件中并配置测试套件(如并行执行)、仅配置要执行的特定类等,所有这些都会弄乱 testng.xml 文件

那么您能否建议在测试框架中处理数据的优化方法是什么?如何实时处理数据参数化、不同测试数据的迭代

最佳答案

假设每个测试都知道它将接收什么样的测试数据,这就是我建议您做的:

  • 让您的 testng 套件 xml 文件将要从中读取数据的文件名传递给数据提供者。
  • 构建您的数据提供者,使其接收文件名,通过 TestNG 参数从中读取文件名,然后构建一个通用映射作为测试数据迭代(每个测试都将接收其参数作为键值对映射),然后使用传入的 map 。

这样您将只有一个数据提供者,它可以真正处理任何事情。您可以让您的数据提供者处理测试方法,然后相应地提供值,从而使它更复杂一些。

这是我正在谈论的内容的框架实现。

public class DataProviderExample {

@Test (dataProvider = "dp")
public void testMethod(Map<String, String> testdata) {
System.err.println("****" + testdata);
}

@DataProvider (name = "dp")
public Object[][] getData(ITestContext ctx) {
//This line retrieves the value of <parameter name="fileName" value="/> from within the
//<test> tag of the suite xml file.
String fileName = ctx.getCurrentXmlTest().getParameter("fileName");
List<Map<String, String>> maps = extractDataFrom(fileName);
Object[][] testData = new Object[maps.size()][1];
for (int i = 0; i < maps.size(); i++) {
testData[i][0] = maps.get(i);
}
return testData;
}

private static List<Map<String, String>> extractDataFrom(String file) {
List<Map<String, String>> maps = Lists.newArrayList();
maps.add(Maps.newHashMap());
maps.add(Maps.newHashMap());
maps.add(Maps.newHashMap());
return maps;
}
}

关于java - TestNG中数据参数化的优化方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40954631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com