<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Deepak Chaudhary</title>
    <description>The latest articles on DEV Community by Deepak Chaudhary (@chaudharydeepak).</description>
    <link>https://dev.to/chaudharydeepak</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F491724%2Fcd1f74b0-ac18-4762-b004-ae0d2043182b.jpeg</url>
      <title>DEV Community: Deepak Chaudhary</title>
      <link>https://dev.to/chaudharydeepak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chaudharydeepak"/>
    <language>en</language>
    <item>
      <title>Exploring Spring Native</title>
      <dc:creator>Deepak Chaudhary</dc:creator>
      <pubDate>Mon, 29 Mar 2021 01:04:24 +0000</pubDate>
      <link>https://dev.to/chaudharydeepak/exploring-spring-native-2p31</link>
      <guid>https://dev.to/chaudharydeepak/exploring-spring-native-2p31</guid>
      <description>&lt;h3&gt;
  
  
  Demo Application to explore Spring Native.
&lt;/h3&gt;

&lt;h6&gt;
  
  
  Sample application to explore Spring Native Capabilities. Abbreviated version of something like bitly. Not for production use, yet! All persistence to in-memory H2 db. So, the application does bit more than &lt;i&gt;Hello World&lt;/i&gt; type stuff, &lt;a href="https://github.com/chaudharydeepak/urlshortner"&gt;Source Code at!&lt;/a&gt;
&lt;/h6&gt;

&lt;h4&gt;
  
  
  Features / Spring Modules included
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Spring Boot 2.4.x.&lt;/li&gt;
&lt;li&gt;Spring Data JPA [&lt;i&gt;Starter&lt;/i&gt;].&lt;/li&gt;
&lt;li&gt;Spring Security [&lt;i&gt;Starter&lt;/i&gt;] with JWT.&lt;/li&gt;
&lt;li&gt;Spring Cloud Function [&lt;i&gt;Starter&lt;/i&gt;].&lt;/li&gt;
&lt;li&gt;Spring Boot Actuator.&lt;/li&gt;
&lt;li&gt;Tomcat with SSL.&lt;/li&gt;
&lt;li&gt;Exposing only REST endpoints.&lt;/li&gt;
&lt;/ul&gt;

&lt;h6&gt;
  
  
  &lt;a href="https://github.com/chaudharydeepak/urlshortner#key-learnings"&gt;Summary 03/25&lt;/a&gt;
&lt;/h6&gt;

&lt;h6&gt;
  
  
  Quick Start:
&lt;/h6&gt;

&lt;ol&gt;
&lt;li&gt;Get prebuilt &lt;a href="https://github.com/chaudharydeepak/urlshortner/releases"&gt;native package&lt;/a&gt; from repo - note, the image is native to machine that built it - so it might not run on yours - see package details.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# requires graalvm locally installed.&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;./com.dccorp.urlshortner.urlshortnerapplication 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Or execute following to pull docker image:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# docker on local.&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 docker.pkg.github.com/chaudharydeepak/urlshortner/urlshortner:0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Detailed Instructions:
&lt;/h6&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# checkout source code to local.&lt;/span&gt;

&lt;span class="c"&gt;# native image plugin - ref pom.xml line 22-49, line 209-210&lt;/span&gt;
&lt;span class="c"&gt;# requires GraalVM locally installed.&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;mvn &lt;span class="nt"&gt;-Pnative-image&lt;/span&gt; package
&lt;span class="c"&gt;# execute generated native image&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;./com.dccorp.urlshortner.urlshortnerapplication

&lt;span class="c"&gt;# using buildpacks - ref pom.xml line 193-212&lt;/span&gt;
&lt;span class="c"&gt;# requires docker local installation.&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;mvn spring-boot:build-image
&lt;span class="c"&gt;# execute docker image &lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 urlshortner:0.0.1-SNAPSHOT

&lt;span class="c"&gt;# after application starts [built either with buildpacks or native image plugin]&lt;/span&gt;
&lt;span class="c"&gt;# register a new user&lt;/span&gt;
curl &lt;span class="nt"&gt;-k&lt;/span&gt; &lt;span class="nt"&gt;--location&lt;/span&gt; &lt;span class="nt"&gt;--request&lt;/span&gt; POST &lt;span class="s1"&gt;'https://localhost:8080/signup'&lt;/span&gt; &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="nt"&gt;--data-raw&lt;/span&gt; &lt;span class="s1"&gt;'{
    "firstName":"FName",
    "lastName":"LName",
    "userName":"userName",
    "password":"userPassword"
}'&lt;/span&gt;

