Запуск сценариев Selenium с помощью JMeter - PullRequest
24 голосов
/ 19 октября 2011

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

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

Ответы [ 4 ]

27 голосов
/ 19 октября 2011

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


JUnit Request Sampler

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

Selenium RC


  1. Подготовить тестовый проект 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 мог подобрать этот план тестированияимя тестового набора должно начинаться с «test» ).
    ПРИМЕЧАНИЕ: По умолчанию SeleneseTestCase расширяет JUnit 3.x TestCase, также SeleneseTestCase ожидает внешний Seleniumсервер должен быть запущен.

  2. Настроить 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- рассматриваются как методы испытаний, поэтому их можно запускать независимо друг от друга при необходимости

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

Java-код для сэмплера JUnit Request:

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

Testскрипт, написанный на 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 в classpath 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 Sampler

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

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

enter image description here

Selenium 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, описанного выше.

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

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

  3. Настройка JSR233 Sampler:

    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), см. Код выше), не используя утверждение ответа.
8 голосов
/ 21 августа 2013

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

  1. Загрузите Плагин WebDriver и перейдите в папку lib /.
  2. Добавьте jp @ gc - драйвер FirefoxConfig и jp @ gc - Sampler веб-драйвера для вашего тестового дерева

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 с JDMeter WebDriver Sampler статья.

2 голосов
/ 26 февраля 2019

Не должно быть необходимости использовать Selenium с JMeter.Сценарий Selenium будет использовать один экземпляр браузера за раз.Принимая во внимание, что JMeter не использует реальный экземпляр браузера для генерации нагрузки.

Пожалуйста, дайте мне знать, можно ли использовать скрипт Selenium для генерации загрузки с точки зрения пользовательского интерфейса для 5000 пользователей.Это, вероятно, может.Но тогда мы говорим, что сценарию Selenium теперь потребуется 5000 экземпляров браузера в той же системе?Будет ли тест по-прежнему выполняться или система будет зависать?JMeter уже имеет отличные возможности в качестве рекордера.Это обеспечивает отличную статистику с точки зрения «нагрузочного» тестирования.

На мгновение, если мы думаем, что пользователи, которые знают Selenium, не будут знать, как писать сценарии в JMeter и, следовательно, изучать кривую.Но в случае с JMeter это даже не так.Это потому, что нет необходимости создавать что-то вроде логической последовательности или программы в первую очередь.

1 голос
/ 20 октября 2011

Таким образом, в основном вы сначала записываете свой сценарий с селеном, а затем перезаписываете тестовые сценарии селеном, используя jmeter. :-)

http://codenaut.blogspot.com/2011/06/icefaces-load-testing.html

...