Подтвердить что ты не робот

Запуск сценариев Selenium с помощью JMeter

У меня есть сценарии автоматизации Selenium, готовые с функциональным потоком, теперь я хочу интегрировать эти сценарии с JMeter для тестирования нагрузки.
Возможно ли это?
Если да, то как интегрировать оба?

Моя первая цель - запустить автоматизацию script с использованием селена, чем запустить эти сценарии в jmeter для тестирования нагрузки или производительности.

4b9b3361

Ответ 1

Ниже приведены возможные способы запуска тестовых ячеек Selenium от JMeter:


JUnit Request Sampler

Запуск тестов Selenium таким образом может оказаться полезным, если вы хотите повторно использовать уже автоматизированные сценарии Selenium (Java) вместо повторной записи JS-скриптов для WebDriver Sampler.

Селен RC


  • Подготовьте проект и настройку проекта Selenium.

    1,1. Загрузите клиентские библиотеки Selenium Java и поместите selenium-java-${version}.jar в путь класса JMeter, например. %JMETER_HOME%/lib/.
    1.2. Сервер Selenium должен быть поднят и прослушиваться:

    java -jar selenium-server-standalone-${version}.jar
    

    1,3. Экспортируйте тестовый план Selenium как .jar и сохраните его до %JMETER_HOME%/lib/junit/.

    ПРИМЕЧАНИЕ.. Ваш тестовый класс должен расширять TestCase или SeleneseTestCase, чтобы позволить JMeter забрать этот план тестирования, имя тестового примера должно начинаться с "теста" )..
    ПРИМЕЧАНИЕ: По умолчанию SeleneseTestCase расширяет JUnit 3.x TestCase, также SeleneseTestCase ожидает, что будет запущен внешний сервер Selenium.

  • Настроить образец запроса JUnit

    2,1. В тестовом плане JMeter добавьте JUnit Request Sampler.
    Установите Class Name в соответствии с одним из плана тестирования Selenium.
    Установите Test Method, чтобы проверить, что будет запущено.
    Оставьте другие параметры по умолчанию.

    enter image description here

    JUnit 3.x против 4.x
     JUnit Request Sampler может обрабатывать классы и методы JUnit3- и JUnit4. Чтобы установить Sampler для поиска тестов JUnit 4 (@Test аннотации), установите флажок Search for Junit4 annotations (instead of JUnit 3) в настройках выше.
     Подтверждаются следующие аннотации JUnit4:

    @Test - используется для поиска методов тестирования и классов. Поддерживаются атрибуты "ожидаемый" и "тайм-аут".
    @Before - обрабатывается так же, как setUp() в JUnit3
    @After - обрабатывается так же, как tearDown() в JUnit3
    @BeforeClass, @AfterClass - обрабатываются как методы тестирования, поэтому их можно запускать независимо по мере необходимости

  • Вы готовы начать тест Selenium с помощью JMeter.

Код Java для JUnit Request sampler:

JUnit 3.x

package com.example.tests;

import com.thoughtworks.selenium.*;

public class selenium extends SeleneseTestCase {

    private static Selenium selenium;

    public void setUp() throws Exception {
        selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.google.com/");
        selenium.start();
        selenium.windowMaximize();
    }

    public void testSelenium() throws Exception {
        selenium.open("/");
        selenium.waitForPageToLoad("30000");
        Assert.assertEquals("Google", selenium.getTitle());
    }

    public void tearDown() throws Exception {
        selenium.close();
    }
}

JUnit 4.x

Тест script, написанный в JUnit 4, использует аннотации JUnit:

package com.example.tests;

import com.thoughtworks.selenium.*;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class selenium extends SeleneseTestCase {

    private static Selenium selenium;

    @Before
    public void setUp() throws Exception {
        selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.google.com/");
        selenium.start();
        selenium.windowMaximize();
    }

    @Test
    public void testSelenium() throws Exception {
        selenium.open("/");
        selenium.waitForPageToLoad("30000");
        Assert.assertEquals("Google", selenium.getTitle());
    }

    @After
    public void tearDown() throws Exception {
        selenium.stop();
    }
}

Selenium WebDriver


Этот случай является альтернативой WebDriver Sampler, упомянутым в другом ответе ниже.

Необходимые условия

Единственная разница с корпусом Selenium RC - подготовка установки Selenium:

1,1. Загрузите и поместите selenium-server-standalone-${version}.jar в путь класса JMeter, например. %JMETER_HOME%/lib/.
ПРИМЕЧАНИЕ. Нет необходимости запускать сервер Selenium.

Все остальные шаги такие же, как в описанном выше сценарии.


package org.openqa.selenium.example;

import junit.framework.TestCase;

import org.junit.Before;
import org.junit.Test;
import org.junit.After;
import org.openqa.selenium.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;

public class selenium extends TestCase {
    public static WebDriver driver;

    @Before
    public void setUp() {
        FirefoxProfile profile = new FirefoxProfile();
        driver = new FirefoxDriver(profile);
    }

    @Test
    public void testSelenium() throws Exception {
        driver.get("http://www.google.com/");
        Assert.assertEquals("Google", driver.getTitle());
    }

    @After
    public void tearDown() {
        driver.quit();
    }
}

Upd.

Другие хорошие точки и пошаговые руководства для использования пакета Selenium + JUnit + JMeter:


Пробоотборщик BeanShell

В этом случае тестовый сценарий селена выполняется непосредственно в JMeter BeanShell Sampler.

  • Подготовка установки Selenium полностью идентична описанным выше случаям: загрузите библиотеки Selenium, поместите в класс JMeter classpath, запустите сервер Selenium (в случае Selenium RC).
  • Поместите тестовый сценарий селена в пробоотборник BeanShell:

