Tuesday, July 30, 2019

Configure Log4j in Java by using properties/xml file

Put log4j.xml or log4j.xml file in the resource folder


2019-07-30 16:00:09 DEBUG Log4jXmlConfigurationExample:18 - Log4j appender configuration is successful !!
# Root logger option
log4j.rootLogger=DEBUG, stdout, file
# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\Users\\diya-mutturajh\\test123\\Logs\\log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="console"
class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<appender name="fileAppender"
class="org.apache.log4j.RollingFileAppender">
<param name="File" value="demoApplication.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<root>
<priority value="debug"></priority>
<appender-ref ref="console"></appender-ref>
<appender-ref ref="fileAppender"></appender-ref>
</root>
</log4j:configuration>
view raw log4j.xml hosted with ❤ by GitHub
package test1231;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
public class Log4JExample
{
static Logger logger = Logger.getLogger(Log4JExample.class);
public static void main(String[] args)
{
//DOMConfigurator is used to configure logger from xml configuration file
DOMConfigurator.configure("C:\\Users\\mutturajh\\test123\\src\\test\\java\\test1231\\log4j.xml");
//Log in console in and log file
logger.debug("Log4j appender configuration is successful !!");
}
}

Thursday, July 11, 2019

API testing by using Fluent API HTTP client

some important imports https://hulagabal.blogspot.com/2019/07/rest-assured-pom-file-and-imports.html
Dependency to be used
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>fluent-hc</artifactId>
<version>4.5.1</version>
</dependency>
package newresrapi;
import java.io.IOException;
import java.util.List;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CookieStore;
import org.apache.http.client.fluent.Request;
import org.apache.http.client.fluent.Response;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.cookie.Cookie;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.testng.Assert;
import org.testng.annotations.Test;
import io.restassured.path.json.JsonPath;
public class HTTPTest {
@Test
public void getFluently() throws ClientProtocolException, IOException {
// Get request
String entity = Request.Get("http://dummy.restapiexample.com/api/v1/employee/5928").execute().returnContent()
.asString();
System.out.println("---------Get started---------");
System.out.println(entity);
System.out.println(new JsonPath(entity).get("id"));
System.out.println("---------Get End---------");
}
@Test
public void putFluently() throws ClientProtocolException, IOException {
// Put request
String updateresponse = Request.Put("http://dummy.restapiexample.com/api/v1/update/5928")
.bodyString("{\"name\":\"muu222\",\"salary\":\"1123\",\"age\":\"14\"}", ContentType.APPLICATION_JSON)
.execute().returnContent().asString();
System.out.println("--------------Put started-------------");
System.out.println(updateresponse);
System.out.println("--------------Put End-------------");
}
}
view raw HTTPTest.java hosted with ❤ by GitHub

Tuesday, July 9, 2019

All Rest Assured operation in one


