Hi There are 2 different things here. In JMeter - you would typically use a HTTP request to generate load onto the server - Here JMeter simply simulates the HTTP protocol and its upto your test script to generate the load you want. So for e.g. if you request a page - and the page in turn requests images/ javascripts or other pages via javascript calls - its upto your script to figure this out and simulate it in the same way (though jmeter tries to help)
Another way to simulate the load is to actually drive a browser (e.g Selenium or what you are trying to do) where the script is more closer to what a user does (clicks link!) rather than try to figure out what the HTTP request/responses are. These give you a more client centric view (debatable) but are heavier processes. There are pros and cons to both approaches. Both solutions will achieve what you state - you can have a baseline and you can assess the impact of changing load on the baseline. But you should note that JMeter will tell you the "response time" for an HTTP request whereas a browser will tell you the response time for a page. The advise you got from Kirk is - if you want to generate a load on the server and you want to know the response time for each of those requests then you should be focusing on what load the server is seeing - It doesnt matter whether the client is spawning processes or threads (it is indirectly related that you would need more Jmeter instances to generate load). If you want to know browser response times then JMeter is the wrong tool .(though Id phrase it as not the ideal tool ) On Mon, Jul 11, 2016 at 4:21 AM, Michael Logan <[email protected]> wrote: > Hi Kirk, > > My goal is to push load onto the server and establish a baseline for > defined tests. For example, if 20 users order a product (login, find > product, add to cart...etc), what happens to response times. If that load > is doubled to 40, what happens at that point. I will more than likely be > using multiple clients to push the load to the server(s). I would like my > client to be able to push as much load to the server as possible. When the > browser I'm using, JBrowserDriver, uses a seperate process/jvm that client > to load ratio goes down. The reason I was inquiring about the browser as > the HTMLUnitDriver I tried was unable to find some of the elements that the > JBrowserDriver was. Do you have any opinion on what I can review as a > replacement or approach? > > Thanks Mike. > > On Sat, Jul 9, 2016 at 4:46 AM, [email protected] < > [email protected]> wrote: > > > 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] > > > > >