&lt;span class="c"&gt;# execute login endpoint to get JWT&lt;/span&gt;
curl &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-k&lt;/span&gt; &lt;span class="nt"&gt;--location&lt;/span&gt; &lt;span class="nt"&gt;--request&lt;/span&gt; POST &lt;span class="s1"&gt;'https://localhost:8080/login'&lt;/span&gt; &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="nt"&gt;--data-raw&lt;/span&gt; &lt;span class="s1"&gt;'{
    "userName":"userName",
    "password":"userPassword"
}'&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;Auth
&lt;span class="c"&gt;# will print Auhtorization Header&lt;/span&gt;
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.e.......

&lt;span class="c"&gt;# use authorization header to access secured endpoint.&lt;/span&gt;
&lt;span class="c"&gt;# basically we are creating a short url for a given url.&lt;/span&gt;
curl &lt;span class="nt"&gt;-k&lt;/span&gt; &lt;span class="nt"&gt;--location&lt;/span&gt; &lt;span class="nt"&gt;--request&lt;/span&gt; POST &lt;span class="s1"&gt;'https://localhost:8080/create'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJjaGF1ZGhhcnlkZWVwYWswOEBnbWFpbC5jb20iLCJleHAiOjE2MTc2NDQzNzl9.eSfylYVUIgnOFbUULXG9yjUJuApPvgSKJCti_Jdv-XK-umVPPv7eYRgSm62K60vY89Sp_nRIWx6UOjEuNe5v6Q'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--data-raw&lt;/span&gt; &lt;span class="s1"&gt;'{
    "requestURL":"https://docs.spring.io/spring-native/docs/current/reference/htmlsingle/",
    "requestedShortCode":"nativedocs"
}'&lt;/span&gt;
&lt;span class="c"&gt;#should see response like&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"statusCodeValue"&lt;/span&gt;:201,&lt;span class="s2"&gt;"statusCode"&lt;/span&gt;:&lt;span class="s2"&gt;"CREATED"&lt;/span&gt;,&lt;span class="s2"&gt;"body"&lt;/span&gt;:&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"shortURL"&lt;/span&gt;:&lt;span class="s2"&gt;"stack"&lt;/span&gt;,......

&lt;span class="c"&gt;# try to see if short url works&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;curl &lt;span class="nt"&gt;-k&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; https://localhost:8080/go/nativedocs
HTTP/1.1 302 
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Location: https://docs.spring.io/spring-native/docs/current/reference/htmlsingle/
X-Content-Type-Options: nosniff
X-XSS-Protection: 1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;block
Cache-Control: no-cache, no-store, max-age&lt;span class="o"&gt;=&lt;/span&gt;0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age&lt;span class="o"&gt;=&lt;/span&gt;31536000 &lt;span class="p"&gt;;&lt;/span&gt; includeSubDomains
X-Frame-Options: SAMEORIGIN
Content-Length: 0
Date: Sat, 27 Mar 2021 05:54:59 GMT

&lt;span class="c"&gt;# to allow chrome access localhost self-signed certificate&lt;/span&gt;
&lt;span class="c"&gt;# chrome://flags/#allow-insecure-localhost&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Key Learnings
&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;Native image startup time is ~0.55s vs ~4.5s [&lt;i&gt;executable jar&lt;/i&gt;] subjective to machine, which is pretty cool.&lt;/li&gt;
&lt;li&gt;The Generated native image is around ~182M [&lt;i&gt;using buildpacks&lt;/i&gt;] vs ~148M [&lt;i&gt;native image plugin&lt;/i&gt;] vs ~40M [&lt;i&gt;jar - of-course since JVM is provided outside of the jar on running machine&lt;/i&gt;].&lt;/li&gt;
&lt;li&gt;Startup time is almost instantaneous - but build time is significantly higher - which possibly will improve over time as the project matures.&lt;/li&gt;
&lt;li&gt;Not all Spring modules /projects are supported yet - for ex. developer tools / AOP support missing [03/25] - things in motion already.&lt;/li&gt;
&lt;li&gt;Need significant RAM on the machine to play with Native support in the first place.&lt;/li&gt;
&lt;li&gt;No Out-of-the-box native image generation for pre-existing Spring Boot application - tweeks / testing will be required - though in long run that is the goal.&lt;/li&gt;
&lt;li&gt;Size of native image could be further reduced by using tools like upx.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-lh&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;url
  &lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt;   1 deepak.chaudhary  staff   148M Mar 27 00:00 com.dccorp.urlshortner.urlshortnerapplication
  &lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;   1 deepak.chaudhary  staff    38M Mar 26 23:47 urlshortner-0.0.1-SNAPSHOT-exec.jar
  &lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;   1 deepak.chaudhary  staff    76K Mar 26 23:47 urlshortner-0.0.1-SNAPSHOT.jar

  &lt;span class="nv"&gt;$ &lt;/span&gt;upx &lt;span class="nt"&gt;-7&lt;/span&gt; &lt;span class="nt"&gt;-k&lt;/span&gt; com.dccorp.urlshortner.urlshortnerapplication

  &lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-lh&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;url &lt;span class="c"&gt;# size reduced to 43M from 148M which is amazing.&lt;/span&gt;
  &lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt;   1 deepak.chaudhary  staff    43M Mar 27 00:00 com.dccorp.urlshortner.urlshortnerapplication
  &lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt;   1 deepak.chaudhary  staff   148M Mar 27 00:00 com.dccorp.urlshortner.urlshortnerapplicatio~
  &lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;   1 deepak.chaudhary  staff    38M Mar 26 23:47 urlshortner-0.0.1-SNAPSHOT-exec.jar
  &lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;   1 deepak.chaudhary  staff    76K Mar 26 23:47 urlshortner-0.0.1-SNAPSHOT.jar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Further image size could be reduced by using trimmed down tomcat [&lt;i&gt;experimental&lt;/i&gt;] - ref pom.xml line 118.&lt;/li&gt;
