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”的代码,但两种方法都行不通。

有谁知道怎么了?

谢谢,阿德里安

4

2 回答 2

1

有什么理由不使用TCP Sampler吗?

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

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

    vars.put("LF",URLDecoder.decode("%0D", "ASCII"));
    vars.put("CR",URLDecoder.decode("%0A", "ASCII")); 
    

请参阅如何使用 JMeter TCP 采样器发送控制字符?指南以获取更多详细信息。

于 2016-02-13T10:45:52.143 回答
0

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

有 2 个选项可能对您有用

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

如何通过telnet发送回车?

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

于 2016-02-10T20:55:07.000 回答