Ниже приведены возможные способы запуска тестовых примеров Selenium из JMeter:
JUnit Request Sampler
Запуск тестов Selenium таким способом может быть полезен, если вы хотите повторно использовать уже автоматизированные (Java) сценарии Selenium вместо переписывания JS-скриптов для WebDriver Sampler .
Selenium 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 мог подобрать этот план тестированияимя тестового набора должно начинаться с «test» ).
ПРИМЕЧАНИЕ: По умолчанию SeleneseTestCase
расширяет JUnit 3.x TestCase
, также 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:
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 .
- Подготовка к установке Seleniumполностью идентичен описанным выше случаям: скачать библиотеки Selenium, поставить в JMeter classpath, запустить Selenium server (в случае Selenium RC).
- Поместите свой тестовый сценарий селена в BeanShell Sampler:
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, описанного выше.
- Подготовка к установке Selenium полностью идентична описанным выше случаям: загрузите библиотеки Selenium, поместите в путь к классам JMeter, запустите сервер Selenium (в случае Selenium RC).
Добавить поддержку Groovy для JSR223 Sampler:
2,1. скачать последнюю версию Groovy бинарный дистрибутив;
2.2. скопируйте groovy-all-${VERSION}.jar
из «встраиваемой» папки дистрибутива и поместите в %JMETER_HOME%/lib/
;
2,3. перезапустите JMeter.
Настройка JSR233 Sampler:
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)
, см. Код выше), не используя утверждение ответа.