package examples.web; import static uk.co.acuminous.julez.util.JulezSugar.SCENARIOS; import static uk.co.acuminous.julez.util.JulezSugar.THREADS; import org.junit.Test; import uk.co.acuminous.julez.event.handler.ThroughputMonitor; import uk.co.acuminous.julez.runner.ConcurrentScenarioRunner; import uk.co.acuminous.julez.scenario.BaseScenario; import uk.co.acuminous.julez.scenario.Scenario; import uk.co.acuminous.julez.scenario.ScenarioEvent; import uk.co.acuminous.julez.scenario.ScenarioSource; import uk.co.acuminous.julez.scenario.limiter.SizeLimiter; import uk.co.acuminous.julez.scenario.source.ScenarioRepeater; import uk.co.acuminous.julez.test.WebTestCase; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.WebResponse; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class HtmlUnitWebTest extends WebTestCase { @Test public void demonstrateAConcurrentWebTestUsingHtmlUnit() { ThroughputMonitor throughputMonitor = new ThroughputMonitor(); Scenario scenario = new HtmlUnitScenario().register(throughputMonitor); ScenarioSource scenarios = new SizeLimiter().limit(new ScenarioRepeater(scenario)).to(100, SCENARIOS); new ConcurrentScenarioRunner().register(throughputMonitor).queue(scenarios).allocate(10, THREADS).go(); System.out.println("\nHtmlUnit Throughput\n----------------"); System.out.println(throughputMonitor.getThroughput()); } class HtmlUnitScenario extends BaseScenario { public void run() { handler.onEvent(eventFactory.begin()); WebClient webClient = new WebClient(); try { webClient.setCssEnabled(false); webClient.setJavaScriptEnabled(false); HtmlPage page = webClient.getPage("http://localhost:28081"); WebResponse webResponse = page.getWebResponse(); if (webResponse.getStatusCode() == 200) { handler.onEvent(eventFactory.pass()); } else { fail(webResponse.getStatusCode(), webResponse.getStatusMessage()); } } catch (Exception e) { error(e.getMessage()); } finally { webClient.closeAllWindows(); } handler.onEvent(eventFactory.end()); } private void fail(Integer status, String message) { ScenarioEvent event = eventFactory.fail(); event.getData().put("statusCode", String.valueOf(status)); event.getData().put("message", message); handler.onEvent(event); } private void error(String message) { ScenarioEvent event = eventFactory.error(); event.getData().put("message", message); handler.onEvent(event); } } }