J'ai des scripts d'automatisation Selenium prêts avec un flux fonctionnel, maintenant je veux intégrer ces scripts avec JMeter pour les tests de charge.
Est-ce possible?
Si oui, comment intégrer les deux?
Mon premier objectif est d'exécuter le script d'automatisation à l'aide de Selenium que d'exécuter ces scripts dans jmeter pour les tests de charge ou de performances.
Vous trouverez ci-dessous différentes manières d'exécuter des cas de test Selenium à partir de JMeter:
L'exécution de tests Selenium de cette manière peut être utile si vous souhaitez réutiliser des scénarios Selenium déjà automatisés (Java) au lieu de réécrire des scripts JS pour WebDriver Sampler .
Préparez le projet de test et la configuration de Selenium.
1.1. Téléchargez Selenium Java bibliothèques clientes et placez Selenium-Java-${version}.jar
Dans le chemin de classe JMeter, par exemple %JMETER_HOME%/lib/
.
1.2. Le serveur Selenium doit être à l'écoute:
Java -jar Selenium-server-standalone-${version}.jar
1.3. Exportez le plan de test Selenium au format .jar et enregistrez-le dans %JMETER_HOME%/lib/junit/
.
REMARQUE: Votre classe de test doit étendre TestCase
ou SeleneseTestCase
pour permettre à JMeter de récupérer ce plan de test, nom du scénario de test devrait commencer par "test").
REMARQUE: Par défaut SeleneseTestCase
étend JUnit 3.x TestCase
, également SeleneseTestCase
s'attend à ce que le serveur externe Selenium soit en cours d'exécution.
Configurer échantillonneur de demande JUnit
2.1. Dans le plan de test JMeter, ajoutez échantillonneur de demande JUnit .
Réglez Class Name
Selon l'un du plan de test Selenium.
Définissez Test Method
Pour tester qui est sur le point de s'exécuter.
Laissez les 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 que Sampler recherche les tests JUnit 4 (annotations @Test
), Cochez la case Search 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 et des classes de test. Les attributs "attendus" et "timeout" sont pris en charge.
@ Avant - traité de la même manière que setUp () dans JUnit3
@ After - traité de la même manière que tearDown () dans JUnit3
@ BeforeClass, @AfterClass - traitées comme des méthodes de test afin qu'elles puissent être exécutées indépendamment si nécessaire
Vous êtes prêt à commencer votre test au sélénium avec JMeter.
Code Java pour l'échantillonneur de demande 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();
}
}
Ce cas est une alternative à WebDriver Sampler mentionné dans une autre réponse ci-dessous.
Conditions préalables
La seule différence avec le boîtier Selenium RC est la préparation de la configuration Selenium:
1.1. Téléchargez et mettez Selenium-server-standalone-${version}.jar
Dans le chemin de classe JMeter, par ex. %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 ci-dessus.
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();
}
}
Mise à jour.
Autres bons points et guides pas à pas pour utiliser le bundle Selenium + JUnit + JMeter:
Dans ce cas, le scénario de test Selenium est exécuté directement dans JMeter's BeanShell Sampler .
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;
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;
Dans ce cas, le scénario de test Selenium est exécuté via JSR223 Sampler + Groovy .
Pour considérations de performances cette approche semble être plus préférable que d'utiliser BeanShell Sampler décrit ci-dessus.
Ajout de la prise en charge Groovy pour l'échantillonneur JSR223:
2.1. télécharger le dernier Groovy distribution binaire;
2.2. copiez groovy-all-${VERSION}.jar
à partir du dossier de distribution "intégrable" 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éfinissez Script Language
sur groovy
dans les paramètres de l'échantillonneur;
3.3. mettez votre scénario de test Selenium dans la section Script
(le code Java sera accepté):
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;
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 boîtiers d'échantillonneur BeanShell/JSR223:
Script file
) Au lieu d'utiliser le code Beanshell/Groovy directement dans l'échantillonneur pour des tests intensifs.IsSuccess = STATUS
Ou SampleResult.setSuccessful(STATUS)
, voir le code ci-dessus), sans utiliser Assertion de réponse.Il existe un moyen plus simple d'exécuter des scripts Selenium.
Ajoutez 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()
Faites votre test
Pour plus d'informations sur la syntaxe du code et les meilleures pratiques, vous pouvez essayer tilisation de Selenium avec l'échantillonneur WebDriver de JMeter article.
Il ne devrait pas être nécessaire d'utiliser Selenium avec JMeter. Le script Selenium prendra une instance d'un navigateur à la fois. Alors que JMeter n'utilise pas une instance réelle d'un navigateur pour générer la charge.
Veuillez me faire savoir si le script Selenium peut être utilisé pour générer une charge du point de vue de l'interface utilisateur pour 5000 utilisateurs. C'est probablement possible. Mais alors, disons-nous que le script Selenium nécessiterait maintenant 5000 instances d'un navigateur sur le même système? Le test fonctionnera-t-il ou suspendra-t-il le système à la place? JMeter dispose également d'excellentes options en tant qu'enregistreur. Il fournit d'excellentes statistiques du point de vue des tests de "charge".
Un instant si nous pensons que les utilisateurs qui connaissent Selenium ne sauront pas comment scripter dans JMeter et donc une courbe d'apprentissage. Mais dans le cas de JMeter, ce n'est même pas vrai. C'est parce qu'il n'est pas nécessaire de créer quelque chose comme une séquence logique ou un programme en premier lieu.
Donc, fondamentalement, vous enregistrez votre script avec Selenium d'abord, puis réenregistrez les cas de test Selenium à l'aide de jmeter. :-)
http://codenaut.blogspot.com/2011/06/icefaces-load-testing.html