параметризовать переменную в junit селен, чтобы загрузить тест веб-сайта для запуска на Jmeter - PullRequest
0 голосов
/ 04 января 2019

Мне нужно загрузить тестирование веб-сайта, который выполняет объекты XHR. нормальное нагрузочное тестирование не может быть применено в этом случае, так как нагрузочное тестирование ищет стороны сервера, и меня интересует клиентская сторона.

единственное, что мне нужно для параметризации - это имя пользователя для одновременной работы скрипта

Я использовал Katalon Recorder для получения кода автоматизации в виде JUnit, затем ввел его в селен, затем экспортировал в виде файла jar и использовал его в Jmeter.

код работает для одного пользователя, но я не могу придумать, как запустить скрипт одновременно

пакет приборной панели;

import static org.junit.Assert.fail;

import java.util.concurrent.TimeUnit;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class Testpage {
  private WebDriver driver;
  private String baseUrl;
  private boolean acceptNextAlert = true;
  private StringBuffer verificationErrors = new StringBuffer();

  @Before
  public void setUp() throws Exception {
        System.setProperty("webdriver.chrome.driver", "Path/To/chromedriver.exe");

      WebDriver driver = new ChromeDriver(options);


    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }

  @Test
  public void testDashboard() throws Exception {
    driver.get("https://test.com/newlogin");
    driver.findElement(By.id("UserName")).clear();
    driver.findElement(By.id("UserName")).sendKeys("Username");
    driver.findElement(By.id("Password")).clear();
    driver.findElement(By.id("Password")).sendKeys("Password!");
    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='LOGIN'])[1]/following::input[3]")).click();
    driver.get("https://test.com");
    for (int second = 0;; second++) {
        if (second >= 60) fail("timeout");
        try { if (isElementPresent(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='Italy'])[3]/following::td[4]"))) break; } catch (Exception e) {}
        Thread.sleep(1000);
    }

    driver.get("https://test.com/1");
    for (int second = 0;; second++) {
        if (second >= 60) fail("timeout");
        try { if (isElementPresent(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='Guest_Arrivals_CY'])[2]/following::span[1]"))) break; } catch (Exception e) {}
        Thread.sleep(1000);
    }

    driver.get("https://test.com/2");
    for (int second = 0;; second++) {
        if (second >= 60) fail("timeout");
        try { if (isElementPresent(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='Nov 18'])[1]/following::div[4]"))) break; } catch (Exception e) {}
        Thread.sleep(1000);
    }

    driver.get("https://test.com/3");
    for (int second = 0;; second++) {
        if (second >= 60) fail("timeout");
        try { if (isElementPresent(By.cssSelector("#kSXbjj > svg"))) break; } catch (Exception e) {}
        Thread.sleep(1000);
    }

    driver.get("https://test.com/4");
    for (int second = 0;; second++) {
        if (second >= 60) fail("timeout");
        try { if (isElementPresent(By.cssSelector("#tGPUB > svg > g > text"))) break; } catch (Exception e) {}
        Thread.sleep(1000);
    }

  }

  @After
  public void tearDown() throws Exception {
    driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
      fail(verificationErrorString);
    }
  }

  private boolean isElementPresent(By by) {
    try {
      driver.findElement(by);
      return true;
    } catch (NoSuchElementException e) {
      return false;
    }
  }

  private boolean isAlertPresent() {
    try {
      driver.switchTo().alert();
      return true;
    } catch (NoAlertPresentException e) {
      return false;
    }
  }

  private String closeAlertAndGetItsText() {
    try {
      Alert alert = driver.switchTo().alert();
      String alertText = alert.getText();
      if (acceptNextAlert) {
        alert.accept();
      } else {
        alert.dismiss();
      }`enter code here`
      return alertText;
    } finally {
      acceptNextAlert = true;
    }
  }
}

в своем текущем состоянии страницы загружаются консервативно для одного пользователя, как только элемент на странице загружается, он перемещается на следующую страницу и т. Д.

1 Ответ

0 голосов
/ 04 января 2019

Вам необходимо связать свой скрипт с библиотекой ApacheJMeter_core .Это даст вам доступ к классу JMeterContext , который, в свою очередь, предоставляет доступ на чтение / запись к переменным JMeter через класс JMeterVariables .

Соответствующий код будет выглядеть примерно так:

JMeterVariables vars = JMeterContextService.getContext().getVariables();
String username = vars.get("username"); // this will read `${username}` JMeter Variable

См. Как использовать JUnit с JMeter , чтобы узнать больше советов и подсказок, с которыми можно поиграть с Запрос JUnit сэмплер.

...