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

时间:2011-12-06 16:37:39

标签: memcached jmeter telnet beanshell

我正在尝试在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”的代码,但两种方式都不起作用。

任何人都知道什么是错的?

谢谢, 阿德里安

2 个答案:

答案 0 :(得分:1)

没有使用TCP Sampler的原因?

  1. 将TCP Sampler添加到测试计划中(需要刷新缓存的地方)
  2. 配置主机和端口
  3. 将以下行放入“要发送的文字”区域:

    flush_all${CR}${LF}
    quit${CR}${LF}
    
  4. Beanshell PreProcessor添加为TCP Sampler的子级
  5. 将以下代码放入PreProcessor的“脚本”区域:

    vars.put("LF",URLDecoder.decode("%0D", "ASCII"));
    vars.put("CR",URLDecoder.decode("%0A", "ASCII")); 
    
  6. 有关详细信息,请参阅How To Send Control Characters Using The JMeter TCP Sampler?指南。

答案 1 :(得分:0)

脚本/模拟终端可能会有问题。 您的代码正在执行,并打印命令" flush_all"但似乎没有处理enter / newline命令。

有两个选项可能对您有用

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

How to send carriage return over telnet?

或者,你可能对SSH jmeter插件有更多好运,我认为它是内置于额外的库中,但如果没有,我可以给你发送一个链接。  这将允许您登录并执行给定目录中的命令,其简单且非常干净