运行 多个 curl 命令依次使用 java
Run multiple curl commands sequentially using java
我能够 运行 终端中的命令及其工作 fine.same 我想通过 java
实现的事情
token=$(curl -H "Content-Type: application/json" -X POST --data @"/Users/surya/KarateUIAutomation/target/surefire-reports/cloud_auth.json" https://xray.cloud.xpand-it.com/api/v2/authenticate| tr -d '"')
在第二个 curl 命令中,第一个标记作为参数传递
curl -H "Content-Type: application/json" -X POST -H "Authorization: Bearer $token" --data @"/Users/surya/KarateUIAutomation/target/surefire-reports/testcase.firstUITest.json" https://xray.cloud.xpand-it.com/api/v2/import/execution/cucumber
我已经编写了下面的 java 代码,但不确定如何按顺序传递上述 2 个命令和 运行
String[] command = {" "};
ProcessBuilder process = new ProcessBuilder(command);
Process p;
try
{
p = process.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuilder builder = new StringBuilder();
String line = null;
while ( (line = reader.readLine()) != null) {
builder.append(line);
builder.append(System.getProperty("line.separator"));
}
String result = builder.toString();
System.out.print(result);
}
catch (IOException e)
{ System.out.print("error");
e.printStackTrace();
}
}
您可以在下面的代码中看到一个具体示例,取自此 repo,它为 REST API 实现了 Java 客户端库。
或许您可以使用它(请参阅文档 here),从而避免最终必须实施它。
package net.azae.xray;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpClient {
private final static Logger logger = LoggerFactory.getLogger(HttpClient.class);
// TODO : get base URL from conf
String baseUrl = "https://xray.cloud.xpand-it.com";
public static String jsonPost(String toURL, String data, String token) {
URL url;
String response = "";
try {
url = new URL(toURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
if (token != null)
conn.setRequestProperty("Authorization", "Bearer " + token);
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(data);
writer.flush();
writer.close();
os.close();
int responseCode = conn.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((line = br.readLine()) != null) {
response += line;
}
} else {
response = "";
}
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
public static String jsonPost(String toURL, String data) {
return jsonPost(toURL, data, null);
}
String getToken(String json) {
String response = jsonPost(baseUrl + "/api/v1/authenticate", json);
return response.replace("\"", "");
}
void publishToXray(String token, String inputJson) {
logger.debug("Publish input: " + inputJson);
String response = jsonPost(baseUrl + "/api/v1/import/execution", inputJson, token);
logger.debug("Publish response: " + response);
}
}
https://gitlab.com/azae/outils/junit-xray/-/blob/master/src/main/java/net/azae/xray/HttpClient.java
我同意 M.P。 Korstanje,从 java 启动 curl 命令行 在从纯 java HTTP 库调用 URL 之前,这是一个糟糕的解决方案。
HttpClient.getToken 替换您的第一个 curl 命令 (https://gitlab.com/azae/outils/junit-xray/-/blob/master/src/main/java/net/azae/xray/HttpClient.java#L58)
您可以将其与此 java 代码一起使用:
String token = new HttpClient().getToken("{ " +
"\"client_id\": \"" + xray_client_id + "\", " +
"\"client_secret\": \"" + xray_client_secret + "\"" +
" }";);
可以更新 和 HttpClient.publishToXray 以推送黄瓜结果 (https://gitlab.com/azae/outils/junit-xray/-/blob/master/src/main/java/net/azae/xray/HttpClient.java#L63)
您可以将它与此 java 代码一起使用:
String json = "Your json"; //See https://docs.getxray.app/display/XRAYCLOUD/Import+Execution+Results+-+REST
new HttpClient().publishToXray(token, json);
我能够 运行 终端中的命令及其工作 fine.same 我想通过 java
实现的事情token=$(curl -H "Content-Type: application/json" -X POST --data @"/Users/surya/KarateUIAutomation/target/surefire-reports/cloud_auth.json" https://xray.cloud.xpand-it.com/api/v2/authenticate| tr -d '"')
在第二个 curl 命令中,第一个标记作为参数传递
curl -H "Content-Type: application/json" -X POST -H "Authorization: Bearer $token" --data @"/Users/surya/KarateUIAutomation/target/surefire-reports/testcase.firstUITest.json" https://xray.cloud.xpand-it.com/api/v2/import/execution/cucumber
我已经编写了下面的 java 代码,但不确定如何按顺序传递上述 2 个命令和 运行
String[] command = {" "};
ProcessBuilder process = new ProcessBuilder(command);
Process p;
try
{
p = process.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuilder builder = new StringBuilder();
String line = null;
while ( (line = reader.readLine()) != null) {
builder.append(line);
builder.append(System.getProperty("line.separator"));
}
String result = builder.toString();
System.out.print(result);
}
catch (IOException e)
{ System.out.print("error");
e.printStackTrace();
}
}
您可以在下面的代码中看到一个具体示例,取自此 repo,它为 REST API 实现了 Java 客户端库。 或许您可以使用它(请参阅文档 here),从而避免最终必须实施它。
package net.azae.xray;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpClient {
private final static Logger logger = LoggerFactory.getLogger(HttpClient.class);
// TODO : get base URL from conf
String baseUrl = "https://xray.cloud.xpand-it.com";
public static String jsonPost(String toURL, String data, String token) {
URL url;
String response = "";
try {
url = new URL(toURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
if (token != null)
conn.setRequestProperty("Authorization", "Bearer " + token);
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(data);
writer.flush();
writer.close();
os.close();
int responseCode = conn.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((line = br.readLine()) != null) {
response += line;
}
} else {
response = "";
}
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
public static String jsonPost(String toURL, String data) {
return jsonPost(toURL, data, null);
}
String getToken(String json) {
String response = jsonPost(baseUrl + "/api/v1/authenticate", json);
return response.replace("\"", "");
}
void publishToXray(String token, String inputJson) {
logger.debug("Publish input: " + inputJson);
String response = jsonPost(baseUrl + "/api/v1/import/execution", inputJson, token);
logger.debug("Publish response: " + response);
}
}
https://gitlab.com/azae/outils/junit-xray/-/blob/master/src/main/java/net/azae/xray/HttpClient.java
我同意 M.P。 Korstanje,从 java 启动 curl 命令行 在从纯 java HTTP 库调用 URL 之前,这是一个糟糕的解决方案。
HttpClient.getToken 替换您的第一个 curl 命令 (https://gitlab.com/azae/outils/junit-xray/-/blob/master/src/main/java/net/azae/xray/HttpClient.java#L58)
您可以将其与此 java 代码一起使用:
String token = new HttpClient().getToken("{ " +
"\"client_id\": \"" + xray_client_id + "\", " +
"\"client_secret\": \"" + xray_client_secret + "\"" +
" }";);
可以更新 和 HttpClient.publishToXray 以推送黄瓜结果 (https://gitlab.com/azae/outils/junit-xray/-/blob/master/src/main/java/net/azae/xray/HttpClient.java#L63)
您可以将它与此 java 代码一起使用:
String json = "Your json"; //See https://docs.getxray.app/display/XRAYCLOUD/Import+Execution+Results+-+REST
new HttpClient().publishToXray(token, json);