测试对基于REST的Web服务器的并发请求

时间:2012-06-08 15:47:09

标签: rest testing concurrency

如何模拟基于REST的Web服务器的数千个GET和PUT请求?是否有可用的工具,如果有,可用的工具是什么?

4 个答案:

答案 0 :(得分:24)

ab - Apache HTTP服务器基准测试工具http://httpd.apache.org/docs/2.0/programs/ab.html

这是测试REST API的绝佳工具。

示例:

ab -c 100 -n 100 http://service/path/to/resource

在这个例子中:

  • “ -​​ c 100”表示100个并发请求和
  • “ -​​ n 100”表示100个请求

答案 1 :(得分:1)

答案 2 :(得分:0)

我知道这是一个老问题,但是我需要一个基于AJAX的简单脚本来测试多个并发连接。如果您有类似的要求,那么您也可以像这样使用它进行测试。

Snapshot of JS Code simulating Multiple Ajax Requests

请查看this js fiddle link或附件中的附件(两者均适合您,因为它们都指向相同的javascript代码)

var interval;
            var queue = [];
            var globalElapsedTime;
            
             function getUrl() {
                    return $.trim($("#txtAjayUrl").val());
                }
            
             $("#btnLaunchRequests").on("click", function () {
                    queue = [];
                    $("#divTimeElapsed").html("<i>calculating</i>");                    
                    globalElapsedTime = window.performance.now();
                    $("#divRequestStatus").show();
                    $("#btnLaunchRequests").prop("disabled", true);
                    var totalRequests = 50;
                    var inputValue = $("#txtNumberOfConcurrentRequests").val();
                    totalRequests = inputValue.trim();

                    $("#divTotalNumberOfProcessed").html(totalRequests.toString());
                    if (interval != null && interval != undefined) {
                        clearInterval(interval);
                    }
                    interval = window.setInterval(function () {
                        $("#divNumberOfCurrentRequests").text(queue.length);
                    }, 500);

                    for (let i = 1; i <= totalRequests; i++) {
                        console.log("Loop No. " + i);
                        if (i == totalRequests) {
                            $.get(getUrl(), function (data) {
                                queue.push("1");
                                $("#btnLaunchRequests").prop("disabled", false);
                                $("#divNumberOfCurrentRequests").text(queue.length);
                                //clearInterval(interval);
                            }).always(function () {
                                $("#btnLaunchRequests").prop("disabled", false);
                                globalElapsedTime = window.performance.now() - globalElapsedTime;
                                globalElapsedTime = Math.round((globalElapsedTime / 1000) * 100) / 100;                                                                
                                console.log("%cLast Result Processed in " + globalElapsedTime + " Seconds.", "color:green");
                                $("#divTimeElapsed").text(globalElapsedTime + " seconds");
                            });
                        }
                        else {
                            $.get(getUrl(), function (data) {
                                queue.push("1");
                            });
                        }
                    }
                });
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
      <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
      <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
      <script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
      
      <div class="container">
        <div class="row" style="padding-top:50px;">
            <div class="col-sm-12">
                <h3>HTTP GET Concurrent Requests Tester</h3>
            </div>
        </div>
        <div class="row">
            <div class="col-sm-12">
                <ul>
                    <li>Sample Ajax URL for concurrent request testing: <input type="text" id="txtAjayUrl" value="http://localhost:4500/Api/Home/GetCustomerDetails/36603/Test" style="width:100%"> <br><br>
                    </li>                    
                    
                    <li><input type="number" value="50" id="txtNumberOfConcurrentRequests"> <input type="button" value="Launch Concurrent Requests" id="btnLaunchRequests"> <br></li>
                            
                </ul>
            </div>
        </div>
        
        <div class="row" id="divRequestStatus" style="">
            <div class="col-sm-12">
                <table class="table table-bordered">
                    <thead>
                        <tr>
                            <th>
                                Total Number of Requests
                            </th>
                            <th>
                                Total Number of Requests Processed
                            </th>
                            <th>
                                Total Time Elapsed
                            </th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>
                                <div id="divTotalNumberOfProcessed"></div>
                            </td>
                            <td>
                                <div id="divNumberOfCurrentRequests" style="font-weight: bolder;"></div>
                            </td>
                            <td>
                                <div id="divTimeElapsed"></div>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>

答案 3 :(得分:-1)

几乎任何HTTP性能测试工具(商业或开源)都可用于对REST接口进行性能测试。