JMeter - 使用Beanshell通过telnet执行命令

3
我想要用Beanshell编写JMeter取样器来执行Memcached Telnet接口命令,具体来说是flush_all。我需要在每个测试后清除缓存,因为快速连续执行测试会导致测试失败。
以下是我的代码:
import org.apache.commons.net.telnet.TelnetClient;

TelnetClient telnet = new TelnetClient();
telnet.connect( "memcachedServer.dev", 11211 );

//InputStream in = telnet.getInputStream(); 
PrintStream out = new PrintStream( telnet.getOutputStream() );

out.println("flush_all\r");
out.println("quit\r");

telnet.disconnect();

代码似乎没有问题,但缓存没有被清除。我尝试过使用"\r"和不使用"\r"的代码,但两种方式都无效。

有人知道问题出在哪里吗?

谢谢, Adrian


Memcache服务器上有任何日志吗?您的程序的完整输出可能会有所帮助。 - Brian White
2个回答

1

不使用TCP Sampler的原因是什么?

  1. Add TCP Sampler to your test plan (where you need to flush caches)
  2. Configure host and port
  3. Put the following lines into "Text to send" area:

    flush_all${CR}${LF}
    quit${CR}${LF}
    
  4. Add Beanshell PreProcessor as a child of the TCP Sampler
  5. Put the following code into the PreProcessor's "Script" area:

    vars.put("LF",URLDecoder.decode("%0D", "ASCII"));
    vars.put("CR",URLDecoder.decode("%0A", "ASCII")); 
    
请查看如何使用JMeter TCP采样器发送控制字符?指南以获取更详细的信息。

0

脚本/模拟终端可能会出现问题。您的代码正在执行,并打印命令“flush_all”,但似乎换行符未被处理。

有两个选项可能适合您

这里有一篇关于如何通过telnet发送回车符的文章。

如何通过telnet发送回车符?

或者,您可以尝试使用SSH jmeter插件,我认为它已经内置在额外的库中,但如果没有,我可以给您发送一个链接。这将允许您登录并在给定目录中执行命令,非常简单和干净。


请引用该链接的相关部分,以防链接失效。 - Johannes Jander
抱歉,Johannes说得很对,在telnet中按回车键会发送\r<NULL>或\r\n,你可以在建立连接之前使用telnet命令“toggle crlf”将其切换为<CR><LF>来设置telnet发送回车键的方式。 - Dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接