apachebench symfony2 вошел в тесты страниц

Я пытаюсь сравнить приложение Symfony, и поэтому мне также нужно сравнить страницы, которые доступны только пользователям, вошедшим в систему.

Я хочу сравнить приложение с помощью инструмента apachebench и поэтому написал небольшой сценарий оболочки, который пытается войти в систему с помощью curl, извлечь phpsessid, возвращенный из запроса, и установить его как cookie в команде apachebench.

Вот как выглядит сценарий:

#!/bin/bash

COOKIE_JAR="/var/www/apachebench/test.jar"

curl -c $COOKIE_JAR --data "_email=admin%40dummy.at&_password=test&_target_path=%2Fbackend" http://symfony.local/login

PHPSESSID=$(cat $COOKIE_JAR | grep PHPSESSID | cut -f 7)

ab -n 10 -p /var/www/apachebench/albumpostfile.txt -T application/x-www-form-urlencoded -C PHPSESSID=$PHPSESSID -k  http://symfony.local/album/add

Команда apachebench должна опубликовать форму и сохранить данные в базе данных. Однако похоже, что я не вхожу в систему, потому что данные не сохраняются, и я попробовал команду перед использованием PHPSESSID, который я скопировал из своего браузера, и он работал отлично. Я также уже отключил защиту csrf глобально.

Я также уже проверил, правильно ли введен PHPSESSID, возвращаемый из curl, в команду ab, и это так.

Я совершенно не понимаю, что я делаю неправильно, поскольку я пытался опубликовать те же самые данные на странице входа в систему через расширение Chrome "POSTMAN", и оно работает там.

Файл cookie-jar из запроса curl выглядит следующим образом:

# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

symfony.local   FALSE   /       FALSE   0       PHPSESSID       t2glc67hlf6lrlik2ieg9r7rv7

Заранее спасибо.

РЕДАКТИРОВАТЬ: Это вывод apachebench, когда я добавляю -v 3 в команду

WARNING: Response code not 2xx (302)
LOG: header received:
HTTP/1.0 302 Found
Date: Fri, 22 May 2015 12:03:32 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.9
Cache-Control: private, must-revalidate
Location: http://symfony.local/login
pragma: no-cache
expires: -1
Connection: close
Content-Type: text/html; charset=UTF-8

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="refresh" content="1;url=http://symfony.local/login" />

        <title>Redirecting to http://symfony.local/login</title>
    </head>
    <body>
        Redirecting to <a href="http://symfony.local/login">http://symfony.local/login</a>.
    </body>
</html>
WARNING: Response code not 2xx (302)
LOG: header received:
HTTP/1.0 302 Found
Date: Fri, 22 May 2015 12:03:32 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.9
Cache-Control: private, must-revalidate
Location: http://symfony.local/login
pragma: no-cache
expires: -1
Connection: close
Content-Type: text/html; charset=UTF-8

EDIT2: Итак, это мой новый сценарий оболочки, я изменил его, поэтому команда curl отправляет файл cookie PHPSESSID со своим запросом. Ниже вы можете увидеть различные результаты обоих сценариев. Похоже, что второй работает, так как он указывает правильный URL в части Redirecting to Url. Но на этот раз команда apachebench ничего не делает, она просто застревает.

#!/bin/bash

COOKIE_JAR="/var/www/apachebench/test.jar"

#curl -c $COOKIE_JAR -v -d "_email=admin%40dummy.at&_password=test&_target_path=%2Fbackend" -b "PHPSESSID=1hrfrnud407n5j42oki13655g7" http://symfony.local/login
curl -c $COOKIE_JAR -v -d "_email=admin%40dummy.at&_password=test&_target_path=%2Fbackend" http://symfony.local/login

PHPSESSID=$(cat $COOKIE_JAR | grep PHPSESSID | cut -f 7)

ab -n 10 -p /var/www/apachebench/albumpostfile.txt -T application/x-www-form-urlencoded -C PHPSESSID=$PHPSESSID http://symfony.local/album/add

OLD-CURL-ВЫВОД:

* Hostname was NOT found in DNS cache
*   Trying 127.0.1.1...
* Connected to symfony.local (127.0.1.1) port 80 (#0)
> POST /login HTTP/1.1
> User-Agent: curl/7.35.0
> Host: symfony.local
> Accept: */*
> Content-Length: 62
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 62 out of 62 bytes
< HTTP/1.1 302 Found
< Date: Fri, 22 May 2015 12:39:05 GMT
* Server Apache/2.4.7 (Ubuntu) is not blacklisted
< Server: Apache/2.4.7 (Ubuntu)
< X-Powered-By: PHP/5.5.9-1ubuntu4.9
* Added cookie PHPSESSID="l2pfvtum211bd8tnpp1i0vpcj1" for domain symfony.local, path /, expire 0
< Set-Cookie: PHPSESSID=l2pfvtum211bd8tnpp1i0vpcj1; path=/
< Cache-Control: no-cache
< Location: http://symfony.local/login
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=UTF-8
<
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="refresh" content="1;url=http://symfony.local/login" />

        <title>Redirecting to http://symfony.local/login</title>
    </head>
    <body>
        Redirecting to <a href="http://symfony.local/login">http://symfony.local/login</a>.
    </body>
* Connection #0 to host symfony.local left intact
</html>

NEW-CURL-ВЫВОД:

* Hostname was NOT found in DNS cache
*   Trying 127.0.1.1...
* Connected to symfony.local (127.0.1.1) port 80 (#0)
> POST /login HTTP/1.1
> User-Agent: curl/7.35.0
> Host: symfony.local
> Accept: */*
> Cookie: PHPSESSID=1hrfrnud407n5j42oki13655g7
> Content-Length: 62
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 62 out of 62 bytes
< HTTP/1.1 302 Found
< Date: Fri, 22 May 2015 12:40:07 GMT
* Server Apache/2.4.7 (Ubuntu) is not blacklisted
< Server: Apache/2.4.7 (Ubuntu)
< X-Powered-By: PHP/5.5.9-1ubuntu4.9
* Added cookie PHPSESSID="3ehl5ldkbd4ngl2er663899km1" for domain symfony.local, path /, expire 0
< Set-Cookie: PHPSESSID=3ehl5ldkbd4ngl2er663899km1; path=/
< Cache-Control: no-cache
< Location: http://symfony.local/backend
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=UTF-8
<
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="refresh" content="1;url=http://symfony.local/backend" />

        <title>Redirecting to http://symfony.local/backend</title>
    </head>
    <body>
        Redirecting to <a href="http://symfony.local/backend">http://symfony.local/backend</a>.
    </body>
* Connection #0 to host symfony.local left intact
</html>This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking symfony.local (be patient)...

Последняя строка вывода - это то место, где застревает команда ab.

1 ответ

Я понял это, и это работает сейчас.

Вторая команда была в порядке, поэтому вам действительно нужно передать файл cookie PHPSESSID на вызов входа в систему, если вы тестируете Symfony.

Причина, по которой она зависла от команды apachebench, была связана не со сценарием оболочки, а с отсутствующим {в коде, который я случайно удалил при попытке отладить его. Посмотрев в файл apache2 error.log, я смог понять это.

Поэтому, если у кого-то еще будет такая же проблема, имейте в виду, что добавьте файл cookie PHPSESSID в свою команду curl, и логин будет работать, и вы сможете тестировать страницы, которым требуется логин.

Другие вопросы по тегам