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.
>> >
>>
>
>

Reply via email to