Output\Input 在 Maven 集成测试期间无法在 Junit 中工作
Output\Input Not working in Junit during Maven Integration Tests
我正在使用 JUnit 和一些我编写、修改或从现有代码库获取的客户端,将集成测试所需的文件推送到我想用来进行集成测试的系统。
这是预集成设置步骤。 Maven 有它自己的 pre-integration 步骤,但我只是觉得它对我 wanted\needed\liked.
来说太不灵活了
@Before
public void preIntegration() throws IOException, JSchException,
UnsupportedOperationException, IllegalArgumentException,
SecurityException, URISyntaxException, JSONException,
RuntimeException, NoSuchAlgorithmException, KeyStoreException,
KeyManagementException {
if (!firstTimeSetupDone) {
testConfig = new Properties();
testConfig.load(getClass().getResourceAsStream("/test-config"));
oozieClient = new OozieClientWithBlocking(
testConfig.getProperty("oozieUrl"));
BufferedReader in = new BufferedReader(new InputStreamReader(
System.in));
System.out.print("Username: ");
String username = in.readLine();
System.out.print("Password: ");
String password = in.readLine();
System.out.print("Host: ");
String host = in.readLine();
secureContext = new SecureContext(username, host);
secureContext.setPassword(password);
secureContext.setTrustAllHosts(true);
assertNotNull("Linux test file present",
getClass().getResource("/file.txt"));
URL resourceUrl = getClass().getResource("/file.txt");
System.out.println("Sending files to linux.");
Scp.exec(secureContext, resourceUrl.getPath(),
"/home/myUsername/file.txt");
SSLContextBuilder sslContextBuilder = new SSLContextBuilder();
TrustStrategy acceptAnyCertificate = new TrustStrategy() {
public boolean isTrusted(final X509Certificate[] chain,
String authType) throws CertificateException {
return true;
}
};
sslContextBuilder.loadTrustMaterial(null, acceptAnyCertificate);
SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(
sslContextBuilder.build());
BasicCredentialsProvider basicCredentialsProvider = new BasicCredentialsProvider();
Credentials credentials = new UsernamePasswordCredentials(username,
password);
basicCredentialsProvider.setCredentials(AuthScope.ANY, credentials);
HttpClientBuilder httpClientFactory = HttpClientBuilder.create();
httpClientFactory
.setDefaultCredentialsProvider(basicCredentialsProvider);
httpClientFactory.setSSLSocketFactory(sslConnectionSocketFactory);
CloseableHttpClient httpClient = httpClientFactory.build();
hdfsClient = new HDFSRestClient(httpClient,
testConfig.getProperty("nameNodeHttps"));
URL jar = getClass().getResource("/Utilities-1.4.0.jar");
System.out.println("Sending files to hdfs.");
hdfsClient
.create(jar.getPath(),
"/user/myUsername/java-action-workflow/lib/Utilities-1.4.0.jar");
properties = new Properties();
properties.setProperty("user.name", username);
System.out.println("Prep done.");
firstTimeSetupDone = true;
}
}
在 pre-integration @Before
步骤中,我要求提供将用于三个客户端中的两个 (SCP and WebHDFS) 的用户名和密码。今年晚些时候,我们公司可能会实施 Kerberos,这可能会变得不必要;在此期间,这是我发现能让人们开心的唯一方法。是的,我知道我正在绕过 SSL,但我知道我正在连接的服务器,它是一个受到严格防火墙保护的内部网络,这主要是一个概念证明。如果这被考虑投入生产,我会提出问题。
问题:当我 运行 集成测试 Junit class 本身时,一切正常。系统提示我输入用户名和密码,我可以输入它们。 class 中的长测试用例在那之后得到执行,并且我已经验证客户端确实在工作。没问题。然后,当我 运行 使用 "integration-test" 构建 Maven 时,故障安全插件只是 在其测试需要 运行 时停止 。我 运行通过 Eclipse 完成这一切:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Header 打印,然后构建似乎 idles\waits\stops。我什至尝试通过 Eclipse 中的其他控制台 windows 查看 JUnit 是否在其他地方吐出 System.out.print 语句。
我猜你 Test
等待的原因是,它期待 inputs
。
要发送输入参数,你可以这样做
mvn integration-test -Dusername=XXX -Dpassword=YYYY
要使它与 m2e 一起使用,请在 pom.xml:
中的故障安全插件声明中使用它
<configuration>
<systemPropertyVariables>
<username>${myUsername}</username>
<password>${myPassword}</password>
<host>${myHost}</host>
</systemPropertyVariables>
</configuration>
然后将变量放入 'Run As' 配置属性中的 'VM' 字段,如下所示:
-Dusername=myUsername
-Dpassword=myPassword
-Dhost=myHost
然后您将用 System.getProperty 个调用替换 System.in 个调用。 (例如 System.getProperty("username"))。
我正在使用 JUnit 和一些我编写、修改或从现有代码库获取的客户端,将集成测试所需的文件推送到我想用来进行集成测试的系统。
这是预集成设置步骤。 Maven 有它自己的 pre-integration 步骤,但我只是觉得它对我 wanted\needed\liked.
来说太不灵活了@Before
public void preIntegration() throws IOException, JSchException,
UnsupportedOperationException, IllegalArgumentException,
SecurityException, URISyntaxException, JSONException,
RuntimeException, NoSuchAlgorithmException, KeyStoreException,
KeyManagementException {
if (!firstTimeSetupDone) {
testConfig = new Properties();
testConfig.load(getClass().getResourceAsStream("/test-config"));
oozieClient = new OozieClientWithBlocking(
testConfig.getProperty("oozieUrl"));
BufferedReader in = new BufferedReader(new InputStreamReader(
System.in));
System.out.print("Username: ");
String username = in.readLine();
System.out.print("Password: ");
String password = in.readLine();
System.out.print("Host: ");
String host = in.readLine();
secureContext = new SecureContext(username, host);
secureContext.setPassword(password);
secureContext.setTrustAllHosts(true);
assertNotNull("Linux test file present",
getClass().getResource("/file.txt"));
URL resourceUrl = getClass().getResource("/file.txt");
System.out.println("Sending files to linux.");
Scp.exec(secureContext, resourceUrl.getPath(),
"/home/myUsername/file.txt");
SSLContextBuilder sslContextBuilder = new SSLContextBuilder();
TrustStrategy acceptAnyCertificate = new TrustStrategy() {
public boolean isTrusted(final X509Certificate[] chain,
String authType) throws CertificateException {
return true;
}
};
sslContextBuilder.loadTrustMaterial(null, acceptAnyCertificate);
SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(
sslContextBuilder.build());
BasicCredentialsProvider basicCredentialsProvider = new BasicCredentialsProvider();
Credentials credentials = new UsernamePasswordCredentials(username,
password);
basicCredentialsProvider.setCredentials(AuthScope.ANY, credentials);
HttpClientBuilder httpClientFactory = HttpClientBuilder.create();
httpClientFactory
.setDefaultCredentialsProvider(basicCredentialsProvider);
httpClientFactory.setSSLSocketFactory(sslConnectionSocketFactory);
CloseableHttpClient httpClient = httpClientFactory.build();
hdfsClient = new HDFSRestClient(httpClient,
testConfig.getProperty("nameNodeHttps"));
URL jar = getClass().getResource("/Utilities-1.4.0.jar");
System.out.println("Sending files to hdfs.");
hdfsClient
.create(jar.getPath(),
"/user/myUsername/java-action-workflow/lib/Utilities-1.4.0.jar");
properties = new Properties();
properties.setProperty("user.name", username);
System.out.println("Prep done.");
firstTimeSetupDone = true;
}
}
在 pre-integration @Before
步骤中,我要求提供将用于三个客户端中的两个 (SCP and WebHDFS) 的用户名和密码。今年晚些时候,我们公司可能会实施 Kerberos,这可能会变得不必要;在此期间,这是我发现能让人们开心的唯一方法。是的,我知道我正在绕过 SSL,但我知道我正在连接的服务器,它是一个受到严格防火墙保护的内部网络,这主要是一个概念证明。如果这被考虑投入生产,我会提出问题。
问题:当我 运行 集成测试 Junit class 本身时,一切正常。系统提示我输入用户名和密码,我可以输入它们。 class 中的长测试用例在那之后得到执行,并且我已经验证客户端确实在工作。没问题。然后,当我 运行 使用 "integration-test" 构建 Maven 时,故障安全插件只是 在其测试需要 运行 时停止 。我 运行通过 Eclipse 完成这一切:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Header 打印,然后构建似乎 idles\waits\stops。我什至尝试通过 Eclipse 中的其他控制台 windows 查看 JUnit 是否在其他地方吐出 System.out.print 语句。
我猜你 Test
等待的原因是,它期待 inputs
。
要发送输入参数,你可以这样做
mvn integration-test -Dusername=XXX -Dpassword=YYYY
要使它与 m2e 一起使用,请在 pom.xml:
中的故障安全插件声明中使用它<configuration>
<systemPropertyVariables>
<username>${myUsername}</username>
<password>${myPassword}</password>
<host>${myHost}</host>
</systemPropertyVariables>
</configuration>
然后将变量放入 'Run As' 配置属性中的 'VM' 字段,如下所示:
-Dusername=myUsername
-Dpassword=myPassword
-Dhost=myHost
然后您将用 System.getProperty 个调用替换 System.in 个调用。 (例如 System.getProperty("username"))。