package test;
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.fasterxml.jackson.databind.util.JSONPObject;
import io.restassured.http.ContentType;
import io.restassured.http.Cookie;
import io.restassured.http.Header;
import io.restassured.http.Headers;
import io.restassured.internal.path.json.mapping.JsonObjectDeserializer;
import io.restassured.response.Response;
import io.restassured.response.ResponseBody;
import io.restassured.response.ValidatableResponse;
import io.restassured.config.RestAssuredConfig;
import io.restassured.config.XmlConfig;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.hamcrest.Matcher;
import io.restassured.matcher.ResponseAwareMatcher;
import io.restassured.matcher.RestAssuredMatchers.*;
import io.restassured.matcher.ResponseAwareMatcherComposer.*;
import io.restassured.builder.ResponseSpecBuilder;
import io.restassured.specification.ResponseSpecification;
import io.restassured.RestAssured;
import io.restassured.builder.RequestSpecBuilder;
import io.restassured.specification.RequestSpecification;
import io.restassured.mapper.ObjectMapperType;
import static io.restassured.path.json.JsonPath.*;
import io.restassured.path.json.JsonPath;
import io.restassured.path.xml.XmlPath;
import static org.hamcrest.Matchers.*;
public class AllRestAPIOperations {
ResponseBody<?> responseBody;
String id;
@Test
public void allInOne() {
String name = "muttu1111111";
// Post request creating employee
responseBody = given().accept(ContentType.JSON)
.body("{\"name\":\"" + name + "\",\"salary\":\"123\",\"age\":\"23\"}").when()
.post("http://dummy.restapiexample.com/api/v1/create").body();
id = responseBody.jsonPath().getString("id");
String salary = "233"; //Salary amount needs be updated
// Put request- Update salary for the above employee
responseBody = given().accept(ContentType.JSON)
.body("{\"name\":\"" + name + "\",\"salary\":\"" + salary + "\",\"age\":\"23\"}").when()
.put("http://dummy.restapiexample.com/api/v1/update/" + id).body();
salary = responseBody.jsonPath().getString("salary");
System.out.println(id + " " + salary);
// Get request after updating the salary- fetch the details of an employee
String body = when().get("http://dummy.restapiexample.com/api/v1/employee/" + id + "").body().asString();
System.out.println(body);
// Delete Employee by id
String as = when().delete("http://dummy.restapiexample.com/api/v1/delete/" + id).asString();
System.out.println(as);
}
}

Sunday, July 7, 2019

Rest assured pom file and imports


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hulagabal.rest</groupId>
<artifactId>com.hulagabal.rest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/io.rest-assured/rest-assured -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.2</version>
<scope>test</scope>
</dependency>
<!-- used to parse Json Document -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>3.0.2</version>
</dependency>
<!-- to validate that a JSON response conforms to a Json Schema -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>3.0.2</version>
</dependency>
<!-- used to parse xml document -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>xml-path</artifactId>
<version>3.0.2</version>
</dependency>
<!-- junit/testng can be used -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.10</version>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>java-hamcrest</artifactId>
<version>2.0.0.0</version>
</dependency>
</dependencies>
</project>
//imports
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
import org.testng.Assert;
import org.testng.annotations.Test;
import io.restassured.http.ContentType;
import io.restassured.http.Cookie;
import io.restassured.http.Header;
import io.restassured.http.Headers;
import io.restassured.internal.path.json.mapping.JsonObjectDeserializer;
import io.restassured.response.Response;
import io.restassured.response.ResponseBody;
import io.restassured.response.ValidatableResponse;
import io.restassured.config.RestAssuredConfig;
import io.restassured.config.XmlConfig;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.hamcrest.Matcher;
import io.restassured.matcher.ResponseAwareMatcher;
import io.restassured.matcher.RestAssuredMatchers.*;
import io.restassured.matcher.ResponseAwareMatcherComposer.*;
import io.restassured.builder.ResponseSpecBuilder;
import io.restassured.specification.ResponseSpecification;
import io.restassured.builder.RequestSpecBuilder;
import io.restassured.specification.RequestSpecification;
import io.restassured.mapper.ObjectMapperType;
import static io.restassured.path.json.JsonPath.*;
import io.restassured.http.ContentType;
import io.restassured.path.json.JsonPath;
import io.restassured.path.xml.XmlPath;
import static org.hamcrest.Matchers.*;

Tuesday, July 2, 2019

Running suites in Junit Testing Java


import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(FirstTest.class, SecondTest.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
//First test class
import static org.junit.Assert.assertTrue;
import org.junit.Test;
public class FirstTest {
@Test
public void equal() {
assertTrue(true);
System.out.println("First test ===>PASSSED");
}
}
//Second test class
import static org.junit.Assert.assertFalse;
import org.junit.Test;
public class SecondTest {
@Test
public void add() {
assertFalse("This is failed by me",true);
System.out.println("Second test ===> PASSSED");
}
}
//you can run this by @RunWith(Suit.class) Annotaotions @Suit.SuitClass like below as well
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
FirstTest.class, SecondTest.class
})
public class JunitTestSuit {
}
view raw TestRunner.java hosted with ❤ by GitHub