Exécution de scripts Selenium avec JMeter
J'ai des scripts Selenium automation prêts avec functional flow, maintenant je veux intégrer ces scripts avec JMeter pour les tests de charge.
Est-ce possible?
Si oui, comment l'intégrer à la fois?
Mon premier objectif est d'exécuter le script d'automatisation en utilisant selenium plutôt que d'exécuter ces scripts dans jmeter pour les tests de charge ou de performance.
4 réponses
Ci-dessous sont des moyens possibles pour exécuter des cas de test de sélénium à partir de JMeter:
- utiliser JUnit Demande de l'Échantillonneur;
- en utilisant BeanShell Sampler ;
- en utilisant Jsr223 Sampler + Groovy .
Échantillonneur De Requêtes JUnit
Exécuter des tests de sélénium de cette façon peut être utile si vous voulez réutiliser des scénarios de sélénium (Java) déjà automatisés au lieu de réécrire des scripts JS pour WebDriver L'échantillonneur.
Sélénium RC
-
Préparer le projet de test de sélénium et la configuration.
1.1. Téléchargez les bibliothèques clientes Java Selenium et mettez
selenium-java-${version}.jar
dans JMeter classpath, par exemple%JMETER_HOME%/lib/
.
1.2. Selenium server devrait être à l'écoute:java -jar selenium-server-standalone-${version}.jar
1.3. Exporter le test de sélénium-planifier comme .jar et enregistrez-le dans
%JMETER_HOME%/lib/junit/
.Remarque: votre classe de test doit étendre
TestCase
ouSeleneseTestCase
pour permettre à JMeter de récupérer ce plan de test, le nom du cas de test doit commencer par "test").
REMARQUE: Par défautSeleneseTestCase
étend JUnit 3.xTestCase
, égalementSeleneseTestCase
s'attend à ce que le serveur Selenium externe soit en cours d'exécution. -
Configurer échantillonneur de requêtes JUnit
2.1. Dans JMeter test-plan ajouter JUnit demande sampler .
DéfinissezClass Name
selon celui du plan de test de sélénium.
DéfinissezTest Method
pour tester qui est sur le point de s'exécuter.
Laisser d'autres paramètres par défaut.JUnit 3.x contre 4.x
JUnit Request Sampler peut traiter les classes et méthodes de style JUnit3 et JUnit4. Pour définir Sampler pour rechercher des tests JUnit 4 (@Test
annotations) cochez la caseSearch for Junit4 annotations (instead of JUnit 3)
dans les paramètres ci-dessus.
Les annotations JUnit4 suivantes sont reconnues:@ Test-utilisé pour trouver des méthodes de test et des classes. Les attributs" expected "et" timeout " sont pris en charge.
@Before-traité de la même manière que setUp () dans JUnit3
@Après-traité le même que tearDown () dans JUnit3
@BeforeClass, @AfterClass-traités comme des méthodes de test afin qu'ils puissent être exécutés indépendamment selon les besoins Vous êtes prêt à commencer votre test de sélénium avec JMeter.
Code Java pour l'échantillonneur de requêtes JUnit:
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
Le script de Test écrit dans JUnit 4 utilise des annotations 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();
}
}
Sélénium WebDriver
Ce cas est une alternative à Webdriver Sampler mentionné dans une autre réponse ci-dessous.
conditions Préalables
La seule différence avec Selenium RC cas est Sélénium installation de préparation:
1.1. Téléchargez et mettez selenium-server-standalone-${version}.jar
dans JMeter classpath, par exemple %JMETER_HOME%/lib/
.
remarque: Il n'est pas nécessaire de démarrer le serveur Selenium.
, Toutes les autres étapes sont les mêmes que dans le scénario décrit surtout.
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.
Autres bons points et guides étape par étape pour utiliser Selenium + JUnit + JMeter bundle:
- intégration du sélénium avec JMeter pour les tests de charge
- intégration de Jmeter avec le code sélénium
- test de Performance avec sélénium et JMeter
- exécution de tests de sélénium sous JMeter
- comment intégrer un test JUnit4-Webdriver dans JMeter
BeanShell Sampler
Dans ce cas, selenium test-scenario est exécuté directement dans BeanShell Sampler de JMeter.
- la préparation de Selenium setup est complètement identique aux cas décrits ci-dessus: télécharger les bibliothèques Selenium, mettre à JMeter classpath, démarrer Selenium server (dans le cas de Selenium RC).
- mettez votre scénario de test de sélénium dans BeanShell Sampler:
Sélénium 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
Dans ce cas, selenium test-scenario est exécuté via Jsr223 Sampler + Groovy .
Pour considérations de performance cette approche semble être plus préférable que d'utiliser BeanShell Sampler décrit ci-dessus.
- la préparation de Selenium setup est complètement identique aux cas décrits ci-dessus: téléchargez les bibliothèques Selenium, mettez-les dans JMeter classpath, démarrez Selenium server (dans le cas de Selenium RC).
-
Ajouter un support Groovy pour L'échantillonneur JSR223:
2.1. télécharger la dernière distribution binaire Groovy;
2.2. copiezgroovy-all-${VERSION}.jar
du dossier de distribution" embeddable " et déposez-le dans%JMETER_HOME%/lib/
;
2.3. redémarrez JMeter. -
Configurer L'échantillonneur JSR233:
3.1. ajouter L'échantillonneur JSR233 au groupe de threads;
3.2. définissezScript Language
surgroovy
dans les paramètres de l'échantillonneur;
3.3. mettez votre sélénium test-scenario dans la sectionScript
(le code Java sera accepté):
Sélénium 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;
Notes communes pour les cas D'échantillonneur BeanShell / JSR223:
- utiliser externe .bsh / .fichiers groovy avec test-scenario (
Script file
champ) au lieu d'utiliser le code Beanshell / Groovy directement dans l'échantillonneur pour les tests intensifs. - depuis que les échantillonneurs BeanShell / JSR233 ont accès à JMeter variables vous pouvez définir le statut test (=exécution de l'échantillonneur) directement dans test-scenario (via par exemple
IsSuccess = STATUS
ouSampleResult.setSuccessful(STATUS)
, voir le code ci-dessus), sans utiliser L'Assertion de réponse.
Il existe un moyen plus simple d'exécuter des scripts Selenium.
- Téléchargez plugin WebDriver et déplacez-vous dans le dossier lib/.
- Ajoutez jp @ gc - Firefox Driver Config et JP@gc - Web Driver Sampler à votre arbre de test
-
Ajouter ce code
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()
Exécutez votre test
Pour plus d'informations sur la syntaxe du code et les meilleures pratiques, vous pouvez essayer en utilisant Selenium avec L'article Webdriver Sampler de JMeter.
Donc, fondamentalement, vous enregistrez d'abord votre script avec selenium, puis réenregistrez les cas de test selenium en utilisant jmeter. :-)
Http://codenaut.blogspot.com/2011/06/icefaces-load-testing.html
Définissez votre proxy d'enregistrement jmeter sur un port spécifique sous la section Paramètres de firefox
Lancez votre script selenium en utilisant le navigateur firefox, vous obtiendrez toutes vos actions mises à jour:)
Profitez!