在对代码性能进行单元测试时出现问题

时间:2016-09-01 19:42:15

标签: php laravel laravel-5 laravel-5.2 laravel-5.1

我正在测试我的代码,以检查如果我们认为有100个用户同时提交了他们的注册,它将如何表现!!!

我的代码在PHP Laravel 5.2中,JQuery Ajax在下面。

for (i = 0; i < 100; i++) {
    var 
     data={'Role' : "Role"+i},
     request = $.ajax({
        url:                'http://localhost:1234/Practise/public/api/SaveRoleApi',
        type:               "POST",
        data:               JSON.stringify(data),
        contentType:        "application/json; charset=utf-8",
        async:  true,
        success: function(d){ console.log(d); }
     });
}

在100分中,我没有成功提交超过88条记录。

我正在使用MySQL数据库。

如果上面的代码会顺序添加记录... id有没有办法测试一台计算机的1000个并发请求?

3 个答案:

答案 0 :(得分:3)

使用JavaScript从一个浏览器尝试创建所有连接的多个请求并不是一个好主意,您确实没有很好地测试并发性。

考虑使用像JMeter这样的实际负载测试工具(我绝对推荐这个),或者至少使用批处理脚本中的并行curl请求。

for n in {1..1000}; do
    for i in `eval echo {$n..$((n+999))}`; do
            echo "club $i..."
            curl -X POST -H "Content-Type: application/json" -d '{"param1":"xyz","param2":"xyz"}' -s "http://localhost:1234/Practise/public/api/SaveRoleApi" >> log.txt
    done &
    wait
done

答案 1 :(得分:1)

我建议使用专门用于此目的的工具,如loader。请注意,您的网络应用应该可以从外部世界访问。

答案 2 :(得分:0)

您可能希望了解使用PHP curl的多功能。 http://php.net/manual/en/function.curl-multi-init.php

$mh = curl_multi_init();
$ch = [];
for ($i = 1; $i < 100; $i++) {
    $data = "Role=Role$i";
    $ch[$i] = curl_init();
    curl_setopt($ch[$i], CURLOPT_URL, 'http://localhost:1234/Practise/public/api/SaveRoleApi');
    curl_setopt($ch[$i], CURLOPT_POST, 1); // Number of post fields, in this case just one.
    curl_steopt($ch[$i], CURLOPT_POSTFIELDS, $data);
    curl_multi_add_handle($mh, $ch[$i]);
}
$active = null;
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc = CURLM_CALL_MULTI_PERFORM);
while ($active and $mrc == CURLM_OK) {
    if(curl_multi_select($mh) !== -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}
for($i = 0; $i < 100; $i++){
    curl_multi_remove_handle($mh, $ch[$i]);
}
curl_multi_close($mh);