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, и логин будет работать, и вы сможете тестировать страницы, которым требуется логин.