在 ISuite class (TestNG) 中获取控制台参数
Get console parameters in ISuite class (TestNG)
我正在编写一个新的侦听器,以在套件开始和结束时打开和关闭数据库连接。我在 testng.xml 文件中定义了几个参数来存储数据库凭据,例如:
<parameter name="DB.user" value="user"/>
现在,我正在尝试在侦听器中获取此参数:
public class DatabaseListener implements ISuiteListener {
@Override
public void onStart(ISuite suite) {
System.out.println( suite.getXmlSuite().getParameter("DB.user"));
}
这工作正常,但我还需要如果我通过命令行覆盖值,这个参数将被更新:
-DDB.user=test
我总是得到 testng.xml(用户)中定义的值,而不是我在控制台(测试)中设置的值。
例如,在测试中我执行下一步以获取运行时值:
@BeforeClass()
@Parameters({"DB.user"})
public void beforeClass(String DBUser)
如何在侦听器中执行此操作?
感谢和问候。
TestNG 能够通过使用它们的名称更新 <parameters>
,然后使用通过 JVM 参数 (-D
) 提供的值覆盖它们的值。但这发生在更晚的阶段,远在实际 @Test
方法被调用之前。
但是当 TestNG 正在调用套件级别的侦听器时,情况并非如此,而这正是您正在做的。此时,TestNG 仍只是构建套件文件,上述参数值解析尚未发生。这就解释了为什么您总是看到套件文件中存在的值。
处理此问题的一种方法是执行以下操作:
public class DatabaseListener implements ISuiteListener {
@Override
public void onStart(ISuite suite) {
String fromSuite = suite.getXmlSuite().getParameter("DB.user");
String parameter = System.getProperty("DB.user", fromSuite);
System.out.println( parameter);
}
如您所见,您正在从系统属性中明确查询,同时定义来自您的套件的默认值。有点像 TestNG 解析参数的方式(但在稍后阶段)
我正在编写一个新的侦听器,以在套件开始和结束时打开和关闭数据库连接。我在 testng.xml 文件中定义了几个参数来存储数据库凭据,例如:
<parameter name="DB.user" value="user"/>
现在,我正在尝试在侦听器中获取此参数:
public class DatabaseListener implements ISuiteListener {
@Override
public void onStart(ISuite suite) {
System.out.println( suite.getXmlSuite().getParameter("DB.user"));
}
这工作正常,但我还需要如果我通过命令行覆盖值,这个参数将被更新:
-DDB.user=test
我总是得到 testng.xml(用户)中定义的值,而不是我在控制台(测试)中设置的值。
例如,在测试中我执行下一步以获取运行时值:
@BeforeClass()
@Parameters({"DB.user"})
public void beforeClass(String DBUser)
如何在侦听器中执行此操作?
感谢和问候。
TestNG 能够通过使用它们的名称更新 <parameters>
,然后使用通过 JVM 参数 (-D
) 提供的值覆盖它们的值。但这发生在更晚的阶段,远在实际 @Test
方法被调用之前。
但是当 TestNG 正在调用套件级别的侦听器时,情况并非如此,而这正是您正在做的。此时,TestNG 仍只是构建套件文件,上述参数值解析尚未发生。这就解释了为什么您总是看到套件文件中存在的值。
处理此问题的一种方法是执行以下操作:
public class DatabaseListener implements ISuiteListener {
@Override
public void onStart(ISuite suite) {
String fromSuite = suite.getXmlSuite().getParameter("DB.user");
String parameter = System.getProperty("DB.user", fromSuite);
System.out.println( parameter);
}
如您所见,您正在从系统属性中明确查询,同时定义来自您的套件的默认值。有点像 TestNG 解析参数的方式(但在稍后阶段)