&lt;li&gt;Oracle provides GraalVM Dashboard online tool to peek inside native image.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nt"&gt;-H&lt;/span&gt;:DashboardDump&lt;span class="o"&gt;=&lt;/span&gt;dumpfileoversizedbuildArgs
  &lt;span class="nt"&gt;-H&lt;/span&gt;:+DashboardAll
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only available when using native image plugin and not buildpacks to generate native image.&lt;br&gt;
  &lt;a href="https://www.graalvm.org/docs/tools/dashboard/?ojr=dashboard"&gt;GraalVM Dashboard&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can use dive tool to inspect generated docker image:
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rjEWaFPI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qu5gk97wad33l2wx0jnt.png" alt="Dive"&gt;
&lt;/li&gt;
&lt;li&gt;Need to watchful around anything that's reflection. AOT[&lt;i&gt;Ahead-Of-Time&lt;/i&gt;] compilation is actually analyzing the entire application during build time[&lt;i&gt;hence increased build time&lt;/i&gt;] - so it might miss some classes whose instantiation is decided at actual runtime instead[&lt;i&gt;lazy&lt;/i&gt;], though there is &lt;i&gt;hint&lt;/i&gt; support available to take care of these situations.&lt;/li&gt;
&lt;li&gt;Very good support from Community / good documentation Spring Native and GraalVM.&lt;/li&gt;
&lt;li&gt;Follow open issue with possible &lt;a href="https://github.com/spring-projects-experimental/spring-native/issues/651"&gt;Development Process #651&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h6&gt;
  
  
  Links
&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.graalvm.org/"&gt;GraalVM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.spring.io/spring-native/docs/current/reference/htmlsingle/"&gt;Spring Native&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/spring-projects-experimental/spring-native/tree/master/samples"&gt;Spring Native Samples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h6&gt;
  
  
  Feel free to share / leave your thoughts!
&lt;/h6&gt;

</description>
      <category>graalvm</category>
    </item>
    <item>
      <title>Primer on Automated Testing With Karate DSL</title>
      <dc:creator>Deepak Chaudhary</dc:creator>
      <pubDate>Wed, 16 Dec 2020 02:45:06 +0000</pubDate>
      <link>https://dev.to/chaudharydeepak/primer-on-automated-testing-with-karate-dsl-11m8</link>
      <guid>https://dev.to/chaudharydeepak/primer-on-automated-testing-with-karate-dsl-11m8</guid>
      <description>&lt;h4&gt;
  
  
  Motivation
&lt;/h4&gt;

&lt;p&gt;With Microservices architecture, comes along a plethora of challenges that need to be dealt with - and most of these challenges can be resolved with well established patterns &amp;amp; implementations - for ex Spring Cloud provides concrete implementations along the lines of api gateway, service discoveries , distributed tracings, externalized and centralized configuration server and the list goes on. Having said that, one of the bigger challenges I experienced is testing a distributed system[ &lt;em&gt;not simply testing an individual service&lt;/em&gt;] as a whole. This system has many moving parts to it - there are distributed dependent services / UI's / network latencies / data inconsistencies etc.&lt;/p&gt;

&lt;p&gt;Now, with 'shift left' being the norm - the idea is to provide faster feedbacks -&amp;gt; which results in faster resolutions -&amp;gt; which leads to better system, way earlier in development process [ vs Traditional Software Developments ].&lt;/p&gt;

&lt;p&gt;The goal of this blog is to present &lt;a href="https://github.com/intuit/karate"&gt;Karate DSL&lt;/a&gt; as a possible solution for testing such a system. Overall, Karate has much much more to offer and I will encourage you to explore more.&lt;/p&gt;