enter image description here

Селен RC

import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;

Boolean result = true;

try {
    selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://www.google.com/");
    selenium.start();
    selenium.windowMaximize();

    selenium.open("/");
    selenium.waitForPageToLoad("30000");  

    if (!selenium.isTextPresent("Google")) result = false;
} catch (Exception ex) {
    ex.printStackTrace();
    IsSuccess = false;
    ResponseCode = "500";
    ResponseMessage = ex.getMessage();
} finally {
    selenium.stop();
}

IsSuccess = result;
return result;

Selenium WebDriver

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;

Boolean result = true;

try {
    driver = new HtmlUnitDriver();
    driver.setJavascriptEnabled(true);

    driver.get("http://www.google.com/");

    if (!driver.getTitle().contains("Google")) result = false;
} catch (Exception ex) {
    ex.printStackTrace();
    IsSuccess = false;
    ResponseCode = "500";
    ResponseMessage = ex.getMessage();
} finally {
    driver.quit();
}

IsSuccess = result;
return result;

JSR223 Sampler + Groovy

В этом случае тестовый сценарий селена выполняется через JSR223 Sampler + Groovy.
Для соображений производительности этот подход представляется более предпочтительным, чем использование описанного выше BeanShell Sampler.

  • Подготовка установки Selenium полностью идентична описанным выше случаям: загрузите библиотеки Selenium, поместите в класс JMeter classpath, запустите сервер Selenium (в случае Selenium RC).
  • Добавить поддержку Groovy для JSR223 Sampler:

    2,1. скачать последние Groovyбинарное распределение;
    2.2. скопируйте groovy-all-${VERSION}.jar из папки "embeddable" дистрибутива и отпустите его до %JMETER_HOME%/lib/.
    2,3. перезапустите JMeter.

  • Настройте пробник JSR233:

    3,1. добавить JSR233 Sampler в группу потоков;
    3.2. установите Script Language в groovy в настройках пробоотборника;
    3.3. поместите тестовый сценарий селена в раздел Script (код Java будет принят):

enter image description here

Селен RC

import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;

Boolean result = true;

try {
    selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://www.google.com/");
    selenium.start();
    selenium.windowMaximize();

    selenium.open("/");
    selenium.waitForPageToLoad("30000");      

    if (!selenium.isTextPresent("Google")) result = false;
} catch (Exception ex) {
    ex.printStackTrace();
    log.error(ex.getMessage());
     SampleResult.setSuccessful(false);
     SampleResult.setResponseCode("500");
     SampleResult.setResponseMessage(ex.getMessage());
} finally {
    selenium.stop();
}

SampleResult.setSuccessful(result);
return result;

Selenium WebDriver

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;

Boolean result = true;

try {
    driver = new HtmlUnitDriver();
    driver.setJavascriptEnabled(true);

    driver.get("http://www.google.com/");

    if (!driver.getTitle().contains("Google")) result = false;
} catch (Exception ex) {
    ex.printStackTrace();
    log.error(ex.getMessage());
     SampleResult.setSuccessful(false);
     SampleResult.setResponseCode("500");
     SampleResult.setResponseMessage(ex.getMessage());
} finally {
    driver.quit();
}

SampleResult.setSuccessful(result);
return result;

Общие примечания для BeanShell/JSR223 Примеры сэмплеров:

  • Используйте внешние файлы .bsh/.groovy с тестовым сценарием (поле Script file) вместо использования кода Beanshell/Groovy непосредственно в пробоотборнике для интенсивного тестирования.
  • Так как пробоотборники BeanShell/JSR233 имеют доступ к переменным JMeter, вы можете установить статус теста (= выполнение сэмплера) непосредственно в тестовом сценарии (например, IsSuccess = STATUS или SampleResult.setSuccessful(STATUS), см. код выше), не используя Assonse of Response.

Ответ 2

Существует более простой способ запуска сценариев Selenium.

  • Загрузите плагин WebDriver и перейдите в папку lib/.
  • Добавьте jp @gc - Конфигурация драйвера Firefox и jp @gc - Пробник веб-драйвера в тестовое дерево.

Jmeter test tree

  • Добавьте этот код

        var pkg = JavaImporter(org.openqa.selenium)
        var support_ui = JavaImporter(org.openqa.selenium.support.ui.WebDriverWait)
        var wait = new support_ui.WebDriverWait(WDS.browser, 5000)
        WDS.sampleResult.sampleStart()
        WDS.log.info("Opening page...");
        WDS.browser.get('http://duckduckgo.com')
        var searchField = WDS.browser.findElement(pkg.By.id('search_form_input_homepage'))
        searchField.click()
        WDS.log.info("Clicked search field")
        searchField.sendKeys(['blazemeter'])
        WDS.log.info("Inserted blazemeter keyword")
        var button = WDS.browser.findElement(pkg.By.id('search_button_homepage'))
        button.click()
        WDS.log.info("Clicked search button");
        var link = WDS.browser.findElement(pkg.By.ByCssSelector('#r1-0 > div.links_main > h2 > a.large > b'))
        link.click()
        WDS.log.info("Clicked blazemeter link");
        WDS.log.info(WDS.name + ' finishing...');
        WDS.sampleResult.sampleEnd()
    
  • Запустите тест

Для получения более подробной информации о синтаксисе кода и рекомендациях вы можете попробовать Использование Selenium с JMeter WebDriver Sampler.

Ответ 4

определите свой прокси-сервер записи jmeter на определенном порту в разделе настроек firefox

запустите свой селен script с помощью браузера Firefox, вы обновите все свои действия:)

наслаждайтесь!