я обнаружил, что я мог бы использовать PHPUnit, чтобы проверить поведение части моего сайта, который в значительной мере опирается на сессиях через комбинацию от Curl и cookie, который передает session id.
Класс Curl
использует параметр CURLOPT_COOKIE
для передачи параметра сеанса. Статическая переменная $sessionid
сохраняет сеанс между различными вызовами Curl. Кроме того, сеансы могут быть изменены с использованием статической функции changeSession
.
class Curl {
private $ch;
private static $sessionid;
public function __construct($url, $options) {
$this->ch = curl_init($url);
if (!self::$sessionid)
self::$sessionid = .. generateRandomString() ..;
$options = $options + array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_COOKIE => 'PHPSESSID=' . self::$sessionid);
foreach ($options as $key => $val) {
curl_setopt($this->ch, $key, $val);
}
}
public function getResponse() {
if ($this->response) {
return $this->response;
}
$response = curl_exec($this->ch);
$error = curl_error($this->ch);
$errno = curl_errno($this->ch);
$header_size = curl_getinfo($this->ch, CURLINFO_HEADER_SIZE);
$this->header = substr($response, 0, $header_size);
$response = substr($response, $header_size);
if (is_resource($this->ch)) {
curl_close($this->ch);
}
if (0 !== $errno) {
throw new \RuntimeException($error, $errno);
}
return $this->response = $response;
}
public function __toString() {
return $this->getResponse();
}
public static function changeSession() {
self::$SESSIONID = Practicalia::generateRandomString();
}
}
Пример вызова
$data = array(
'action' => 'someaction',
'info' => 'someinfo'
);
$curl = new Curl(
'http://localhost/somephp.php',
array(
CURLOPT_POSTFIELDS => http_build_query($data)));
$response = $curl->getResponse();
И все последующие вызовы Curl автоматически будет использовать тот же сеанс, как и предыдущий, если специально Curl::changeSession()
не называется.
Можете ли вы подробно рассказать о хаки? Не могли бы вы просто 'unset ($ _ COOKIE)' в 'setUp' теста? –
Я не хочу иметь дело с этим в своих тестах. Я чувствую, что это ненужный беспорядок, и с ним нужно обращаться автоматически. –