jmeter-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "kirk.pepperdine@gmail.com" <kirk.pepperd...@gmail.com>
Subject Re: Java Request spawning outside process
Date Sat, 09 Jul 2016 08:46:16 GMT
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 <shettyd@gmail.com> 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 <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.
>>>>> 
>>>> 
>>> 
>>> 
>> 


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@jmeter.apache.org
For additional commands, e-mail: user-help@jmeter.apache.org


Mime
View raw message