Jmeter TCP采样器未循环

时间:2019-07-12 22:18:37

标签: java tcp jmeter

我想使用jmeter的TCP采样器对系统进行压力测试(我正在使用默认的TCP采样器和jmeter GUI),但是线程组循环计数器似乎无法正常工作。当我运行测试线程时,只会发送一条消息。几乎感觉到jmeter似乎在开始发送其他消息之前正在等待服务器的响应,除非在我的情况下服务器不应该发送任何类型的确认。

我正在发送文本消息,并使用默认的tcp采样器类,并向采样器添加了响应断言,告诉其忽略响应(我希望这可以解决我的问题)。我也确定我的服务器不是问题所在,并且消息已按照服务器期望的方式进行格式化(用空行表示消息的结尾)

My very simple thread group

My very simple TCP Sampler

The result after starting my test

从第3张图片中可以看到,当我开始测试时,它会发送一条消息并挂起。我的服务器仅收到第一条消息。由于我是jmeter的新手,所以任何建议都将有所帮助。我以为我可以通过默认的TCP采样器完成我需要的工作,如果不是这种情况,谁能指出我的正确方向?

2 个答案:

答案 0 :(得分:0)

查看屏幕快照,第一个请求仍在运行:

enter image description here

服务器在收到消息后都需要关闭连接,您需要提供自己的AbstractTCPClient实现,该实现将根据您的应用程序设置进行相应的操作。

您还可以尝试使用HTTP Raw Request采样器,该采样器具有更简单的配置,可能更适合您开箱即用的情况。可以使用JMeter Plugins Manager安装HTTP Raw Request采样器。

enter image description here

答案 1 :(得分:0)

是的,当连接不发送询问时,JMeter TCP采样器不发送数据。只需在JSR223 Sampler中使用类似的内容:

def sock = new Socket()
def host = "localhost" // change it to your host
def port = 9999 // change it to your port
sock.connect(new InetSocketAddress(host, port))

def out = new OutputStreamWriter(sock.getOutputStream())
try {
    while (true) {
        out.write("Yor test data here")
        out.flush()
        if (sock.isConnected()) {
            SampleResult.setSuccessful(true)
        } else {
            SampleResult.setSuccessful(false)
            break
        }
    }
}
finally {
    sock.close()
}