问题描述
场景:
- 打开主页,然后单击“接受所有Cookie”(“ Only Only”控制器中的JSR223 Sampler1);
- 从参数化的URL(另一个控制器中的JSR223 Sampler2)中打开页面。
主页的JSR223 Sampler1代码:
导入org.apache.jmeter.samplers.SampleResult;进口 org.openqa.selenium.chrome.ChromeOptions;进口 org.openqa.selenium.chrome.ChromeDriver;进口 org.openqa.selenium.WebDriver;导入org.openqa.selenium.By;进口 org.openqa.selenium.WebElement;进口 org.openqa.selenium.support.ui.ExpectedConditions;进口 org.openqa.selenium.support.ui.WebDriverWait;进口 java.util.concurrent.TimeUnit;
System.setProperty(“ webdriver.chrome.driver”, “ vars.get(” webdriver_path“)”);
Map
mobileEmulation =新的HashMap (); mobileEmulation.put(“ userAgent”,“ vars.get(” userAgent“)”); Map chromeOptions = new HashMap (); chromeOptions.put(“ mobileEmulation”,mobileEmulation); ChromeOptions options = new ChromeOptions(); options.setExperimentalOption(“ mobileEmulation”,mobileEmulation); ChromeDriver驱动程序=新的ChromeDriver(选项); driver.get(“ https://vars.get(” main_page“)”); WebDriverWait等待=新 WebDriverWait(驱动程序,20); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(“ xpath”)))); driver.findElement(By.xpath(“ xpath”))。click(); log.info(driver.getTitle());
该URL组中任何页面的JSR223 Sampler2代码:
driver.get(“ https:// $ {url}”);
错误消息: 响应消息:javax.script.ScriptException:groovy.lang.MissingPropertyException:无此类属性:类的驱动程序
问题: 如果我只是将所有代码从JSR223 Sampler1复制到JSR223 Sampler2并更改目标url,则url正在打开,但是方式不正确-每次启动新的浏览器实例时都会启动,并且我无法获得真实的响应时间(对于driver.get(“ url “”),因为结果提供了Sampler工作的时间,其中包括驱动程序初始化,启动新的浏览器实例,并且需要花费几秒钟的时间...
请提出任何想法,如何解决此问题?要在1个浏览器实例中获取所有请求,并在JSR223 Sampler2中仅对browser.get(“ url”)获得真实的响应时间? 感谢您的帮助。
解决方法
-
在第一个JSR223采样器中,您需要将
driver
实例存储到JMeter Variables中,例如:vars.putObject("driver",driver)
它应该是脚本的最后一行
-
在第二个JSR223采样器中,您需要从JMeter变量获取
driver
实例,例如:driver = vars.getObject("driver")
它应该是脚本的第一行
vars
是JMeterVariables类实例的简写,有关所有可用函数的信息,请参阅JavaDoc;有关{j3eter}的JMeter API简写的更多信息,请参见Top 8 JMeter Java Classes You Should Be Using with Groovy文章。
P.S。与执行vars
之类的函数时应遵循的driver.get()
相同的方法:
driver.get("https://" + vars.get("url"))