1

I am stress testing software that is generating a lot of HTTP traffic to a specific server.

I need to set up a strong HTTP server (like Apache or IIS) that does statistics, i.e: amount of requests per minute, time to connect and allows me to simulate bad connectivity and different responses (e.g - once in a while return 500s instead of 200s, sometimes refuse connections). I am a programmer so I don't mind writing code, but I still think that writing a full stack HTTP handler (even in C#) will not be flexible enough.

I need the server to run on Windows.

1

For such testing, you can use Starman or Coro pure-perl web-servers in what you can simulate anything very easily. (the full http-stack and much-more are already implemented). (for example you can check the existing middlewares on MetaCPAN.

From the Coro man page:

The simple benchmark shows this server gives 2000 requests per second in the simple Hello World app, and 300 requests to serve 2MB photo files when used with AIO modules. Brilliantly fast.

IMHO it is enough for testing especially when you can adjust anything very easily, because it is written in perl (scripting language).

Edit

Ad statistics: Here are many thing what you said together.

  • One is simulating some "special web server behavior", simulating bad requests/responses and so on (what are a functionalities of the web server) and therefore is handy to have a server written in an scripting language.
  • Second, statistics - what can be done (mostly) by logfile analysis and so on. If you need, can setup special looging method.

So adding more general informations, e.g. for apache logfile analysis you can use for example the Apache::ParseLog. Or you can use some full-featured logfile-statistics software such awstats.

  • Can it do statistics? Can you recommend software that will handle statistics for me too? – Mark Segal Aug 4 '14 at 6:49
  • Also, I need to run on Windows. Starman is UNIX only. – Mark Segal Aug 4 '14 at 6:54
  • @QuanticProgramming Ad statistics, they're don't have builtin (special stress-test) statistics modules, but when you have a web server what is written in scripting language, you can do anything with it. Anyway, you said, so I don't mind writing code ;). I'm recommendig the above because i'm using them for all my web needs, counting from development via testing up to deployment. (ofcourse, all applications are written in perl too). Ad windows: sry, I never used windows routinelly, so can't help. – jm666 Aug 4 '14 at 19:00
  • Thanks, I'll consider it! – Mark Segal Aug 5 '14 at 5:56
0

I know this is an old topic, but WinGate could be quite useful for this. It runs on Windows, it has scriptable event handlers with global data (so you can manage state over multiple requests), but also native counting of things like requests per sec/min/hr/day (with threshold checking), which you can display on your own user-defined dashboards as gauges or emulated 14-segment displays. We commonly use the built in dashboard gauges for benchmarking when we are stress testing it, and it will do many more requests/sec than you will be able to get out of perl.

It has a free 10 concurrent user license which may be enough for your testing purposes.

Disclaimer: I work for Qbik who are the authors of WinGate

0

You can use Clumsy to delay the traffic, inject errors etc. Clumsy is free and runs on Windows and many settings are configurable.

To get the statistics, record the traffic with Wireshark. Wireshark has filter capabilities, so you can already limit the recording to the IP addresses that are relevant. Save the traffic into a PCAP file. Wireshark is also free and runs on Windows.

For the statistics, Wireshark has some built-in statistics. If that's not sufficient, you can build your own with the C# knowledge you have. Use the NuGet package PCAP NG File to read the PCAP file. That way you can focus on statistics.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.