Skip to content

Commit

Permalink
ISS-226 # JUnit5 Jupiter Load Extension - Green
Browse files Browse the repository at this point in the history
  • Loading branch information
authorjapps committed Apr 25, 2019
1 parent 2062221 commit f720e9e
Show file tree
Hide file tree
Showing 38 changed files with 1,020 additions and 125 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ hs_err_pid*
*.idea
/target
.DS_Store

package.properties

#for eclipse
.classpath
Expand Down
16 changes: 16 additions & 0 deletions core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,22 @@
</repositories>

<dependencies>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package org.jsmart.zerocode.core.domain;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface LoadWith {
String value();
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package org.jsmart.zerocode.core.domain;


import java.lang.annotation.*;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Repeatable( value = TestMappings.class )
public @interface TestMapping {
Class<?> testClass();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package org.jsmart.zerocode.core.domain;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestMappings {
public TestMapping[] value() default {};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
import static org.jsmart.zerocode.core.domain.reports.ZeroCodeReportProperties.TARGET_REPORT_DIR;
import static org.slf4j.LoggerFactory.getLogger;

public class ZeroCodeReportBuilder {
private static final org.slf4j.Logger LOGGER = getLogger(ZeroCodeReportBuilder.class);
public class ZeroCodeExecResultIoWriteBuilder {
private static final org.slf4j.Logger LOGGER = getLogger(ZeroCodeExecResultIoWriteBuilder.class);
public static final int REPORT_WRITING_THREAD_POOL = 5;

private LocalDateTime timeStamp;
Expand All @@ -28,8 +28,8 @@ public class ZeroCodeReportBuilder {

private ExecutorService executorService = Executors.newFixedThreadPool(REPORT_WRITING_THREAD_POOL);

public static ZeroCodeReportBuilder newInstance() {
return new ZeroCodeReportBuilder();
public static ZeroCodeExecResultIoWriteBuilder newInstance() {
return new ZeroCodeExecResultIoWriteBuilder();
}

public ZeroCodeReport build() {
Expand All @@ -39,17 +39,17 @@ public ZeroCodeReport build() {
return built;
}

public ZeroCodeReportBuilder timeStamp(LocalDateTime timeStamp) {
public ZeroCodeExecResultIoWriteBuilder timeStamp(LocalDateTime timeStamp) {
this.timeStamp = timeStamp;
return this;
}

public ZeroCodeReportBuilder results(List<ZeroCodeExecResult> results) {
public ZeroCodeExecResultIoWriteBuilder results(List<ZeroCodeExecResult> results) {
this.results = results;
return this;
}

public ZeroCodeReportBuilder result(ZeroCodeExecResult result) {
public ZeroCodeExecResultIoWriteBuilder result(ZeroCodeExecResult result) {
this.results.add(result);
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class ZeroCodeReportStepBuilder {
String request;
String response;
String id;
String assertions;

public static ZeroCodeReportStepBuilder newInstance() {
return new ZeroCodeReportStepBuilder();
Expand All @@ -27,7 +28,7 @@ public ZeroCodeReportStep build() {
loop, name, url,
correlationId, operation, requestTimeStamp,
responseTimeStamp, responseDelay, result,
request, response);
request, response, assertions);
return built;
}

Expand Down Expand Up @@ -86,6 +87,11 @@ public ZeroCodeReportStepBuilder result(String result) {
return this;
}

public ZeroCodeReportStepBuilder assertions(String assertions) {
this.assertions = assertions;
return this;
}

public ZeroCodeReportStepBuilder id(String id) {
this.id = id;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,22 @@ public class ZeroCodeReportStep {
private final String result;
private final String request;
private final String response;
private final String assertions;

@JsonCreator
public ZeroCodeReportStep(
@JsonProperty("stepLoop")Integer loop,
@JsonProperty("name")String name,
@JsonProperty("url")String url,
@JsonProperty("correlationId")String correlationId,
@JsonProperty("operation")String operation,
@JsonProperty("requestTimeStamp")LocalDateTime requestTimeStamp,
@JsonProperty("responseTimeStamp")LocalDateTime responseTimeStamp,
@JsonProperty("responseDelay")Double responseDelay,
@JsonProperty("result")String result,
@JsonProperty("request")String request,
@JsonProperty("response")String response
) {
@JsonProperty("stepLoop") Integer loop,
@JsonProperty("name") String name,
@JsonProperty("url") String url,
@JsonProperty("correlationId") String correlationId,
@JsonProperty("operation") String operation,
@JsonProperty("requestTimeStamp") LocalDateTime requestTimeStamp,
@JsonProperty("responseTimeStamp") LocalDateTime responseTimeStamp,
@JsonProperty("responseDelay") Double responseDelay,
@JsonProperty("result") String result,
@JsonProperty("request") String request,
@JsonProperty("response") String response,
@JsonProperty("assertions") String assertions) {
this.loop = loop;
this.name = name;
this.url = url;
Expand All @@ -50,6 +51,7 @@ public ZeroCodeReportStep(
this.result = result;
this.request = request;
this.response = response;
this.assertions = assertions;
}

public Integer getLoop() {
Expand Down Expand Up @@ -92,14 +94,14 @@ public String getRequest() {
return request;
}

// public JsonNode getRequest() throws IOException {
// return new ObjectMapperProvider().get().readTree(request);
// }

public String getResponse() {
return response;
}

public String getAssertions() {
return assertions;
}

@Override
public String toString() {
return "ZeroCodeReportStep{" +
Expand All @@ -114,6 +116,7 @@ public String toString() {
", result='" + result + '\'' +
", request='" + request + '\'' +
", response='" + response + '\'' +
", assertions='" + assertions + '\'' +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package org.jsmart.zerocode.core.engine.listener;

import java.time.LocalDateTime;
import org.jsmart.zerocode.core.domain.builders.ZeroCodeExecResultBuilder;
import org.jsmart.zerocode.core.domain.builders.ZeroCodeExecResultIoWriteBuilder;
import org.jsmart.zerocode.core.logbuilder.LogCorrelationshipPrinter;
import org.junit.platform.engine.TestExecutionResult;
import org.junit.platform.launcher.TestExecutionListener;
import org.junit.platform.launcher.TestIdentifier;
import org.junit.platform.launcher.TestPlan;
import org.slf4j.Logger;

import static java.time.LocalDateTime.now;
import static org.jsmart.zerocode.core.domain.builders.ZeroCodeExecResultBuilder.newInstance;
import static org.junit.platform.engine.TestExecutionResult.Status.FAILED;
import static org.slf4j.LoggerFactory.getLogger;

/**
* This class correlates between request and response of a test and creates easily traceable logs.
* Here, for each JUnit5 parallel tests this can be interpreted the following way-
* - a) Request timestamp - When the test started execution
* - b) Response timestamp - When the test finished execution
* - c) Response Delay(milli second) - (b-a) milli seconds
* - d) Scenario: Fully qualified name of the Test-Class
* - e) Step: Name of the Test-Method in the above Test-Class with @Test(jupiter package)
*
* Later the logs are written to the target folder as raw JSON files ready for rendering
* CSV-reports and Html-Chart/Dashboards
*
* @author Nirmal Chandra on 25-apr-2019
*/
public class ZeroCodeTestReportJupiterListener implements TestExecutionListener {
private static final Logger LOGGER = getLogger(ZeroCodeTestReportJupiterListener.class);

private final Class<?> testClass;
private final String testMethod;
private String testDescription;

private LogCorrelationshipPrinter correlationshipPrettyLogger;
private String logPrefixRelationshipId;
private boolean passed=true;

public ZeroCodeTestReportJupiterListener(Class<?> testClass, String testMethod) {
this.testClass = testClass;
this.testMethod = testMethod;
this.testDescription = testClass + "#" + testMethod;
}

@Override
public void testPlanExecutionStarted(TestPlan testPlan) {
logPrefixRelationshipId = prepareRequestReport(testDescription);
}

@Override
public void testPlanExecutionFinished(TestPlan testPlan) {
prepareResponseReport(logPrefixRelationshipId);
buildReportAndPrintToFile(testDescription);
}

@Override
public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult testExecutionResult) {
if(testExecutionResult.getStatus().equals(FAILED)){
passed = false;
}
}

private String prepareRequestReport(String description) {
correlationshipPrettyLogger = LogCorrelationshipPrinter.newInstance(LOGGER);
correlationshipPrettyLogger.stepLoop(0);
final String logPrefixRelationshipId = correlationshipPrettyLogger.createRelationshipId();
LocalDateTime timeNow = now();
correlationshipPrettyLogger.aRequestBuilder()
.stepLoop(0)
.relationshipId(logPrefixRelationshipId)
.requestTimeStamp(timeNow)
.step(testMethod);
LOGGER.info("JUnit5 *requestTimeStamp:{}, \nJUnit Request:{}", timeNow, logPrefixRelationshipId);
return logPrefixRelationshipId;
}

private void prepareResponseReport(String logPrefixRelationshipId) {
LocalDateTime timeNow = now();
LOGGER.info("JUnit5 *responseTimeStamp:{}, \nJUnit Response:{}", timeNow, logPrefixRelationshipId);
correlationshipPrettyLogger.aResponseBuilder()
.relationshipId(logPrefixRelationshipId)
.responseTimeStamp(timeNow);
correlationshipPrettyLogger.result(passed);
correlationshipPrettyLogger.buildResponseDelay();
}

private void buildReportAndPrintToFile(String description) {
ZeroCodeExecResultBuilder reportResultBuilder = newInstance().loop(0).scenarioName(testClass.getName());
reportResultBuilder.step(correlationshipPrettyLogger.buildReportSingleStep());

ZeroCodeExecResultIoWriteBuilder reportBuilder = ZeroCodeExecResultIoWriteBuilder.newInstance().timeStamp(now());
reportBuilder.result(reportResultBuilder.build());

reportBuilder.printToFile(description + correlationshipPrettyLogger.getCorrelationId() + ".json");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,13 @@ public ZeroCodeReportStep buildReportSingleStep() {
ZeroCodeReportStepBuilder zeroCodeReportStep = ZeroCodeReportStepBuilder.newInstance()
//.request(requestLogBuilder.request) //TODO
//.response(responseLogBuilder.response) //TODO
//.assertions()
.loop(stepLoop)
.name(requestLogBuilder.getStepName())
.correlationId(getCorrelationId())
.result(result == true? RESULT_PASS : RESULT_FAIL)
.url(requestLogBuilder.getUrl())
.operation(requestLogBuilder.getMethod())
.result(responseLogBuilder.getAssertion())
.assertions(responseLogBuilder.getAssertion())
.requestTimeStamp(requestLogBuilder.getRequestTimeStamp())
.responseTimeStamp(responseLogBuilder.responseTimeStamp)
.responseDelay(responseDelay)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,16 +69,17 @@ public class ZeroCodeReportGeneratorImpl implements ZeroCodeReportGenerator {
@Named("interactive.html.report.disabled")
private boolean interactiveHtmlReportDisabled;

@Inject
private ObjectMapper mapper;
private final ObjectMapper mapper;

private List<ZeroCodeReport> treeReports;

private List<ZeroCodeCsvReport> zeroCodeCsvFlattenedRows;

private List<ZeroCodeCsvReport> csvRows = new ArrayList<>();

public ZeroCodeReportGeneratorImpl() {
@Inject
public ZeroCodeReportGeneratorImpl(ObjectMapper mapper) {
this.mapper = mapper;
}

@Override
Expand Down Expand Up @@ -114,7 +115,7 @@ public void generateExtentReport() {
step.info(MarkupHelper.createCodeBlock(thisStep.getOperation() + "\t" + thisStep.getUrl()));
step.info(MarkupHelper.createCodeBlock(thisStep.getRequest(), CodeLanguage.JSON));
step.info(MarkupHelper.createCodeBlock(thisStep.getResponse(), CodeLanguage.JSON));
step.fail(MarkupHelper.createCodeBlock("Reason:\n" + thisStep.getResult()));
step.fail(MarkupHelper.createCodeBlock("Reason:\n" + thisStep.getAssertions()));
}
extentReports.flush();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import org.jsmart.zerocode.core.domain.ScenarioSpec;
import org.jsmart.zerocode.core.domain.Step;
import org.jsmart.zerocode.core.domain.builders.ZeroCodeExecResultBuilder;
import org.jsmart.zerocode.core.domain.builders.ZeroCodeReportBuilder;
import org.jsmart.zerocode.core.domain.builders.ZeroCodeExecResultIoWriteBuilder;
import org.jsmart.zerocode.core.engine.assertion.AssertionReport;
import org.jsmart.zerocode.core.engine.assertion.JsonAsserter;
import org.jsmart.zerocode.core.engine.executor.JsonServiceExecutor;
Expand Down Expand Up @@ -72,7 +72,7 @@ public class ZeroCodeMultiStepsScenarioRunnerImpl implements ZeroCodeMultiStepsS

private static StepNotificationHandler notificationHandler = new StepNotificationHandler();

private ZeroCodeReportBuilder reportBuilder;
private ZeroCodeExecResultIoWriteBuilder reportBuilder;

private ZeroCodeExecResultBuilder reportResultBuilder;

Expand All @@ -83,7 +83,7 @@ public synchronized boolean runScenario(ScenarioSpec scenario, RunNotifier notif

LOGGER.info("\n-------------------------- BDD: Scenario:{} -------------------------\n", scenario.getScenarioName());

reportBuilder = ZeroCodeReportBuilder.newInstance().timeStamp(LocalDateTime.now());
reportBuilder = ZeroCodeExecResultIoWriteBuilder.newInstance().timeStamp(LocalDateTime.now());

ScenarioExecutionState scenarioExecutionState = new ScenarioExecutionState();

Expand Down
Loading

0 comments on commit f720e9e

Please sign in to comment.