如何通过(Maven、TestNG、Java)获取运行时值

如何通过(Maven、TestNG、Java)获取运行时值,java,maven,jenkins,testng,Java,Maven,Jenkins,Testng,我刚刚开始用Java自动化我的Web服务项目。我需要在Jenkins中运行它,所以我用TestNG框架和Maven构建了这个项目。我能够与Jenkins一起运行一些自动化测试套件,没有任何问题 现在我遇到的问题是,我需要在运行时获得用户输入(比如主机名、用户名、密码等),然后测试套件应该相应地运行 我面临的问题是,当在控制台中输入时,光标不会返回到程序,它很容易进入理想状态 PFA截图: 让您的测试具有交互性是绝对糟糕的方法-构建根本不可复制,让其他人知道预期的参数等等 如果您的测试用例需要在

我刚刚开始用Java自动化我的Web服务项目。我需要在Jenkins中运行它,所以我用TestNG框架和Maven构建了这个项目。我能够与Jenkins一起运行一些自动化测试套件,没有任何问题

现在我遇到的问题是,我需要在运行时获得用户输入(比如主机名、用户名、密码等),然后测试套件应该相应地运行

我面临的问题是,当在控制台中输入时,光标不会返回到程序,它很容易进入理想状态

PFA截图:


让您的测试具有交互性是绝对糟糕的方法-构建根本不可复制,让其他人知道预期的参数等等

如果您的测试用例需要在运行时获取参数(或者更准确地说,需要在maven构建开始之前设置参数),那么您有几个选项

选项#1。属性文件和maven资源处理。

想法就是在项目中有一个属性文件,并告诉maven解析变量 价值观。例如:

Pom.xml:

<resources>
  <resource>
    <directory>src/test/resources/data</directory>
    <filtering>true</filtering>
  </resource>
</resources>
然后以以下方式运行maven build:

mvn -DmyVar=value clean install
您不仅可以使用属性文件,还可以使用任何其他文件类型(例如XML)

提示:您可以使用maven enforcer插件强制用户输入-DmyVar,如果未设置所有必需的属性,该插件将无法生成

选项2。属性文件和Spring DI。

这个想法和上面的几乎一样,但Spring被用来注入所有必要的东西来测试类。比如:

@Component
public class MyTest
{
   @Value(${myProperty})
   private String myValue;

   // ... Test methods which can use myValue ...
}
有关可能的弹簧配置的完整示例,请参阅


顺便说一句,您的测试是一个单元测试,但是集成测试——如果它涉及部署web服务或类似的东西的话。因此,明智的做法是将单元测试(maven surefire插件)和集成测试(maven failsafe插件)分开。

为此使用
属性
配置文件
@Component
public class MyTest
{
   @Value(${myProperty})
   private String myValue;

   // ... Test methods which can use myValue ...
}