&lt;h4&gt;
  
  
  Enter Karate DSL
&lt;/h4&gt;

&lt;p&gt;In my past life I was yearning for an all encompassing automated testing framework that is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;extension-able i.e. allow to do more with what is abstracted. &lt;/li&gt;
&lt;li&gt;pluggable / modular i.e. add / remove functionalities as needed.&lt;/li&gt;
&lt;li&gt;programming language agnostic [ &lt;em&gt;as much as possible&lt;/em&gt; ] for wider reach among different stakeholders.&lt;/li&gt;
&lt;li&gt;highly observable with reporting and logging capabilities.&lt;/li&gt;
&lt;li&gt;ease of testing API's and UI all at the sametime. - I want to call an API to get auth token and use that token to invoke other services or UI or a combination of both.&lt;/li&gt;
&lt;li&gt;should be simple to learn and intuitive to use. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Behold, came the Octoberfest 2020 and I stumbled upon an amazing framework called Karate DSL. I was able to contribute, as well learn more about this awesome tool at the same time.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://intuit.github.io/karate/"&gt;What is Karate DSL&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://github.com/ptrthomas"&gt;Peter Thomas&lt;/a&gt; is the lead developer, as well main maintainer for this tool.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Karate is the only open-source tool to combine API test-automation, mocks, performance-testing and even UI automation into a single, unified framework. The BDD syntax popularized by Cucumber is language-neutral, and easy for even non-programmers. Powerful JSON &amp;amp; XML assertions are built-in, and you can run tests in parallel for speed.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Hands-On
&lt;/h4&gt;

&lt;p&gt;Lets say, you have an API that allows to do CRUD operations on &lt;em&gt;Posts&lt;/em&gt;. Now, look at this feature file - isn't it &lt;em&gt;very intuitive as to what is going on in here&lt;/em&gt;? -&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fa4UNIce--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/s0e0jiu3v50t64oii0fo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fa4UNIce--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/s0e0jiu3v50t64oii0fo.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
With this you have a simple test suite with different scenarios, and you are validating different &lt;em&gt;operations&lt;/em&gt; on a API - all written in &lt;em&gt;Gherkin Syntax&lt;/em&gt;. And there is nothing else to write or code - except including Karate libs.&lt;/p&gt;

&lt;p&gt;Writing this test suite requires a very basic knowledge and anyone in your team - a developer, a tester, a BA, product owner etc. can write these and be &lt;em&gt;glued&lt;/em&gt; with the expected behavior of the system. Include this in build pipeline or run on a schedule to measure the &lt;em&gt;performance&lt;/em&gt; of the system - as you wish.&lt;/p&gt;

&lt;p&gt;Now, let us look at the test report:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T2jc7M-h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8i3udpunikkqf0d6iqz9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T2jc7M-h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8i3udpunikkqf0d6iqz9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a very detailed and thorough report - you can see the timestamps and individual &lt;em&gt;step&lt;/em&gt; logs:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--09c-jfC4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1687l7tuxuwxa0dptl66.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--09c-jfC4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1687l7tuxuwxa0dptl66.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can seamlessly invoke rest apis and web UI calls in your test suite and exchange headers and cookies among those calls:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I29bcgeG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ay3yzungsbssui4nol01.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I29bcgeG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ay3yzungsbssui4nol01.png" alt="Alt Text"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h6&gt;
  
  
  &lt;a href="https://github.com/intuit/karate"&gt;source&lt;/a&gt;
&lt;/h6&gt;

&lt;p&gt;You can even perform accessibility testing simply as following -&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zTr1Vs5j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pmfd0t9mcc4f452dkyka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zTr1Vs5j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pmfd0t9mcc4f452dkyka.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and your output report looks like this:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---wjHackl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0sqdubc9am3mlskwksui.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---wjHackl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0sqdubc9am3mlskwksui.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are many more goodies provided by this framework - docker testing support / performance testing / UI testing / test report creations etc just to name a few. &lt;/p&gt;

&lt;p&gt;The framework has observed some amazing attraction in recent times [ &lt;em&gt;see github stars&lt;/em&gt; ], has amazing community support via &lt;em&gt;slack&lt;/em&gt; / &lt;em&gt;stackoverflow&lt;/em&gt; / &lt;em&gt;github&lt;/em&gt; and is something that should be seriously considered by architects / developers / QA alike. Cheers!&lt;/p&gt;

&lt;p&gt;Feel free to leave any feedback.&lt;/p&gt;

</description>
      <category>automatedtesting</category>
      <category>karatedsl</category>
      <category>apitesting</category>
      <category>hacktoberfest</category>
    </item>
  </channel>
</rss>
