我似乎尝试了所有可能的方法来实现这一目标,但没有运气。我在 DataProvider 中有一个复杂的代码(它确实以复杂的方式收集数据),我希望最终由 CI 对其进行参数化。
这里的第一个问题是如何读取 DataProvider 中的参数。
1 一种方法是通过以下方式从 testng.xml 获取参数:
String lolo = context.getCurrentXmlTest().getParameter("testcases");
但这并不能解决问题,因为 .xml 文件必须是静态的,而我想从 Maven 向它传递参数。
2 在我的例子中,另一种方法是从 @Factory 读取参数:
String testCaseDataFilename = (method.getAnnotation(Factory.class)).parameters()[0];
@Factory 在哪里:
@Factory(dataProvider="dataProviderMethod", parameters = {"authentication-testcases.json"})
它也可以工作,但同样不能解决问题,因为现在参数必须在java测试文件中进行编码,而我的@Factory本身使用@DataProvider,并且它无法隐式从Maven接收参数。
此外,我还有其他测试参数,这些参数是由Maven传递的,但它们仅在@Test测试中使用,而不是DataProvider,@BeforeSuite成功接收它们。
我会尝试简化:
我正在调用maven
-Dtestname=signUp -Dmyparam=1 test
我希望我的 DataProvider 接收 Dmyparam 的这个值并使用它来收集数据。我所实现的只是使用 @BeforeSuite 接收此数据并在全局范围内设置它,但问题是 DataProvider 在数据设置之前被调用。
最佳答案
-D
正在设置系统属性。
您可以使用 System.getProperty("MyParam")
在代码中获取它。
关于java - TestNG:从 Maven 将参数传递给 DataProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38834093/