mobile - 移动设备使用 JMeter 中的 JSR223 请求仿真 - 没有这样的属性:类驱动程序
问题描述
设想:
- 打开主页并点击“Accept All Cookies”(JSR223 Sampler1 in Once Only 控制器);
- 从一组参数化的 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<String, Object> mobileEmulation = new HashMap<>(); mobileEmulation.put("userAgent", "vars.get("userAgent")"); Map<String, Object> chromeOptions = new HashMap<>(); chromeOptions.put("mobileEmulation", mobileEmulation); ChromeOptions 选项 = 新 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”)),因为结果提供了采样器工作的时间,包括驱动程序初始化,新的浏览器实例启动,它需要几秒钟......
您能否提出任何想法,如何解决这个问题?要在 1 个浏览器实例中获取所有请求并为 JSR223 Sampler2 中的所有请求提供实际响应时间,仅适用于 browser.get("url")?将不胜感激任何帮助。
解决方案
在第一个 JSR223 采样器中,您需要将
driver
实例存储到JMeter 变量中,例如:vars.putObject("driver", driver)
它应该是脚本的最后一行
在第二个 JSR223 采样器中,您需要
driver
从 JMeter 变量中获取实例,例如:driver = vars.getObject("driver")
它应该是脚本的第一行
vars
是JMeterVariables类实例的简写,请参阅 JavaDoc 了解所有可用函数和Top 8 JMeter Java Classes You Should Be Using with Groovy文章,了解有关可用于 JSR223 测试元素的 JMeter API 简写的更多信息
PS在执行以下功能vars
时应遵循与您相同的方法:driver.get()
driver.get("https://" + vars.get("url"))
推荐阅读
- svg - SVG 背景动画消耗大量 CPU (loading.io)
- php - 获取数组的最后一个元素以从中删除逗号
- arrays - 重复数组
- c++ - 将带参数的构造函数作为参数传递给另一个构造函数
- td-engine - TDengine 错误:“提交失败的数据库内存已满”
- image - 如何在 Matlab 中叠加具有多边形形状的图像?
- javascript - 如何将回调函数设置为 react-paginate 和 TypeScript 的道具?
- c++ - UE4 使用具有自己参数的函数作为参数,C++
- pandas - 如果循环一个数据框并在该循环内创建新列,它会是无穷无尽的吗?
- c++ - Gcov 不会在 Windows 上生成 .gcno 文件