GuzzleHttp параллелизм и куки - PullRequest
0 голосов
/ 27 сентября 2018

Для тестирования нашего бэкэнда PHP мы используем PHPUnit (v7.3.5) и расширение GuzzleHttp (v6.3.3) для тестов интерфейса.

I 'Я новичок во всем этом и играл немного Arround.Я хотел бы отправлять параллельные запросы, но я также должен использовать функцию cookie.

Параллелизм работает отлично, и я успешно использую файлы cookie.Но если я объединю оба, параллелизм потерян.

Мой код до сих пор:

// create session 
$jar = new \GuzzleHttp\Cookie\CookieJar;

// create client
$client = new Client([
    'base_uri' => 'http://localhost',
    'cookies' => $jar,   
]);

// login
$client->get("index.php", [
    'form_params' => [
        'usr' => 'myUserName',
        'pwd' => '#myPass*'
    ],
]);

// fill up request array
$requests = new array(
    new Request('GET', 'myPage1'),
    new Request('GET', 'myPage2'),
    new Request('GET', 'myPage3'),
    new Request('GET', 'myPage4'),
    new Request('GET', 'myPage5'),
    new Request('GET', 'myPage6'),
    ...
    new Request('GET', 'myPage100'),
);

// create pool
$pool = new Pool($client, $requests, [
    'concurrency' => 5,
    'fulfilled' => function ($response, $index) {...},
    'rejected' => function ($reason, $index) {...}
]);

// wait until all request are sent
$promise = $pool->promise();
$promise->wait();

Если я закомментирую // 'cookies' => $jar,, параллелизм работает отлично.

Разве невозможно достичьили я что-то пропустил?

ЗАКРЫТО

Оказалось, что проблема не в самом тесте.
Я бегув session_start () блокировку на сервере.
И, конечно, без сеанса, нет блокировки ..., которая объясняет все

1 Ответ

0 голосов
/ 27 сентября 2018

Вам может потребоваться запустить тест в отдельном процессе, добавив директиву в комментарии к вашей функции теста:

/**
 * @runInSeparateProcess
 */
public function testYourTestFunction()
{
    // Test code here
}
...