REST API发布请求以Java将Cucumber.json文件发送到Jira

时间:2019-09-05 08:27:14

标签: java json cucumber jira-rest-api

我无法使用REST API发布请求将存储在.json文件中的黄瓜测试结果更新为Jira。我可以使用相同的方法来更新Cucumber中的功能,但不适用于我的Json结果文件。我对Java和Json很陌生。因此在理解它们时遇到了一些问题。

我尝试将Json文件转换为Json数组以及Json对象,但是它不起作用。

//下面是我的方法,该方法从项目获取文件路径和URL,以在Jira中的Xray上更新我的结果

public static void importCucumberResultFilesToJira(String filePath, String resultTypeUrlValue) throws IOException {
    String jiraUrl = config.getJiraLoginValue();
    log.info(String.format("Starting upload of Cucumber features to XRAY on Jira project: %s\n Using Jira user: %s ", config.getJiraProjectValue(), config.getJiraLoginValue()));
    log.info(String.format("Path to Report: %s", filePath));
    String authentication = config.getJiraLoginValue() + ':' + config.getJiraPassword();
    BASE64Encoder encoder = new BASE64Encoder();
    String encoded = null;
    try {
        encoded = encoder.encode((authentication).getBytes("UTF-8"));
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    Client client = ClientBuilder.newBuilder()
            .register(MultiPartFeature.class).property(HttpHeaders.AUTHORIZATION, encoded).build();

    //Import type is dynamic below
    StringBuffer url = new StringBuffer(resultTypeUrlValue);
    url.append("?projectKey=").append(config.getJiraProjectValue());
    WebTarget webTarget = client.target(url.toString());
    log.info(String.format("URL of the XRAY API: %s", url.toString()));

    //Read .json file
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader(filePath));
    } catch (FileNotFoundException e) {
        System.out.println("File not found");
        System.exit(1);
    }
    JsonParser parser = new JsonParser();
    Object obj = parser.parse(br);
    JsonArray arr = (JsonArray) obj;

    System.out.println(arr);

    Response response = webTarget.request()
            .accept(MediaType.APPLICATION_JSON).
                    header(HttpHeaders.AUTHORIZATION, "Basic " + encoded).post(
                    Entity.json(arr));
    log.info(response.getStatus() + " "
            + response.getStatusInfo() + " " + response);
    log.info(response.getStatus() + " "
            + response.getStatusInfo() + " " + response);
    log.info("End of XRAY file upload publication");

}

//我在POM.xml中的依赖项已发布,因为通过在SO和其他网站上进行的研究,有时某些依赖项会带来问题

<dependencies>

    <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java -->
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>4.7.2</version>
        <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-core -->
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-core</artifactId>
        <version>4.7.2</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apiguardian/apiguardian-api -->
    <dependency>
        <groupId>org.apiguardian</groupId>
        <artifactId>apiguardian-api</artifactId>
        <version>1.1.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-junit -->
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>4.7.2</version>
        <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.5.1</version>
        <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>2.28.2</version>
        <scope>test</scope>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.141.59</version>
    </dependency>

    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-picocontainer</artifactId>
        <version>4.5.3</version>
    </dependency>


    <!-- Web driver manager dependency -->

    <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>3.6.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>3.6.2</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.13.2</version>
        <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.1.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.glassfish/javax.json -->
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.json</artifactId>
        <version>1.0.4</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <dependency>
        <groupId>com.github.mkolisnyk</groupId>
        <artifactId>cucumber-runner</artifactId>
        <version>1.3.5</version>
    </dependency>

    <!-- Start - Following dependencies are for XRAY export functionalities -->

    <dependency>
        <groupId>com.xpandit.xray</groupId>
        <artifactId>xray-maven-plugin</artifactId>
        <version>1.0.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.28</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.28</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-common</artifactId>
        <version>2.28</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.inject</groupId>
        <artifactId>jersey-hk2</artifactId>
        <version>2.28</version>
    </dependency>

    <!-- End - Dependencies are for XRAY export functionalities -->

    <!-- https://mvnrepository.com/artifact/org.json/json -->
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20190722</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-json-jackson -->
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.29</version>
    </dependency>


</dependencies>

我用来导出文件的网址是https://jira.mydomain.net/rest/raven/1.0/import/execution/cucumber

当我从文件中提取Json主体并将其作为Postman中的POST请求发送时,它可以完美工作。我只想在我的Test Automation项目中实现与Java代码相同的功能。

任何帮助我获得200级身份的人将不胜感激。

1 个答案:

答案 0 :(得分:0)

好吧,我自己找到了问题的答案。我要做的就是将.json文件作为InputStream传递给Response而不是Json Array。我刚刚更换了

JsonParser parser = new JsonParser();
Object obj = parser.parse(br);
JsonArray arr = (JsonArray) obj;  

InputStream input = new FileInputStream(filePath);