JUnit采样器无法正常使用CSV数据集配置多个线程Jmeter

时间:2017-10-29 16:57:09

标签: java selenium jmeter

我尝试使用Junit Request Sampler通过CSV数据集配置登录多个用户的测试应用程序。例如:我将线程数设置为2,并在.csv文件中设置两个用户登录详细信息,然后运行测试。结果打开了两个firefox浏览器,一个浏览器成功登录,另一个没有获取用户名和密码到登录页面的用户名和密码字段。这是我的selenium脚本代码。请有人能说出这个问题的原因吗?

import org.apache.jmeter.protocol.java.sampler.JUnitSampler;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver; 

public class testClass {

    static WebDriver  driver;
    JUnitSampler sampler = new JUnitSampler();
    String userName = sampler.getThreadContext().getVariables().get("username");
    String password = sampler.getThreadContext().getVariables().get("password");
    String Empnamecsv = sampler.getThreadContext().getVariables().get("Empname");

    @BeforeClass
    public static void setUpBeforeClass() throws Exception 
    {
        System.setProperty("webdriver.gecko.driver", "D:\\Automation\\Geckodriver\\V0.19.0\\geckodriver.exe");
        driver = new FirefoxDriver();
    }

    @Test
    public void loadHomePage() throws InterruptedException 
    {
        driver.get("http://localhost/testWeb");
        Thread.sleep(1000); 
    }

    @Test
    public void login() throws InterruptedException 
    {
        driver.findElement(By.id("txtusername")).sendKeys(userName);
        driver.findElement(By.id("txtpassword")).sendKeys(password);
        driver.findElement(By.id("btnsubmit")).click();
        Thread.sleep(1000);
        String name = driver.findElement(By.xpath("/html/body/div[1]/div[2]/div[3]/span[1]/span[1]")).getText();
        Assert.assertEquals(name,namecsv);
    }
}

2 个答案:

答案 0 :(得分:0)

您的问题是您一次初始化用户名和密码:

String userName = sampler.getThreadContext().getVariables().get("username");
String password = sampler.getThreadContext().getVariables().get("password");
String Empnamecsv = sampler.getThreadContext().getVariables().get("Empname");

在JMeter中,你可以测试JUnit类,但是在这里你好像是在JUnit测试类中创建它:

  

JUnitSampler sampler = new JUnitSampler();

所以存在一个概念问题。

如果您想使用CSV,请创建一个使用Webdriver Sampler的测试计划,并使用JMeter assertions进行检查。

请参阅此处的示例:

答案 1 :(得分:0)

尝试将“登录”方法更新为:

@Test
public void login() throws InterruptedException {
    org.apache.jmeter.threads.JMeterVariables vars = org.apache.jmeter.threads.JMeterContextService.getContext().getVariables();
    driver.findElement(By.id("txtusername")).sendKeys(vars.get(userName));
    driver.findElement(By.id("txtpassword")).sendKeys(vars.get(password));
    driver.findElement(By.id("btnsubmit")).click();
    Thread.sleep(1000);
    String name = driver.findElement(By.xpath("/html/body/div[1]/div[2]/div[3]/span[1]/span[1]")).getText();
    Assert.assertEquals(name, vars.get("Empnamecsv"));
}

参考文献:

还要注意JMeter和Selenium集成的替代方法:

  1. WebDriver Sampler - 附带Selenium客户端库和配置元素以设置浏览器实例。自动处理多线程执行
  2. JSR223 Sampler - 您可以使用它而不是JUnit,这样您就不必重新编译代码来进行更改。假设您选择Groovy语言,性能将与Java
  3. 几乎相同