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.

21
demandé sur remipod 2011-10-19 10:43:53

4 réponses

Ci-dessous sont des moyens possibles pour exécuter des cas de test de sélénium à partir de JMeter:


É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


  1. 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 ou SeleneseTestCase pour permettre à JMeter de récupérer ce plan de test, le nom du cas de test doit commencer par "test").
    REMARQUE: Par défaut SeleneseTestCase étend JUnit 3.x TestCase, également SeleneseTestCase s'attend à ce que le serveur Selenium externe soit en cours d'exécution.

  2. Configurer échantillonneur de requêtes JUnit

    2.1. Dans JMeter test-plan ajouter JUnit demande sampler .
    Définissez Class Name selon celui du plan de test de sélénium.
    Définissez Test Method pour tester qui est sur le point de s'exécuter.
    Laisser d'autres paramètres par défaut.

    entrez la description de l'image ici

    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 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 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

  3. 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:


BeanShell Sampler

Dans ce cas, selenium test-scenario est exécuté directement dans BeanShell Sampler de JMeter.

  1. 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).
  2. mettez votre scénario de test de sélénium dans BeanShell Sampler:

entrez la description de l'image ici

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.

  1. 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).
  2. Ajouter un support Groovy pour L'échantillonneur JSR223:

    2.1. télécharger la dernière distribution binaire Groovy;
    2.2. copiez groovy-all-${VERSION}.jar du dossier de distribution" embeddable " et déposez-le dans %JMETER_HOME%/lib/;
    2.3. redémarrez JMeter.

  3. 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 sélénium test-scenario dans la section Script (le code Java sera accepté):

entrez la description de l'image ici

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 ou SampleResult.setSuccessful(STATUS), voir le code ci-dessus), sans utiliser L'Assertion de réponse.
24
répondu Aliaksandr Belik 2015-02-25 01:04:10

Il existe un moyen plus simple d'exécuter des scripts Selenium.

  1. Téléchargez plugin WebDriver et déplacez-vous dans le dossier lib/.
  2. Ajoutez jp @ gc - Firefox Driver Config et JP@gc - Web Driver Sampler à votre arbre de test

Arbre de test Jmeter

  • 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.

7
répondu Bob 2013-09-07 05:12:51

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

1
répondu r0ast3d 2013-02-15 17:58:54

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!

-1
répondu Rams 2015-12-26 17:46:13