多参数多线程Java JMH运行方法
我正在尝试在负载下测试web应用程序的性能。我想增加用户数量,以检查这将如何影响系统的行为。我打算使用JMH和Java。我已经编写了打开浏览器并登录的代码。这是:
@Threads(3)
@Benchmark
//@BenchmarkMode(Mode.All)
public static boolean testLogin() throws IOException {
count = count +1;
System.setProperty("webdriver.gecko.driver", "firefoxdriver\\geckodriver.exe");
ChromeOptions options = new ChromeOptions();
options.setAcceptInsecureCerts(true);
//options.setHeadless(true);
//driver = new ChromeDriver(options);
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setAcceptInsecureCerts(true);
WebDriver driver = new FirefoxDriver(firefoxOptions);
driver.manage().window().maximize();
//wait = new WebDriverWait(driver,10,1);
//initializeDriver();
login = new Login(driver);
Pair<String, String> user = users.get(count);
String username = user.getKey();
Strings password = user.getValue();
//System.out.println(username+" - - "+password);
login.login(username, password);
driver.close();
return true;
//return null;
}
以及从文件读取所有用户凭据的设置方法:
static ArrayList<Pair> users;
static int count;
@Setup
public void readUsers(){
String line = "";
String split_by = ",";
BufferedReader bufferedReader;
users = new ArrayList<>();
try {
bufferedReader = new BufferedReader(new FileReader("users/users.csv"));
line = bufferedReader.readLine();
while ((line = bufferedReader.readLine()) != null) {
String[] user_entry = line.split(split_by);
Pair<String, String> user;
String username = user_entry[2];
String password = user_entry[3];
user = new Pair<>(username, password);
users.add(user);
//System.out.println(username +" - - "+password);
}
} catch (IOException e) {
e.printStackTrace();
}
count = 0;
}
现在我的问题是如何使用一组不同的用户名和密码运行登录方法,因为系统一次只允许用户进行一次会话。我不知道如何将这些值传递给login方法。我尝试使用整数索引从ArrayList检索用户对象,但使用线程运行代码会反复调用相同的值。我该如何解决这个问题。我们将不胜感激
# 1 楼答案
可以创建每个测试线程唯一的对象
JMH将为每个工作线程创建该线程状态的实例,在这里您可以添加“每个线程”状态