Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用json格式自定义TestNG报告结果_Java_Selenium_Selenium Webdriver_Testng_Testng Eclipse - Fatal编程技术网

Java 如何使用json格式自定义TestNG报告结果

Java 如何使用json格式自定义TestNG报告结果,java,selenium,selenium-webdriver,testng,testng-eclipse,Java,Selenium,Selenium Webdriver,Testng,Testng Eclipse,我正在使用TestNG和SeleniumWebDriverJava。我想制作json格式的输出报告,testng可以制作json格式的报告吗?请给我举一个例子。您可以编写自己的报告程序,以生成所需格式的测试执行报告。下面是一个简单json报告器的示例 package test; import java.io.FileWriter; import java.io.IOException; import java.util.List; import java.util.Set; import o

我正在使用TestNG和SeleniumWebDriverJava。我想制作json格式的输出报告,testng可以制作json格式的报告吗?请给我举一个例子。

您可以编写自己的报告程序,以生成所需格式的测试执行报告。下面是一个简单json报告器的示例

package test;

import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.Set;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.testng.IReporter;
import org.testng.ISuite;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.xml.XmlSuite;

public class Reporter implements IReporter {

    @SuppressWarnings("unchecked")
    public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
        JSONArray results = new JSONArray();
        suites.forEach(element->{
            results.add(createSuiteJsonObject(element));
        });
        try (FileWriter file = new FileWriter(outputDirectory + "/report.json")) {
            file.write(results.toJSONString());
        } catch (IOException e) {
            //handle
        }

    }

    @SuppressWarnings("unchecked")
    public JSONObject createSuiteJsonObject(ISuite suite) {
        JSONObject result = new JSONObject();
        JSONArray passedMethods = new JSONArray();
        JSONArray failedMethods = new JSONArray();
        JSONArray skippedMethods = new JSONArray();
        suite.getResults().entrySet().forEach(element -> {
            ITestContext context = element.getValue().getTestContext();
            passedMethods.addAll(createResultJsonArray(context.getPassedTests().getAllResults()));
            failedMethods.addAll(createResultJsonArray(context.getFailedTests().getAllResults()));
            skippedMethods.addAll(createResultJsonArray(context.getSkippedTests().getAllResults()));
        });
        result.put("name", suite.getName());
        result.put("passed", passedMethods);
        result.put("failed", failedMethods);
        result.put("skipped", skippedMethods);
        return result;
    }

    @SuppressWarnings("unchecked")
    public JSONArray createResultJsonArray(Set<ITestResult> results) {
        JSONArray result = new JSONArray();
        results.forEach(element ->{
            JSONObject currentJsonResult = new JSONObject();
            currentJsonResult.put("name", element.getName());
            result.add(currentJsonResult);
        });
        return result;
    }


}

如果您使用POJO类存储输出响应,则use可以使用以下实现重写同一POJO类中的toString()方法

@Override
public String toString() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.enable(SerializationFeature.INDENT_OUTPUT);
    try {
        return mapper.writeValueAsString(this).replaceAll("\\n", "<br>").replaceAll("\\s", "&ensp;");
    } catch (JsonProcessingException e) {
        return e.getMessage();
    }
}
您将在Index.html文件的Reporter输出部分获得JSON格式的结果,如下所示

