我正在尝试使用jMeter来测试我的memcached安装(我们正在使用jMeter进行其他功能测试,所以使用它来测试memcached似乎是最好的选择)。我正在使用TelnetClient (org.apache.commons.net.telnet.TelnetClient
)连接到memcached并触发get命令:
get somekey
我可以连接,但是当我试图读取响应时,jMeter挂起并需要重新启动。下面是我的代码(其中memcached_server是我的服务器的IP):
try
{
TelnetClient telnet = new TelnetClient();
telnet.connect("memcached_server", 11211);
PrintWriter pw = new PrintWriter(new OutputStreamWriter(telnet.getOutputStream()), true);
String command = "get 2f605845757870234d94ae14ca83c660";
pw.println("get 2f605845757870234d94ae14ca83c660");
BufferedReader br = new BufferedReader(new InputStreamReader(telnet.getInputStream()));
Scanner scan = new Scanner(br);
System.out.println("Hello stackoverflow!!!!");
if(scan.hasNext())
System.out.println("It does have a next: " + scan.toString());
else
System.out.println("It does NOT have a next");
String output = "";
while (scan.hasNext()) {
String line = scan.nextLine();
output += line;
if (line.matches("^END.*$"))
break;
}
System.out.println("Output: " + output);
telnet.disconnect();
}
catch(Exception e)
{
e.printStackTrace();
}
我可以在Eclipse中运行这段代码,它工作得很好。在jMeter中,我使用BeanShell PostProcessor(在此memcached测试之前运行一些测试),每次运行它时,程序都会卡在
中。scan.hasNext()
。它会一直挂着,直到我终止这个进程。我也尝试过使用org.apache.commons.io.IOUtils中的实用程序,比如toString(输入流)方法,我得到了完全相同的行为。
任何想法?
为什么把这段代码放在后置处理器而不是采样器中?
这似乎很奇怪。
您也可以尝试使用JSR223 +Groovy,这可以让您有机会调试脚本。