jmeter 将webdriver对象从一个示例传递到另一个示例

xsuvu9jc  于 2023-05-22  发布在  其他
关注(0)|答案(1)|浏览(125)

在JMeter中,我在选择groovy脚本语言的JSR223采样器中使用了下面的代码。
我想在GUI级别测量流中不同自定义用户操作所花费的时间。我正在考虑通过将下面的代码拆分到不同的JSR223采样器,然后阅读每个示例执行所花费的时间来实现这一点。
我只是不知道如何将初始WebDriver对象示例从一个采样器传递到另一个采样器,以便我可以在相同的浏览器和用户流上继续执行一些操作。
我将非常感谢任何人能提供的帮助。

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.By;

    // webdrivermanager-5.3.3-fat.jar is in jmeter lib folder
    io.github.bonigarcia.wdm.WebDriverManager.chromedriver().setup()
    ChromeOptions options = new ChromeOptions().setAcceptInsecureCerts(true)
    WebDriver driver = new ChromeDriver(options)
    def wait = new WebDriverWait(driver, Duration.ofSeconds(5))

    //1 sample start
    driver.get('https://google.com/')
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//button/div[contains(string(), 'Accept all')]")))
    //1 sample end

    //2 sample start
    ACCEPTALL_BUTTON = driver.findElement(By.xpath(".//button/div[contains(string(), 'Accept all')]"))
    ACCEPTALL_BUTTON.click()
    SEARCH_TEXTBOX = driver.findElement(By.xpath("//textarea[@title ='Search']"))
    SEARCH_TEXTBOX.sendKeys("test")
    SEARCH_BUTTON = driver.findElement(By.xpath("//div/div[4]/center//input[@value ='Google Search']"))
    //2 sample end

    //3 sample start
    SEARCH_BUTTON.click()
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("result-stats")))
    //3 sample end

    driver.quit()
yeotifhr

yeotifhr1#

将WebDriver的示例放入JMeterVariables,而不是driver.quit(),如下所示:

vars.putObject('driver', driver)

然后在另一个JSR 223 Sampler中,您将能够恢复它:

def driver = vars.getObject('driver')

更多信息:

您还可以看看WebDriver Sampler,它在线程组开始时示例化WebDriver,然后关闭它,然后虚拟用户执行完成。它也适用于执行> 1个线程。

相关问题