使用JMeter运行Selenium脚本

我已经准备好具有功能流程的Selenium自动化脚本,现在我想将这些脚本与JMeter集成以进行负载测试。

那可能吗?

如果是这样,如何将两者融合?

我的首要目标是使用硒运行自动化脚本,而不是在jmeter中运行这些脚本以进行负载或性能测试。

回答:

如果您想重用已经自动化的(Java)Selenium场景,而不是为WebDriver Sampler重写JS脚本,则以这种方式运行Selenium测试可能会有用。

  1. 准备硒测试项目和设置。

1.1。下载Selenium Java客户端库,并放入selenium-java-${version}.jarJMeter类路径,例如%JMETER_HOME%/lib/。

1.2。Selenium服务器应已启动并正在侦听:

java -jar selenium-server-standalone-${version}.jar

1.3。将硒测试计划导出为.jar并将其保存到%JMETER_HOME%/lib/junit/。

注意:您的测试类应该扩展,TestCase或者SeleneseTestCase允许JMeter选择该测试计划,测试用例的名称应以“ test”开头。

注意:默认情况下SeleneseTestCase扩展JUnit 3.x TestCase,并且还SeleneseTestCase希望外部Selenium服务器正在运行。

  1. 配置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-与JUnit3中的setUp()相同@After-

与JUnit3

@BeforeClass中的tearDown()相同,@AfterClass- 作为测试方法,因此它们可以根据需要独立运行

  1. 您已经准备好使用JMeter启动Selenium测试。

JUnit请求采样器的Java代码:

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编写的测试脚本使用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();

}

}

这种情况是下面另一个答案中提到的WebDriver Sampler的替代方法。

先决条件

Selenium RC案例的唯一区别是Selenium设置准备工作:

1.1。下载并放入selenium-server-standalone-${version}.jarJMeter类路径,例如%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();

}

}

BeanShell采样器

在这种情况下,硒测试场景直接在JMeter的BeanShell Sampler中执行。

Selenium设置的准备工作与上述情况完全相同:下载Selenium库,放入JMeter类路径,启动Selenium服务器(对于Selenium RC)。

将您的硒测试方案放入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;

在这种情况下,硒测试方案是通过JSR223 Sampler + Groovy执行的。

对于性能考虑这种方法似乎比使用上述的BeanShell取样更优选的。

  1. Selenium设置的准备工作与上述情况完全相同:下载Selenium库,放入JMeter类路径,启动Selenium服务器(对于Selenium RC)。
  2. 添加对JSR223 Sampler的Groovy支持:

2.1。下载最新的Groovy二进制发行版;

2.2。groovy-all-${VERSION}.jar从发行版的“可嵌入”文件夹中复制并拖放到%JMETER_HOME%/lib/;

2.3。重新启动JMeter。

  1. 配置JSR233采样器:

3.1。将JSR233采样器添加到线程组;

3.2。设置Script Language为groovy采样器的设置;

3.3。将您的硒测试场景放入Script一节(将接受Java代码):

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;

  • 在测试场景(Script file字段)中使用外部.bsh / .groovy文件,而不是直接在采样器中使用Beanshell / Groovy代码进行密集测试。
  • 由于BeanShell / JSR233采样器可以访问JMeter的变量,因此您可以直接在测试场景中设置测试(=采样器执行)状态(通过例如IsSuccess =STATUSSampleResult.setSuccessful(STATUS),请参见上面的代码),而无需使用响应声明。

以上是 使用JMeter运行Selenium脚本 的全部内容, 来源链接: utcz.com/qa/410604.html

回到顶部