No Websocket response is obtained in JMeter - websocket

If a WebSocket request-response Sampler is used, the next sampler fails.
The same requests pass on using WebSocket Single Write Sampler instead of WebSocket request-response Sampler.
Even when the WebSocket Single Write/Read Sampler passes, there is no response obtained for any of the samplers.
Please advice on what can be done. I am referring to the document -
https://www.blazemeter.com/blog/jmeter-websocket-samplers-a-practical-guide/

If you're referring the article and hitting the echo.websocket.org I believe now you need to use wss protocol
If you're testing your own server unfortunately we are not able to help unless we see the
full test plan
JMeter log file (better with debug logging for websocket plugin enabled, it can be done by adding the next line to log4j2.xml file in bin folder of your JMeter installation)
<Logger name="eu.luminis" level="debug" />
network dump from browser developer tools or external sniffer tool like Wireshark or Fiddler for both browser/application and JMeter

Related

Requests to payment a gateway are failed from JMeter on cloud systems

I have a JMeter Test Plan (JMX) which simulates users placing orders and making credit card payments at the end.
The script works well when it runs from my machine. Requests to the payment gateway failed only when the script was executed from a third-party JMeter online service (e.g Redline13, Blazemeter, and Loadium).
The first request failed with the following error.
I have tried with several header configurations
Sending requests without any pre-defined headers
Setting user agent explicitly in Header Manager
Enabling Browser Compatible Headers in the HTTP Request
Also compared the requests generated from the third-party service provider and the requests generated from my machine. Also copied the headers and used them in the local machine.
It works well with the local machine but it continues to fail in the requests from the third-party services (Redline13, Blazemeter, and Loadium).
Any solution or direction is highly appreciated.
As per JMeter project main page:
JMeter is not a browser, it works at protocol level. As far as web-services and remote services are concerned, JMeter looks like a browser (or rather, multiple browsers); however JMeter does not perform all the actions supported by browsers. In particular, JMeter does not execute the Javascript found in HTML pages. Nor does it render the HTML pages as a browser does (it's possible to view the response as HTML etc., but the timings are not included in any samples, and only one sample in one thread is ever displayed at a time).
so the message is quite expected.
The fact that the script works on your local machine and doesn't work in the cloud most probably means that the payment gateway (or its mock) is not reachable from the Internet.
You can increase JMeter logs verbosity for the HTTP protocol by adding the next line to log4j2.xml file (lives in "bin" folder of your JMeter installation)
<Logger name="org.apache.http" level="debug" />
and compare jmeter.log files from local and cloud runs, it will contain request and response details which you will be able to compare and figure out what's different.

What does jmeter do if no response is received?

i send 10 requests to the server which was recorded by blazemeter chrome plugin.
some of them are signalr requests that have connection token values created runtime.
signalr requests are
signalr/negotiate?..
signalr/connect?
signalr/start?
signalr/abort?
if i dont use regular expression extractor for correlation, the signalr request has wrong responses and test will fail.
if i use correlation, some interesting results are present.
if i use it only in signalr/start it will pass, the other signalr's will fail.
if i add the connectionParameter to the signalr/connect... request. it will do nothing and test will not continue and not finished. So, i wonder if Jmeter dont send the request or any response is received. in view result tree listener, the request is not seen in this case.
What will Jmeter do if a response is not send by server?
or any other information that i dont know related to signalr/connect.. issue?
What will Jmeter do if a response is not send by server
When it comes to HTTP Request samplers JMeter will wait for response for the time defined in the "Timeouts" section of the aforementioned HTTP Request sampler
Blank values mean "no timeout" so JMeter will wait either forever or until the socket timeout defined in the underlying JVM or OS is exceeded.
With regards to SignalR most probably you need to use WebSocket Samplers plugin, I don't think there is a way to record these requests using whatever JMeter recording solution currently available in the market so consider inspecting the traffic from your browser to the backend using either browser developer tools or a 3rd-party sniffer tool like Wireshark.

SignalR does not connect when i record it with JMeter

Hi I am doing performance testing over a application but i cannot replicate the signalR connection what i do is call to the negociate api
/signalr/negociate getting the response as expected with the connection token
"Url":"/MyApp/signalr","ConnectionToken":"gM8NUnZtDg6oYU3Y9sfZgnIDlInyvspePwDuRdmqZlslRgkPIp8w/c0FZzllhwiUdZlOmPkyBd2DGU76ldt3v1B25lQlTeg1jETBWRkqaXD0QGpeNJLl3KqvnJ3v4YQ2","ConnectionId":"e1adc41d-ad0d-439f-858c-1fa47bb59083","KeepAliveTimeout":20.0,"DisconnectTimeout":30.0,"ConnectionTimeout":110.0,"TryWebSockets":true,"ProtocolVersion":"1.5","TransportConnectTimeout":5.0,"LongPollDelay":0.0}
Then i extract with JMeter that token (and i use it into the connect call)
GET https://myHost/myApp/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=gM8NUnZtDg6oYU3Y9sfZgnIDlInyvspePwDuRdmqZlslRgkPIp8w%2Fc0FZzllhwiUdZlOmPkyBd2DGU76ldt3v1B25lQlTeg1jETBWRkqaXD0QGpeNJLl3KqvnJ3v4YQ2&connectionData=%5B%7B%22name%22%3A%22workhub%22%7D%5D&tid=2
But the response is always a 400 Bad Request
Not a valid web socket request.
Any idea why that call fail?
Thank you very much
I don't think you can record WebSocket requests using JMeter's HTTP(S) Test Script Recorder as the aforementioned HTTP(S) Test Script Recorder is only capable of generating HTTP Request samplers as of JMeter 5.2
I would recommend using one of the following approaches for capturing outgoing WebSocket requests:
Browser developer tools (network tab should have WebSocket traffic filtering option)
Fiddler
Wireshark
Once done you can install JMeter WebSocket Samplers plugin and use the appropriate Samplers to simulate the WebSocket requests, you will need to manually set up the payload.

