jmeter-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Deepak Shetty <shet...@gmail.com>
Subject Re: Java Request spawning outside process
Date Fri, 08 Jul 2016 20:30:02 GMT
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 <jmeteruser001@gmail.com>
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 <jmeteruser001@gmail.com>
> 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 <shettyd@gmail.com> 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 <jmeteruser001@gmail.com
> >
> >> 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.
> >> >
> >>
> >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message