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

标签 java maven jenkins testng

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

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

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

PFA 屏幕截图:

Test case running as Maven build

Test case running as TestNG

最佳答案

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

如果您的测试用例需要在运行时获取参数(或更准确地说,需要在 Maven 构建开始之前设置它们),您有多种选择。

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

想法只是在你的项目中有一个属性文件并告诉maven解析变量 那里的值(value)观。示例:

Pom.xml:

<resources>
  <resource>
    <directory>src/test/resources/data</directory>
    <filtering>true</filtering>
  </resource>
</resources>

/src/test/resources/data/myproperties.properties:

myVar = ${myVar}

然后运行 ​​Maven 构建:

mvn -DmyVar=value clean install

您不仅可以使用属性文件,还可以使用任何其他文件类型(例如 XML)。

提示:您可以使用maven-enforcer-plugin强制用户输入-DmyVar,如果未设置所有必需的属性,此插件将导致构建失败。

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

想法与上面几乎相同,但是 Spring 用于向测试类注入(inject)所有必需的内容。像这样的东西:

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

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

参见this answer有关可能的 Spring 配置的完整示例。

顺便说一句,您的测试是单元测试,但是集成测试 - 如果它涉及部署您的网络服务或其他类似的东西。因此,明智的做法是将单元测试 (maven-surefire-plugin) 和集成测试 (maven-failsafe-plugin) 分开。

关于java - 如何通过(Maven、TestNG、Java)获取运行时值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20112808/

相关文章:

android - 在我将新版本发布到 jcenter 后,我的 Android 库不建议在 gradle 中升级新版本

ubuntu - 无法在 Ubuntu 上启动 Jenkins 服务

jenkins - 暂时停止运行 Jenkins 中的所有预定作业

java - Java 日志记录习惯的动机

Java - 如何扩展最终的 swt 类?如何创建包装类?

java - 如何实例化 MavenResolver 以供 ModelBuilder 使用?

maven - Jenkins/Maven 构建因 "Could not find the selected project in the reactor"错误而死亡

java - hibernate 异常: identifier of an instance of X was altered when trying to merge object

java - 从 VIM 编辑 .java 文件时运行 java 类的最简单方法

java - 0.20.2 API hadoop 版本与 java 5