首页 > 解决方案 > 移动设备使用 JMeter 中的 JSR223 请求仿真 - 没有这样的属性:类驱动程序

问题描述

设想:

  1. 打开主页并点击“Accept All Cookies”(JSR223 Sampler1 in Once Only 控制器);
  2. 从一组参数化的 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")?将不胜感激任何帮助。

标签: mobilejmeterwebdriverperformance-testingjsr223

解决方案


  1. 在第一个 JSR223 采样器中,您需要将driver实例存储到JMeter 变量中,例如:

    vars.putObject("driver", driver)
    

    它应该是脚本的最后一行

  2. 在第二个 JSR223 采样器中,您需要driver从 JMeter 变量中获取实例,例如:

    driver = vars.getObject("driver")
    

    它应该是脚本的第一行

varsJMeterVariables类实例的简写,请参阅 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"))

推荐阅读