Hi, If your goal is to push load on the server, you are focusing on the wrong thing. How the browser behaves is mostly irrelevant. What you want is to apply a production level of pressure following a production like schedule on the server. If you’re goal is to test browser performance then JMeter is the wrong tool.
Kind regards, Kirk Pepperdine > On Jul 8, 2016, at 10:30 PM, Deepak Shetty <[email protected]> wrote: > > sorry didnt see this - as far as I am aware most of the browser simulators > work using processes , not threads. > http://jmeter-plugins.org/wiki/WebDriverTutorial/ is probably a better fit > for JMeter but likely has the same issue that you see. > > Selenium Grid is *probably* the better tool if you really want browser > behavior (though my infortmation is outdated) > > On Fri, Jul 8, 2016 at 12:39 PM, Michael Logan <[email protected]> > wrote: > >> Reviewing the JBrowserDrive source code I can see this is launching the >> external process. >> >> >> https://github.com/MachinePublishers/jBrowserDriver/blob/master/src/com/machinepublishers/jbrowserdriver/JBrowserDriver.java >> >> Sorry for the confusion. I started to use JBrowserDriver as it was able to >> handle the Ajax/non-accessible website. Any opinion on another driver that >> is equiped to handle my website and doesn't launch an external process? >> >> On Fri, Jul 8, 2016 at 3:27 PM, Michael Logan <[email protected]> >> wrote: >> >>> I don't think I am. Here is my code for creating the JBrowserDriver, >>> logging into the website, and then finally storing into the JMeter >> context >>> variables. >>> >>> >>> package gov.state; >>> >>> import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; >>> import java.io.Serializable; >>> import java.util.concurrent.TimeUnit; >>> import com.machinepublishers.jbrowserdriver.JBrowserDriver; >>> import org.apache.commons.lang.BooleanUtils; >>> import org.apache.jmeter.config.Arguments; >>> import org.apache.jmeter.samplers.SampleResult; >>> import org.openqa.selenium.*; >>> import org.openqa.selenium.support.ui.ExpectedConditions; >>> import org.openqa.selenium.support.ui.WebDriverWait; >>> import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; >>> >>> public class InstantiateBrowser extends AbstractJavaSamplerClient >>> implements Serializable { >>> >>> private static final long serialVersionUID = 5710042664127564753L; >>> private JBrowserDriver driver; >>> private String lastStep; >>> public static String Username = ""; >>> public static String Password = ""; >>> public static boolean ErrorCapture = false; >>> public static String ErrorDetailPath = ""; >>> public static String Host = ""; >>> public static String Directory = ""; >>> String executionTag; >>> >>> @Override >>> public Arguments getDefaultParameters() { >>> //add arguments to the JMeter Java Sample page. >>> Arguments defaultParameters = new Arguments(); >>> defaultParameters.addArgument("Username", "<<Username to use>>"); >>> defaultParameters.addArgument("Password", "<<Password to use>>"); >>> defaultParameters.addArgument("ErrorCapture","false"); >>> defaultParameters.addArgument("ErrorDetailPath", "The path to >> save >>> source and screenshots with a trailing slash."); >>> defaultParameters.addArgument("TEBSHost","http://thissite.com"); >>> defaultParameters.addArgument("TEBSDirectory", "appdirectory"); >>> return defaultParameters; >>> } >>> >>> public void setUp(JavaSamplerContext context) throws Exception { >>> //set the execution tag for log statements >>> executionTag = "ExecutionTimestamp::" + Common.GetTimeStamp(); >>> >>> //try to get the parameters that were passed in. >>> try { >>> Username = context.getParameter("Username"); >>> Password = context.getParameter("Password"); >>> ErrorCapture = >>> BooleanUtils.toBoolean(context.getParameter("ErrorCapture")); >>> ErrorDetailPath = context.getParameter("ErrorDetailPath"); >>> Host = context.getParameter("TEBSHost"); >>> Directory = context.getParameter("TEBSDirectory"); >>> } >>> catch (Exception ex) { >>> Common.ExceptionToSysOut(executionTag, ex); >>> Common.wl(executionTag, "Exception with parameters"); >>> } >>> >>> //instantiate the browser >>> try { >>> driver = new JBrowserDriver(); >>> } catch (Exception ex) { >>> Common.ExceptionToSysOut(executionTag, ex); >>> } >>> >>> driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); >>> } >>> >>> @Override >>> public SampleResult runTest(JavaSamplerContext context) { >>> >>> // Create the result >>> SampleResult result = new SampleResult(); >>> >>> // start the timer >>> result.sampleStart(); // start stopwatch >>> >>> try { >>> >>> //run setUp >>> setUp(context); >>> >>> //access the website >>> driver.get(Host + "/" + Directory + "/login.jsp"); >>> >>> lastStep = "Trying to log in..."; >>> >>> driver.findElement(By.id("loginText")).clear(); >>> driver.findElement(By.id("loginText")).sendKeys(Username); >>> driver.findElement(By.name("password")).clear(); >>> driver.findElement(By.name("password")).sendKeys(Password); >>> driver.findElement(By.xpath("//button[contains(.,'Sign >>> In')]")).click(); >>> >>> //Validate that we see the session as logged in. >>> WebElement elementLoggedIn = null; >>> try { >>> //Let's wait at most 20 seconds for the result to appear. >>> elementLoggedIn = (new WebDriverWait(driver, 20)) >>> >>> >> .until(ExpectedConditions.presenceOfElementLocated(By.xpath("//td[contains(.,'Logged >>> In As')]"))); >>> //if we have gotten to this point we can assume that >> login >>> was successful. >>> //set the result to success >>> result.setSuccessful(true); >>> result.setResponseMessage("Verification Passed"); >>> >>> //grab the JMeter context and store the browser into >> memory >>> org.apache.jmeter.threads.JMeterContext jmetercontext = >>> org.apache.jmeter.threads.JMeterContextService.getContext(); >>> org.apache.jmeter.threads.JMeterVariables vars = >>> jmetercontext.getVariables(); >>> //we are storing the driver as a variable named "browser" >>> vars.putObject("browser", driver); >>> jmetercontext.setVariables(vars); >>> } >>> catch (NoSuchElementException ex) { >>> Common.wl(executionTag, "Element not found."); >>> Common.ExceptionToSysOut(executionTag, ex); >>> ErrorToDisk.WriteIt(driver, ErrorDetailPath, >>> "InstantiateBrowser", executionTag); >>> result.setSuccessful(false); >>> result.setResponseMessage(executionTag + "::Element Not >>> found 1." + Common.ExceptionToString(ex)); >>> >>> result.setDataType(org.apache.jmeter.samplers.SampleResult.TEXT); >>> } >>> catch (Exception ex) { >>> Common.wl(executionTag, "Unexpected exception"); >>> Common.ExceptionToSysOut(executionTag, ex); >>> ErrorToDisk.WriteIt(driver, ErrorDetailPath, >>> "InstantiateBrowser", executionTag); >>> result.setSuccessful(false); >>> result.setResponseMessage(executionTag + "::Element Not >>> found 2." + Common.ExceptionToString(ex)); >>> >>> result.setDataType(org.apache.jmeter.samplers.SampleResult.TEXT); >>> } >>> >>> //stop the clock >>> result.sampleEnd(); >>> >>> } catch (Exception e) { >>> \\remove for brevity >>> >>> } >>> >>> //return the result >>> return result; >>> } >>> >>> @Override >>> public void teardownTest(JavaSamplerContext context) { >>> //driver.quit(); >>> super.teardownTest(context); >>> >>> } >>> >>> >>> >>> } >>> >>> On Fri, Jul 8, 2016 at 3:00 PM, Deepak Shetty <[email protected]> wrote: >>> >>>> The sampler itself should run as the same java process - are you sure >> you >>>> arent launching processes from within the sampler ? >>>> >>>> On Fri, Jul 8, 2016 at 11:56 AM, Michael Logan <[email protected] >>> >>>> wrote: >>>> >>>>> Hi, >>>>> >>>>> I am trying to use the Java Request Sampler to test my website. I am >>>>> noticing that my requests get started as another process, not as a >>>> thread >>>>> under the JMeter process. Is this what is supposed to happen with a >>>> custom >>>>> Java Request Sampler? My custom Java Request Sampler extends the >>>>> AbstractJavaSamplerClient >>>>> >>>>> Behavior during test run. >>>>> JMeter version 2.13 - I see an external java process for each user. >>>>> JMeter version 3.0 - I see an many more java processes, I shut-down >> the >>>>> test when I saw about 15 of them. >>>>> >>>>> Here is the outline of my test: >>>>> Thread Group (5 users, 35 second ramp up, 1 loop) >>>>> - Java Request Sampler (create the browser, log into a website, store >>>> the >>>>> browser in JMeter context) >>>>> - Runtime Controller (Runtime 480 seconds) >>>>> - - Java Request Sampler (do an action in the website) >>>>> - end Runtime Controller >>>>> - Java Request Sampler (log out of the application, close the driver) >>>>> >>>>> Is this normal behavior? If so, how can I control those spawn Java >>>>> processes? I do launch JMeter from the .bat file that specifies all >> the >>>>> JVM parameters. >>>>> >>>>> Thanks in advance for any help. >>>>> >>>> >>> >>> >> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