JMeter recording use non http/https protocol

I am recording our game app using JMeter
And it has an API server, which using the WebSocket's protocol
While meeting that request sent to API server, I always get this message, and can't go further
Is that means I need to modify the original JMeter's source code to walk around this problem? Or any way out? If so, that'd be appreciated.
I don't think you will be able to record and replay WebSocket transport using JMeter's HTTP(S) Test Script Recorder as WebSocket is a different beast, given you have a game application my expectation is that it might be the case application opens a WebSocket connection and re-uses it until the end of session and so you won't be able to mimic this behavior using "normal" HTTP Request samplers as WebSocket assumes either ws or wss protocol.
I would suggest considering one of the following JMeter Plugins:
WebSocket Sampler by Maciej Zaleski
WebSocket Samplers by Peter Doornbosch
Both plugins can be installed using JMeter Plugins Manager:

JMeter API Testing - Recording the Incoming Traffic

Using JMeter, the HTTP Request is hitting a URL with the port.
Eg : apitesting.com:8888/api/series/one
I have also added a HTTP Test Script Recorder in JMeter, where I can mention the port and domain.
How do I import the incoming traffic to JMeter using tcpreplay and JMeter Proxy for the above example.
Thanks for your help in Advance.
Have you read the FAQ?
Does tcpreplay support sending traffic to a server?
If by server you mean a daemon (Unix) or service (Windows) which listens on a port (a web or mail server would be common examples), then probably not. The biggest issue is that tcpreplay doesn't understand the state of common protocols like TCP. This means it is unable to synchronize Syn/Ack's to create valid TCP sessions.
So you have the following options:
Consider using Wireplay tool instead
Convert your .pcap file into JMeter .jmx script using BlazeMeter JMX Converter
In both cases be aware that you will get only a "skeleton" of the project, you won't be able to replay production traffic, all you will get would be a set of HTTP Request samplers, you will have to figure out the workload model on your own.
In JMeter you can add to your HTTP request a Post Processor Named Response Assertion, If you check the Ignore Status checkbox you will ignore response of the server so even if server is down it'll not fail test and continue.

Resources