Skip to content
authorjapps edited this page Sep 12, 2019 · 62 revisions

Use the sidebar on the right for all topics or "Ctrl+f" search for any topic

Welcome To Zerocode

Table Of Contents

Super Easy to Write BDD Tests

Zerocode helps you to design better Test Cases for your business features, then maintain and update them easily to avoid sleepless nights. It is built on extending the Junit core runners. You simply annotate your test method with JUnit @Test and run like JUnit tests.

Testing becomes an easy and effortless job due to the simplicity nature of YAML/JSON native support by popular IDEs e.g. Eclipse /IntelliJ /NetBeans etc with no extra plugin. Super easy!

Zerocode Tokens

Zerocode provides built-in tokens that help with your testing ranging from generating random numbers through to accessing system properties, currently Zerocode offers the following tokens:

Verifications/Assertions Tokens:

No Complexity Involved

Your tests will not be cumbersome and complex anymore. Zerocode makes your tests independent, complete and structured and easily maintainable by the team or the newcomers. It enables you to write your API End Point Tests, Consumer Contract Tests, End to End Tests, In Memory Application Tests, Performance Tests(Load/Stress) and API Security Tests etc, at the speed of writing JUnit tests with the accuracy, transparent to all stakeholders.

Zerocode at its core uses simple and powerful libs like Jackson for JSON assertions, Apache HttpClient for invoking REST and SOAP APIs, Google Guice for DI and Spring style place holders ${JSON Path} for result validations.

It does not limit you to use Apache HttpClient, it enables you to easily override the framework behavior with @UseHttpClient to use e.g. UniRest HttpClient, RestEasy HttpClient or any of your custom HttpClient that suits your project needs.

Plug and Play Security Testing

Zerocode gives you out of the box SSL enabled Http Client and SOAP Client along with the optional MIME type converters e.g. XML to JSON if needed to increase test readability. It provides you with the options to configure Corporate Proxy at runtime to allow API invocations via proxies.

Zerocode has built general functionality which enables you to extend and enrich the framework behaviour by simply executing external Java methods to achieve business goals rather than putting every feature into the core framework.

Beautiful and Useful Reporting

Zerocode prints the request, response into the console as well as to the log file in the /target folder in a human/business readable format, along with producing granular report in the CSV format and Interactive Fuzzy Search Enabled Chart report. You can search and filter the test report by author or test-scenario or test-step or any relevant matching text making it super easy to trace a step in the context of a scenario or user-journey.

Easy to Collaborate

Zerocode aims to make development and testing easier and faster, not harder and slower. Allows both Dev team and Test team to collaborate towards better better quality of the software. Even the managers and BAs can read and understand the tests easily.

Handy Even For Manual Testers or Architects

It's used as a handy tool even for manual testers dealing with Kafka Data Pipeline, REST API, SOAP API and DB Integrity tests much more to keep it side by side of Postman rest-client!

It allows you to override the framework behavior by your own java code which becomes not only reusable but becomes a part of the framework.

See the HelloWorldTest

No feature files, no extra plugins, no statements or grammar syntax overhead.

How?

<dependency>
    <groupId>org.jsmart</groupId>
    <artifactId>zerocode-tdd</artifactId>
    <version>1.3.x</version>
</dependency>

Sample Test Report

Test reports are generated into /target folder every time the tests are run. Sample reports are here format.

Sample Test Logs

Test logs are generated in the console as well as written to a user-defined log file in a human-readable JSON format. Default log location is target/logs/zerocode_rest_bdd_logs.log .

In case of a test failure, it exactly lists which step failed due to fields didn't match.

Note- Every step is assigned with an auto generated STEP-ID to correlate a request with its response.

e.g.

If the test passed:

--------- CORRELATION-ID: e6170365-94e7-49dc-a1a3-5e102468acc2 ---------
requestTimeStamp:2017-12-20T10:00:48.840
step:get_same_employee
url:http://localhost:9999/api/testing/v1/persons/UK1001
method:GET
request:
{ } 
--------- CORRELATION-ID: e6170365-94e7-49dc-a1a3-5e102468acc2 ---------
Response:
{
  "status" : 200,
  "headers" : {
    "Date" : [ [ "Wed, 20 Dec 2017 03:00:48 GMT" ] ],
    "Last-Modified" : [ [ "Wed, 20 Dec 2017 03:00:48 GMT" ] ],
    "Transfer-Encoding" : [ [ "chunked" ] ],
    "Content-Type" : [ [ "application/json" ] ],
    "Connection" : [ [ "keep-alive" ] ]
  },
  "body" : {
    "id" : "UK1001",
    "name" : "Bobby Lion",
    "addresses" : [ {
      "line1" : "HOME, AECS Layout, ZIP-56094"
    }, {
      "line1" : "OFFICE, Newark, ZIP-730290"
    } ]
  }
}
*responseTimeStamp:2017-12-20T10:00:48.847 
*Response delay:7.0 milli-secs 
---------> Expected Response: <----------
{
  "status" : 200,
  "body" : {
    "id" : "UK1001"
  }
} 
-done-

If the test failed:

--------- CORRELATION-ID: 8ad5c1fe-31cb-4e46-a8ba-7500a00c2199 ---------
requestTimeStamp:2017-12-20T10:02:01.163
step:get_an_employee_detail
url:http://localhost:9999/api/testing/v1/persons/UK1001
method:GET
request:
{ } 
--------- CORRELATION-ID: 8ad5c1fe-31cb-4e46-a8ba-7500a00c2199 ---------
Response:
{
  "status" : 200,
  "headers" : {
    "Date" : [ [ "Wed, 20 Dec 2017 03:02:01 GMT" ] ],
    "Last-Modified" : [ [ "Wed, 20 Dec 2017 03:02:01 GMT" ] ],
    "Transfer-Encoding" : [ [ "chunked" ] ],
    "Content-Type" : [ [ "application/json" ] ],
    "Connection" : [ [ "keep-alive" ] ]
  },
  "body" : {
    "id" : "UK1001",
    "name" : "Bobby Lion",
    "addresses" : [ {
      "line1" : "HOME, AECS Layout, ZIP-56094"
    }, {
      "line1" : "OFFICE, Newark, ZIP-730290"
    } ]
  }
}
*responseTimeStamp:2017-12-20T10:02:01.315 
*Response delay:152.0 milli-secs 
---------> Expected Response: <----------
{
  "status" : 400,
  "body" : {
    "id" : "UK1001"
  }
} 
-done-

Assertion failed for :- 

[test_get_request_response_rainy_scene.json] 
	|
	|
	+---Step --> [get_an_employee_detail] 

Failures:
--------- 
Assertion path '$.status' with actual value '200' did not match the expected value '400'

Inspired By

Honorable references and credits

Pyresttest's JSON/YAML based test-DSL inspired many of Zerocode's Http DSL and test-config features.

Apache JMeter's intuitive load configuration inspired various Zerocode's declarative Load Testing DSL.

SkyScreamer's lenient mode smart JSON comparison inspired Zerocode's lenient JSON comparison feature.

Spring's popular token/placeholder resolver inspired Zerocode's runtime token/placeholder resolver feature.

Jupiter Junit5's easy and declarative approach to parameterized testing inspired Zerocode's parameterized testing feature.

Powered by open-source software.

IDE Credits Jetbrains

Contribute

Raise issues and contribute to improve zerocode by becoming a contributor yourself.

Blogs

Clone this wiki locally