我正在使用JUnit和一些我编写,修改或从现有代码库中获取的客户端,以将集成测试所需的文件推送到我想用于进行集成测试的系统。
这是preIntegration设置步骤。 Maven有自己的预集成步骤,但我认为它太不灵活了我想要的\需要\喜欢。
Float
在预集成@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;
}
}
步骤中,我要求提供一个用户名和密码,用于三个客户端中的两个(SCP和WebHDFS)。今年晚些时候,我们公司可能会实施Kerberos,这可能会使这个不必要;在过渡期间,这是我发现能使人快乐的唯一方法。是的,我知道我绕过了SSL的有用性,但我知道我正在连接的服务器,它的内部网络严重防火墙,这是一个概念证明,主要是。如果考虑将其投入生产,我会提出疑虑。
问题:当我自己运行集成测试Junit类时,事情正常。我收到提示输入用户名和密码,我可以输入它们。在此之后,类中的长测试用例将被执行,并且我已经验证了客户端实际上正在工作。没问题。然后,当我使用“集成测试”运行maven构建时,故障安全插件只需在其测试需要运行时停止。我正在通过Eclipse运行这个:
@Before
标题打印,然后构建似乎空闲\等待\停止。我甚至试过浏览Eclipse中的其他控制台窗口,看看JUnit是否在其他地方吐出System.out.print语句。
答案 0 :(得分:1)
我猜你的Test
等待的原因是,它期待inputs
。
要发送输入参数,您可以执行类似
mvn integration-test -Dusername=XXX -Dpassword=YYYY
要使用m2e,请在pom.xml中的failafe插件声明中使用它:
<configuration>
<systemPropertyVariables>
<username>${myUsername}</username>
<password>${myPassword}</password>
<host>${myHost}</host>
</systemPropertyVariables>
</configuration>
然后将变量放入“VM”中。您的&#39; Run As&#39;中的字段配置属性如下:
-Dusername=myUsername
-Dpassword=myPassword
-Dhost=myHost
然后,您将使用System.getProperty调用替换System.in调用。 (例如System.getProperty(&#34; username&#34;))。