我刚刚开始使用 Java 自动化我的 Web 服务项目。我需要在 Jenkins 中运行它,所以我使用 TestNG 框架和 Maven 构建了该项目。我可以使用 Jenkins 运行一些自动化测试套件,没有任何问题。
现在我遇到了这样的问题,我需要在运行时获取用户输入(例如主机名、用户名、密码等),然后测试套件应该相应地运行。
我面临的问题是,在控制台中输入输入时,光标不会返回到程序,并且很容易进入理想状态。
PFA 屏幕截图:
最佳答案
使测试具有交互性绝对是糟糕的方法 - 构建根本不可重现,会让其他人知道预期的参数等等。
如果您的测试用例需要在运行时获取参数(或更准确地说,需要在 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/