<MyRusakov.ru />

Разработчик игр на Unreal Engine

Разработчик игр на Unreal Engine

Этот комплект с нуля всего за 7 месяцев сделает Вас Unreal-разработчиком. И при этом учиться достаточно 1 час в день.

Начнёте Вы с основ программирования, постепенно перейдя к C++. Затем очень подробно изучите Unreal Engine, и после научитесь программировать на C++ в Unreal Engine. В конце создадите крупный проект на C++ в Unreal Engine для своего портфолио.

Комплект содержит:

- 416 видеоуроков

- 95 часов видео

- 1024 задания для закрепления материала из уроков

- 3 финальных тестирования

- 4 сертификата

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Тестирование PHP-скриптов через cURL

Тестирование PHP-скриптов через cURL

В этой статье я собираюсь рассказывать о достаточно сложных вещах, поэтому если Вы не знаете PHP на должном уровне, то сначала почитайте статьи по основам PHP. На самом деле, материал этой статьи не столько сложен в плане кода, сколько он труден для понимания того, зачем это нужно. Чтобы понять всю важность написания тестов для PHP-скриптов, нужно очень хорошо разбираться в программировании в целом и иметь приличный опыт. Если это так, то из этой статье Вы узнаете, как проводить тестирование PHP-кода через cURL.

Прежде чем приступать к тестированию PHP-скрипта, необходимо его написать, что мы сейчас с Вами и сделаем (файл "script.php"):

<?php
  $a = $_POST['a'];
  $b = $_POST['b'];
  echo $a + $b;
?>

Вот этот скрипт мы теперь должны протестировать на корректную работу. Сейчас наша задача придумать как можно больше тестов, которые будут проверять наш скрипт не только на общие случаи, но и на частные. Вот примерный вариант скрипта, который будет запускать тестирование и выводить его результаты:

<?php
  function test($curl, $post, $result) {
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
    $out = curl_exec($curl);
    if ($out == $result) echo "Тест ($post) пройден";
    else echo "Тест ($post) провалился!";
    echo "<br />";
  }
  $start_date = microtime(true);
  if( $curl = curl_init() ) {
    curl_setopt($curl, CURLOPT_URL, 'http://temp.local/script.php');
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl, CURLOPT_POST, true);

    test($curl, "a=5&b=8", 13);
    test($curl, "a=0&b=0", 0);
    test($curl, "a=-2&b=2", 0);
    test($curl, "a=-2.5&b=7.2", 4.7);
    test($curl, "a=5", 5);

    curl_close($curl);
  }
  echo "Время выполнения всех тестов: ".(microtime(true) - $start_date)." секунды";
?>

Что здесь происходит? Во-первых, мы создали функцию "test", которая принимает идентификатор cURL, строку с запросом и ожидаемый результат. В этой функции мы отправляем POST-запрос на наш тестируемый скрипт, получаем от него ответ и сравниваем этот ответ с ожидаемым результатом. Если значения совпадают, значит, тест пройден, если нет, то тест провалился. В примере выше видно, что мы запустили 5 различных тестов, которые проверяют наш скрипт со всех сторон. И Ваша задача состоит в том, чтобы придумывать, как можно больше самых различных вариантов входных данных, и проверять скрипт на корректность работы.

Помимо тестирование результатов PHP-скрипта, мы проверяем и его производительность. Поэтому после выполнения всех тестов мы узнаем, насколько быстро работает наш тестируемый код. Безусловно, это время приблизительно, но здесь главное не точное время. Здесь важно понимать, что код зачастую нуждается в рефакторинге. И после его проведения, надо смотреть, насколько изменилась производительность. И если недостаточно хорошо, то продолжить улучшение кода дальше.

И напоследок поговорим о смысле тестирования кода. Вообще говоря, это относится к любому языку, а не только к PHP. Фактически, при внесении любых изменений в код, Вам не надо вручную прогонять его на самые различные случаи (а их бывает иногда сотни, а то и тысячи). Вы просто запускаете Ваш тест и смотрите: ничего ли не сломалось после Ваших изменений? Таким образом, написание тестов - это очень удобно, очень быстро и очень качественно! И при проектировании сложных систем без написания тестов не обойтись, иначе можно забыть о качестве, производительности и стабильности.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (8):

Yuliyul Yuliyul 30.09.2012 00:35:58

В Вашем примере почему то отработали только те тесты, в которых результат равен 0. Остальные провалились. В чем ошибка? Пыталась привести типы - не помогло.

Ответить

Admin Admin 30.09.2012 09:26:57

Выведите результаты и проверьте сами, может действительно ошиблись где-то.

Ответить

Yuliyul Yuliyul 01.10.2012 22:38:25

А у Вас работает? Уже голову сломала. Для проверки в функции перед if вывожу на экран $out и $result - и они равны. Но условие почему-то отрабатывает только если обе переменные равны 0. Код просто скопировала в 2 файла, изначально отсебятины не добавляла. Просто интересно, такой на вид простой код - и где проблема?

Ответить

Admin Admin 02.10.2012 11:10:57

Если только равные нулю срабатывают, то это похоже на несовпадение типов. Попробуйте сравнить и типы тоже через ===

Ответить

Yuliyul Yuliyul 02.10.2012 16:09:37

Типы не совпадают. $out - строка, а $result - число. Но ведь по идее строка должна преобразовываться в число? Даже если я пишу intval($out) - тогда ($out) - становится нулем

Ответить

Admin Admin 02.10.2012 19:21:11

Если сами не преобразуете, то любую строку он будет считать как 0.

Ответить

irin irin 09.04.2014 21:42:40

Этот пример не работает даже с учетом приведения типов. Вы сами пробовали его запускать?

Ответить

Teria Teria 29.01.2016 16:10:32

Да, у меня то же самое. Правильный результат только там, где нули. Теряется весь смысл урока, если результат не тот. Прошел год, а ошибка та же.

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.