Ответ 1
Ниже приведены возможные способы запуска тестовых ячеек Selenium от JMeter:
- с помощью JUnit Request Sampler;
- с помощью BeanShell Sampler;
- с помощью JSR223 Sampler + Groovy.
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.xTestCase
, такжеSeleneseTestCase
ожидает, что будет запущен внешний сервер Selenium. -
Настроить образец запроса JUnit
2,1. В тестовом плане JMeter добавьте JUnit Request Sampler.
УстановитеClass Name
в соответствии с одним из плана тестирования Selenium.
УстановитеTest Method
, чтобы проверить, что будет запущено.
Оставьте другие параметры по умолчанию.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:
- Интеграция селена с JMeter для тестирования нагрузки
- Интеграция Jmeter с кодом селена
- Тестирование производительности с помощью Selenium и JMeter
- Выполнение тестов Selenium под JMeter
- Как интегрировать тест JUnit4 - Webdriver в JMeter
Пробоотборщик BeanShell
В этом случае тестовый сценарий селена выполняется непосредственно в JMeter BeanShell Sampler.
- Подготовка установки Selenium полностью идентична описанным выше случаям: загрузите библиотеки Selenium, поместите в класс JMeter classpath, запустите сервер Selenium (в случае Selenium RC).
- Поместите тестовый сценарий селена в пробоотборник BeanShell:
Селен 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 будет принят):
Селен 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.