{ 
  "status" : "success", 
  "data" : [ { 
    "id" : 1, 
    "employee_name" : "Tiger Nixon", 
    "employee_salary" : 320800, 
    "employee_age" : 61, 
    "profile_image" : "" 
  }, { 
    "id" : 2, 
    "employee_name" : "Garrett Winters", 
    "employee_salary" : 170750, 
    "employee_age" : 63, 
    "profile_image" : "" 
  }, { 
    "id" : 3, 
    "employee_name" : "Ashton Cox", 
    "employee_salary" : 86000, 
    "employee_age" : 66, 
    "profile_image" : "" 
  }, { 
    "id" : 4, 
    "employee_name" : "Cedric Kelly", 
    "employee_salary" : 433060, 
    "employee_age" : 22, 
    "profile_image" : "" 
  }, { 
    "id" : 5, 
    "employee_name" : "Airi Satou", 
    "employee_salary" : 162700, 
    "employee_age" : 33, 
    "profile_image" : "" 
  }, { 
    "id" : 6, 
    "employee_name" : "Brielle Williamson", 
    "employee_salary" : 372000, 
    "employee_age" : 61, 
    "profile_image" : "" 
  }, { 
    "id" : 7, 
    "employee_name" : "Herrod Chandler", 
    "employee_salary" : 137500, 
    "employee_age" : 59, 
    "profile_image" : "" 
  }, { 
    "id" : 8, 
    "employee_name" : "Rhona Davidson", 
    "employee_salary" : 327900, 
    "employee_age" : 55, 
    "profile_image" : "" 
  }, { 
    "id" : 9, 
    "employee_name" : "Colleen Hurst", 
    "employee_salary" : 205500, 
    "employee_age" : 39, 
    "profile_image" : "" 
  }, { 
    "id" : 10, 
    "employee_name" : "Sonya Frost", 
    "employee_salary" : 103600, 
    "employee_age" : 23, 
    "profile_image" : "" 
  }, { 
    "id" : 11, 
    "employee_name" : "Jena Gaines", 
    "employee_salary" : 90560, 
    "employee_age" : 30, 
    "profile_image" : "" 
  }, { 
    "id" : 12, 
    "employee_name" : "Quinn Flynn", 
    "employee_salary" : 342000, 
    "employee_age" : 22, 
    "profile_image" : "" 
  }, { 
    "id" : 13, 
    "employee_name" : "Charde Marshall", 
    "employee_salary" : 470600, 
    "employee_age" : 36, 
    "profile_image" : "" 
  }, { 
    "id" : 14, 
    "employee_name" : "Haley Kennedy", 
    "employee_salary" : 313500, 
    "employee_age" : 43, 
    "profile_image" : "" 
  }, { 
    "id" : 15, 
    "employee_name" : "Tatyana Fitzpatrick", 
    "employee_salary" : 385750, 
    "employee_age" : 19, 
    "profile_image" : "" 
  }, { 
    "id" : 16, 
    "employee_name" : "Michael Silva", 
    "employee_salary" : 198500, 
    "employee_age" : 66, 
    "profile_image" : "" 
  }, { 
    "id" : 17, 
    "employee_name" : "Paul Byrd", 
    "employee_salary" : 725000, 
    "employee_age" : 64, 
    "profile_image" : "" 
  }, { 
    "id" : 18, 
    "employee_name" : "Gloria Little", 
    "employee_salary" : 237500, 
    "employee_age" : 59, 
    "profile_image" : "" 
  }, { 
    "id" : 19, 
    "employee_name" : "Bradley Greer", 
    "employee_salary" : 132000, 
    "employee_age" : 41, 
    "profile_image" : "" 
  }, { 
    "id" : 20, 
    "employee_name" : "Dai Rios", 
    "employee_salary" : 217500, 
    "employee_age" : 35, 
    "profile_image" : "" 
  }, { 
    "id" : 21, 
    "employee_name" : "Jenette Caldwell", 
    "employee_salary" : 345000, 
    "employee_age" : 30, 
    "profile_image" : "" 
  }, { 
    "id" : 22, 
    "employee_name" : "Yuri Berry", 
    "employee_salary" : 675000, 
    "employee_age" : 40, 
    "profile_image" : "" 
  }, { 
    "id" : 23, 
    "employee_name" : "Caesar Vance", 
    "employee_salary" : 106450, 
    "employee_age" : 21, 
    "profile_image" : "" 
  }, { 
    "id" : 24, 
    "employee_name" : "Doris Wilder", 
    "employee_salary" : 85600, 
    "employee_age" : 23, 
    "profile_image" : "" 
  } ] 
}
Reporter.log(pojoClass.toString());
{ 
  "status" : "success", 
  "data" : [ { 
    "id" : 1, 
    "employee_name" : "Tiger Nixon", 
    "employee_salary" : 320800, 
    "employee_age" : 61, 
    "profile_image" : "" 
  }, { 
    "id" : 2, 
    "employee_name" : "Garrett Winters", 
    "employee_salary" : 170750, 
    "employee_age" : 63, 
    "profile_image" : "" 
  }, { 
    "id" : 3, 
    "employee_name" : "Ashton Cox", 
    "employee_salary" : 86000, 
    "employee_age" : 66, 
    "profile_image" : "" 
  }, { 
    "id" : 4, 
    "employee_name" : "Cedric Kelly", 
    "employee_salary" : 433060, 
    "employee_age" : 22, 
    "profile_image" : "" 
  }, { 
    "id" : 5, 
    "employee_name" : "Airi Satou", 
    "employee_salary" : 162700, 
    "employee_age" : 33, 
    "profile_image" : "" 
  }, { 
    "id" : 6, 
    "employee_name" : "Brielle Williamson", 
    "employee_salary" : 372000, 
    "employee_age" : 61, 
    "profile_image" : "" 
  }, { 
    "id" : 7, 
    "employee_name" : "Herrod Chandler", 
    "employee_salary" : 137500, 
    "employee_age" : 59, 
    "profile_image" : "" 
  }, { 
    "id" : 8, 
    "employee_name" : "Rhona Davidson", 
    "employee_salary" : 327900, 
    "employee_age" : 55, 
    "profile_image" : "" 
  }, { 
    "id" : 9, 
    "employee_name" : "Colleen Hurst", 
    "employee_salary" : 205500, 
    "employee_age" : 39, 
    "profile_image" : "" 
  }, { 
    "id" : 10, 
    "employee_name" : "Sonya Frost", 
    "employee_salary" : 103600, 
    "employee_age" : 23, 
    "profile_image" : "" 
  }, { 
    "id" : 11, 
    "employee_name" : "Jena Gaines", 
    "employee_salary" : 90560, 
    "employee_age" : 30, 
    "profile_image" : "" 
  }, { 
    "id" : 12, 
    "employee_name" : "Quinn Flynn", 
    "employee_salary" : 342000, 
    "employee_age" : 22, 
    "profile_image" : "" 
  }, { 
    "id" : 13, 
    "employee_name" : "Charde Marshall", 
    "employee_salary" : 470600, 
    "employee_age" : 36, 
    "profile_image" : "" 
  }, { 
    "id" : 14, 
    "employee_name" : "Haley Kennedy", 
    "employee_salary" : 313500, 
    "employee_age" : 43, 
    "profile_image" : "" 
  }, { 
    "id" : 15, 
    "employee_name" : "Tatyana Fitzpatrick", 
    "employee_salary" : 385750, 
    "employee_age" : 19, 
    "profile_image" : "" 
  }, { 
    "id" : 16, 
    "employee_name" : "Michael Silva", 
    "employee_salary" : 198500, 
    "employee_age" : 66, 
    "profile_image" : "" 
  }, { 
    "id" : 17, 
    "employee_name" : "Paul Byrd", 
    "employee_salary" : 725000, 
    "employee_age" : 64, 
    "profile_image" : "" 
  }, { 
    "id" : 18, 
    "employee_name" : "Gloria Little", 
    "employee_salary" : 237500, 
    "employee_age" : 59, 
    "profile_image" : "" 
  }, { 
    "id" : 19, 
    "employee_name" : "Bradley Greer", 
    "employee_salary" : 132000, 
    "employee_age" : 41, 
    "profile_image" : "" 
  }, { 
    "id" : 20, 
    "employee_name" : "Dai Rios", 
    "employee_salary" : 217500, 
    "employee_age" : 35, 
    "profile_image" : "" 
  }, { 
    "id" : 21, 
    "employee_name" : "Jenette Caldwell", 
    "employee_salary" : 345000, 
    "employee_age" : 30, 
    "profile_image" : "" 
  }, { 
    "id" : 22, 
    "employee_name" : "Yuri Berry", 
    "employee_salary" : 675000, 
    "employee_age" : 40, 
    "profile_image" : "" 
  }, { 
    "id" : 23, 
    "employee_name" : "Caesar Vance", 
    "employee_salary" : 106450, 
    "employee_age" : 21, 
    "profile_image" : "" 
  }, { 
    "id" : 24, 
    "employee_name" : "Doris Wilder", 
    "employee_salary" : 85600, 
    "employee_age" : 23, 
    "profile_image" : "" 
  } ] 
}