2

我一直在使用 TestNG 的 DataProvider 功能编写测试脚本。到目前为止,我对自己的做法感到满意,因为我传递的参数数量少于 10 个,但是我正在测试的一些新页面有超过 30-35 个参数,将这些参数添加到测试方法中它看起来真的很难看,所以我开始使用 varArgs 'Object ...'。

它是动态传递参数的好方法,但是使用它们很困难,因为您必须非常小心索引,并且如果必须对很多方法执行此操作,则容易出错。

我尝试将测试数据作为 ArrayList> 传递,其中 HashMap 是列名-值对,但 TestNG 不会接受这个,因为 HashMap 不能转换为 Object[]。我想到使用 HashMap 的原因是因为您可以查询一个键并获取它的值,并且我知道该键。我本可以编写一个通用方法来获取该值并将其分配给表示页面上字段名称的变量。

数据源 (XLS) 仅存储在页面上输入的测试数据,因此它纯粹是数据驱动的,而不是基于关键字的。我正在测试的所有页面都是数据输入页面。

在测试数据上获得某种身份并让 TestNG 接受它的最佳方式是什么。

非常感谢这方面的任何帮助。

谢谢你,约翰

4

2 回答 2

2

为什么不使用 Map 作为测试方法的参数,并让 dataprovider 返回一个参数数组,该数组仅包含每个数据集的地图:

public class MyTest {

  @Test(...)
  public void testThis(Map<String,Object> args) {
    String arg1 = (String) args1.get("args1");
    ...
  }

  @Dataprovider(...)
  public Object[][] dataprovider() {
    return new Object[][]{
      { map("arg1", "foo") },
      { map("arg1", "bar", "arg2", new Object() }
    };
  }

  private Map<String,Object> map(Object... kv) {
    //helper that creates Map from Array for brevity.
  }

}

这应该通过模拟其他名为参数传递的语言来简化变量参数的使用。

于 2013-01-04T05:34:28.787 回答
1

为什么不编写自己的转换函数,将 Map 转换为 Object[],然后将其传递给 TestNG 方法?

于 2013-01-03T20:32:46.453 回答