From 6578c50e9cffe9e436fe4a762d3d40529d1b71f0 Mon Sep 17 00:00:00 2001 From: Mohab Mohie Date: Mon, 19 Aug 2019 13:13:15 +0200 Subject: [PATCH] logging and reporting issue fixes --- pom.xml | 2 +- src/main/java/com/shaft/api/RestActions.java | 110 ++++++++++--------- 2 files changed, 60 insertions(+), 52 deletions(-) diff --git a/pom.xml b/pom.xml index c53c7e99f12..ba5e1c1b18c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mohies SHAFT_ENGINE - 2.6.20190818 + 2.6.20190819 SHAFT_ENGINE Selenium Hybrid Automation Framework for Testing [SHAFT] diff --git a/src/main/java/com/shaft/api/RestActions.java b/src/main/java/com/shaft/api/RestActions.java index 84bf3fe28b2..7ead1c6e393 100644 --- a/src/main/java/com/shaft/api/RestActions.java +++ b/src/main/java/com/shaft/api/RestActions.java @@ -7,6 +7,7 @@ import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.io.InputStream; import java.io.ObjectOutputStream; import java.io.StringReader; import java.io.StringWriter; @@ -99,34 +100,22 @@ private static void passAction(String actionName, String testData, Response resp if (testData != null) { message = message + " With the following test data [" + testData + "]."; } - - Boolean discreetLogging; + Boolean initialLoggingState = ReportManager.isDiscreteLogging(); if (isDiscrete) { - discreetLogging = isDiscrete; - } else { - discreetLogging = ReportManager.isDiscreteLogging(); - } - - if (discreetLogging) { + reportResponseBody(response, isDiscrete); ReportManager.logDiscrete(message); } else { - ReportManager.log(message); - } - - if (response != null) { - reportResponseBody(response, discreetLogging); + reportResponseBody(response, initialLoggingState); + if (!initialLoggingState) { + ReportManager.log(message); + } else { + ReportManager.logDiscrete(message); + } } - } private static void passAction(String actionName, String testData, Boolean isDiscrete) { - if (isDiscrete) { - ReportManager.setDiscreteLogging(true); - } passAction(actionName, testData, null, isDiscrete); - if (isDiscrete) { - ReportManager.setDiscreteLogging(false); - } } private static void failAction(String actionName, String testData, Response response) { @@ -247,42 +236,61 @@ private RequestSpecification prepareRequestSpecs(List> formParamete } private void reportRequestBody(Object body) { - if (ReportManager.isDiscreteLogging()) { - ReportManager.logDiscrete("API Request - REST Body:\n" + body.toString()); - } else { - if (body.toString() != null && !body.toString().equals("")) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream oos; - try { - oos = new ObjectOutputStream(baos); - - oos.writeObject(body); - oos.flush(); - oos.close(); - - ReportManager.attachAsStep("API Request", "REST Body", - new ByteArrayInputStream(baos.toByteArray())); - } catch (IOException e) { - ReportManager.attachAsStep("API Request", "REST Body", body.toString()); - } + if (body.toString() != null && !body.toString().equals("")) { + if (ReportManager.isDiscreteLogging()) { + ReportManager.logDiscrete("API Request - REST Body:\n" + parseBodyToJson(body)); + } else { + ReportManager.attachAsStep("API Request", "REST Body", parseBodyToJson(body)); } } } private static void reportResponseBody(Response response, Boolean isDiscrete) { - if (isDiscrete) { - ReportManager.logDiscrete("API Response - REST Body:\n" + response.getBody().asString()); - } else { - if (response.getBody().asString() != null && !response.getBody().asString().equals("")) { - JSONParser parser = new JSONParser(); - try { - org.json.simple.JSONObject actualJsonObject = (org.json.simple.JSONObject) parser - .parse(response.asString()); - ReportManager.attachAsStep("API Response", "REST Body", new GsonBuilder().setPrettyPrinting() - .create().toJson(new JsonParser().parse(actualJsonObject.toJSONString()))); - } catch (Exception e) { - // response is not parsable to JSON - ReportManager.attachAsStep("API Response", "REST Body", response.getBody().asInputStream()); + if (response != null) { + if (isDiscrete) { + ReportManager.logDiscrete("API Response - REST Body:\n" + parseBodyToJson(response)); + } else { + ReportManager.attachAsStep("API Response", "REST Body", parseBodyToJson(response)); + } + } + } + + private static InputStream parseBodyToJson(Response response) { + return parseBodyToJson(response.getBody()); + } + + private static InputStream parseBodyToJson(Object body) { + JSONParser parser = new JSONParser(); + try { + org.json.simple.JSONObject actualJsonObject; + if (body.getClass().getName().toLowerCase().contains("restassured")) { + // if it's a string response body + actualJsonObject = (org.json.simple.JSONObject) parser + .parse(((io.restassured.response.ResponseBody) body).asString()); + } else if (body.getClass().getName().toLowerCase().contains("jsonobject")) { + actualJsonObject = (org.json.simple.JSONObject) parser + .parse(((JsonObject) body).toString().replace("\\n", "").replace("\\t", "").replace(" ", "")); + } else { + actualJsonObject = (org.json.simple.JSONObject) parser.parse(body.toString()); + } + return new ByteArrayInputStream((new GsonBuilder().setPrettyPrinting().create() + .toJson(new JsonParser().parse(actualJsonObject.toJSONString()))).getBytes()); + } catch (Exception e) { + // response is not parsable to JSON + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos; + try { + oos = new ObjectOutputStream(baos); + oos.writeObject(body); + oos.flush(); + oos.close(); + return new ByteArrayInputStream(baos.toByteArray()); + } catch (IOException ioe) { + if (body.getClass().getName().toLowerCase().contains("restassured")) { + // if it's a string response body + return ((io.restassured.response.ResponseBody) body).asInputStream(); + } else { + return new ByteArrayInputStream((body.toString()).getBytes()); } } }