First install Apache server. You can download it from http://httpd.apache.org/. For this example I have used httpd-2.2.25-win32-x86-openssl-0.9.8. You can get it from Apache archive.
After Apache installation complete, you might need to change the port 80 to some other port e.g 8000 if 80 port is block. You can change the port in httpd.conf file which located under conf folder.
Listen 8000
Bellow is an example how we can use mod_proxy_balancer to provide load balancing for three back-end server. You need to add following snippet at the bottom of the htttpd.conf. Then restart the server.
Now if you open the URL http://localhost:8000 in browser, request will be forward to one of the back-end server. You can test it by looking server logs.
Mule is open source Enterprise Service Bus. You can create proxy service of a web-service easily with mule. You can transform request and response payload using Mule XSLT transformation.
Following figure is showing diagram of Mule proxy service and XSLT transformation.
Below is configuration XML.
To set password following code snippet is used for password callback
package lr.mule.security;
import java.io.IOException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import org.apache.ws.security.WSPasswordCallback;
public class PasswordCallback implements CallbackHandler
{
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException
{
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
pc.setPassword("password");
}
}
If you found following error while connecting a secure server
"org.apache.axis2.AxisFault: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"
follow the below step to resolve the issue.
Step 1. Go to your Mozilla Firefox and browse the server URL and follow the highlighted steps.
Step 2. Download the certificate by following highlighted steps and save it to location direction with file extension ".crt", e.g: example.crt.
Step 3. Now open command prompt with "run as administrator" and run the following command
Selenium is one of the best tool for automating web application testing. If number of pages of web application increase gradually, it is really hard for application tester to test every page after new deployment.
Selenium provide web driver for almost browser including firefox, IE, Google Chrome etc. Even you can integrate selenium web driver with Junit, TestNG or plan Java, .Net code.
Selenium provide two type of web drivers. Browser base driver like FirefoxDriver will open the Firefox browser and perform the test. In this case, Selenium will fill up all fields and click on necessary places, just like an automated robot. But if you want to write test cases that does't require browser then you can use HtmlUnitDriver. It will create instance of in-memory browser. But browser base driver is important when you want to test your application whether its compatible with all modern browser like Google chrome, Firefox and IE.
Following snippet is showing initialization of Firefox web driver and HtmlUnitDriver.
Create a new instance of the html unit driver
private WebDriver driver= new HtmlUnitDriver();
// Create a new instance of the Firefox driver
private WebDriver driver= new FirefoxDriver();
Here is an example showing how to perform login before test any secure page. In Junit @BeforeClass annotation method will be called before run any test case.
@BeforeClass
public static void setUpBeforeClass() throws Exception {
entity = new Users("moin", "123", "abc@gmail.com", "xyz",
"");
// Create a new instance of the html unit driver
driver = new HtmlUnitDriver();
// And now use this to visit your login URL. e.g
driver.get(serverBaseUrl + "/login");
// set the user name in user id text field
driver.findElement(By.name("j_username"))
.sendKeys(entity.getUserName());
// set the password in user password text field
driver.findElement(By.name("j_password"))
.sendKeys(entity.getPassword());
driver.findElement(By.className("pull-right")).click();
System.out.println(driver.getPageSource());
if (driver.findElement(By.cssSelector(".jumbotron")).getText()
.contains("Welcome to ScrapperX")) {
System.out.println("Login Success");
} else {
System.out.println("Login fail");
throw new Exception("Login Require");
}
Thread.sleep(1000);
}
After login you can test any secure page in the same session. Below snippet is showing how to test "update user profile page"
@Test
public void testUpdateProfile() {
driver.get(serverBaseUrl + "/users/editprofile");
// clear the exist first name or else sendKeys will append new text
driver.findElement(By.name("firstName")).clear();
driver.findElement(By.name("firstName"))
.sendKeys(entity.getFirstName());
driver.findElement(By.name("lastName")).clear();
driver.findElement(By.name("lastName")).sendKeys(entity.getLastName());
driver.findElement(By.name("password")).clear();
driver.findElement(By.name("password")).sendKeys(entity.getPassword());
driver.findElement(By.name("c_password")).clear();
driver.findElement(By.name("c_password"))
.sendKeys(entity.getPassword());
// in several way you can select a checkbox
/*
* List checkbox =
* driver.findElements(By.name("paymentActive")); ((WebElement)
* checkbox.get(0)).click();
*/
// select paymentActive checkbox
WebElement checkbox = driver.findElement(By.name("paymentActive"));
if (checkbox.isSelected() == false) {
checkbox.click();
}
driver.findElement(By.className("btn")).click();
System.out.println(driver.findElement(By.cssSelector(".alert"))
.getText());
assertTrue("Update user profile fail",
driver.findElement(By.cssSelector(".alert")).getText()
.contains("Update Complete"));
}
You can access any field or html element by css class name, id and field name.
Following example is showing how to select a drop-down option.
Select cardTypeDropDown = new Select(driver.findElement(By
.name("cardType")));
cardTypeDropDown.selectByValue("visa");
Here is an working example of testing Google search.
package com.scrapperx.web.controller;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class GoogleSearchTest {
@Test
public void testGoogleSearch() throws InterruptedException {
// Create a new instance of the html unit driver
// Notice that the remainder of the code relies on the interface,
// not the implementation.
System.out.println("http://www.google.com");
WebDriver driver = new FirefoxDriver();
// And now use this to visit Google
driver.get("http://www.google.com");
// Find the text input element by its name
WebElement element = driver.findElement(By.name("q"));
// Enter something to search for
element.sendKeys("tometo");
// Now submit the form. WebDriver will find the form for us from the
// element
element.submit();
// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());
Thread.sleep(10000);
driver.quit();
}
}
Typeahead provide very good solution for auto complete suggestion. Here is an example showing auto suggestion based on user query.
When user type a keyword, a json request will be send to server side and response will be appeared right bottom of search field.
JUnit is more popular framework for unit testing in java. JUnit provide four life cycle methods for each test case class.
@BeforeClass and @AfterClass anotation used before methods which are called by framework once for all test case. @Before and @After are used on methods which are called before and after any test method run. Here is an example code snippet.
package com.test;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class ExampleTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("Before all test case execution");
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("After all test case execution");
}
@Before
public void setUp() throws Exception {
System.out.println("Before single test case execution");
}
@After
public void tearDown() throws Exception {
System.out.println("After single test case execution");
}
@Test
public void testMethod1() {
System.out.println("a");
}
@Test
public void testMethod2() {
System.out.println("b");
}
}
First off you need Maven and Weblogic setup in your computer to start this tutorial.
My Weblogic(10.3.6.0) has setup under : C:\Oracle\Middleware. Set Middleware home :
set MW_HOME=C:\Oracle\Middleware
1. Build the plug-in JAR file using the WebLogic JarBuilder Tool (wljarbuilder) under %MW_HOME%/wlserver_10.3/server/lib/ with the following command:
The weblogic-maven-plugin.jar contains a Project Object Model (pom.xml) file which specifies the groupId, artifactId, version, and packaging of the weblogic-maven-plugin.jar:
groupId=com.oracle.weblogic
artifactId=weblogic-maven-plugin
version=10.3.6.0
packaging=maven-plugin
2. Extract the pom.xml file from weblogic-maven-plugin.jar under the %MW_HOME% wlserver_10.3/server/lib directory, and then copy the pom.xml file to %MW_HOME%/wlserver_10.3/server/lib.
jar xvf %MW_HOME%/wlserver_10.3/server/lib/weblogic-maven-plugin.jar META-INF/maven/com.oracle.weblogic/weblogic-maven-plugin/pom.xml
copy %MW_HOME%/wlserver_10.3/server/lib/META-INF/maven/com.oracle.weblogic/weblogic-maven-plugin/pom.xml to %MW_HOME%//wlserver_10.3/server/lib/pom.xml
Add following in your project pom.xml file:
3.Provision the weblogic-maven-plugin.jar in your local Maven repository with the following command. However, for a shortened command-line goal invocation of the plug-in, follow the directions in next step 4 before performing this step.
http://docs.oracle.com/cd/E21764_01/web.1111/e13702/maven_deployer.htm
4.
you can shorten the full invocation of the plug-in by providing a pom.xml file and modifying the settings.xml file located in your $HOME/.m2 directory, before you provision the plug-in in your Maven repository
Change the settings.xml file as follows:
com.oracle.weblogic
b. Replace the %MW_HOME%/wlserver_10.3/server/lib/pom.xml file with the following(Use same version that was in the pom.xml):