Сценарии тестирования
При создании нового метода или компонента системы вам придётся тестировать работоспособность остальных частей API. Рассмотрим один из сценариев тестирования:
- Подключиться к тестовой базе данных, предварительно очистив её.
- Создать нового пользователя
Проверить, что сервер вернул ответ с кодом 200 и следующим содержимым
Получить информацию о пользователе с полученным id
Проверить, что сервер вернул результат с содержимым
Получить список пользователей (реализация данной функции предлагается читателю как самостоятельное задание)
Проверить, что сервер вернул результат с содержимым
Проверить, что сервер выдаёт ошибку при попытке получить несуществующего пользователя
А теперь было бы неплохо ещё раз очистить базу и попробовать сгенерировать несколько пользователей, а также проверить данные методы на них.
Представьте, что эти действия нужно выполнять постоянно. А ведь мы написали пока только hello-world API. В настоящем проекте будет гораздо больше данных с более сложными взаимосвязями.
Автоматизированное тестирование позволяет упростить эту задачу.
2.5 Генерация каркаса кода с помощью кодогенератора Gii
После того как основа приложения создана и настроена, можно приступить к
разработке контроллеров и моделей. Начиная с версии 1.1.2, фреймворк доступен
вместе с встроенным генератором кода Gii. Gii позволяет генерировать модели на
основе таблиц в базе данных, а так же CRUD-контроллеры для основных действий по
управлению записями, такими как добавление записи (Create), просмотр списка
записей, просмотр записи (Read), редактирование записи (Update) и удаление
(Delete). Для активации Gii в файл конфигурации приложения было добавлено
описание подключения модуля gii:
‘gii’=>array(
‘class’=>’system.gii.GiiModule’,
// Пароль для входа в кодогенератор
‘password’=>’generate’,
// Разрешенные ip-адреса
‘ipFilters’=>array(‘127.0.0.1′,’::1′),
),
Так как модель используется для управления записями в одной таблице, то
были сгенерированы 4 модели: Price,
Category, Photo, Text.
Для этого использовался раздел Model Generator, в
котором в качестве имени таблицы была указана *.
Для генерации CRUD-контроллеров,
в Gii есть раздел Crud Generator. Так как таблица Photo является вспомогательной, то для
управлению записями в ней не нужен отдельный контроллер, поэтому были
сгенерированы 3 контроллера: PriceController, MenuController
(для Category), TextController.
How To Overcome The Limitations Of Selenium With LambdaTest Selenium Grid?
LambdaTest offers a great platform to run your automation scripts on a cloud Selenium Grid and achieve faster test execution. There are endless benefits of running the tests in the LambdaTest grid.
- Quick and easy setup to run your automation scripts.
- Execute your tests in different browsers with different versions.
- Integration with various continuous integration and deployment tools.
- Allows to define various parameters like browser name, version of the browser, operating system.
- Provides the option to take screenshots and record videos while executing the test cases.
- Most importantly, it provides 24X7 customer support and detailed documentation.
Below is the simple code to search a product on Google using LambdaTest grid-
Once the tests have been executed, you can view the logs and other builds related information in the Automation dashboard. Thus, running the tests in LambdaTest Grid improves the execution speed and also provides efficient results.
Тестирование исключений
показывает, как использовать метод для проверки того,
было ли выброшено исключение в тестируемом коде.
Пример 2.11 Использование метода expectException()
<?php use PHPUnit\Framework\TestCase; class ExceptionTest extends TestCase { public function testException() { $this->expectException(InvalidArgumentException::class); } }
$ phpunit ExceptionTest PHPUnit latest.0 by Sebastian Bergmann and contributors. F Time: 0 seconds, Memory: 4.75Mb There was 1 failure: 1) ExceptionTest::testException Failed asserting that exception of type "InvalidArgumentException" is thrown. FAILURES! Tests: 1, Assertions: 1, Failures: 1.
В дополнение к методу существуют методы
,
и
, чтобы установить ожидания для
исключений, вызванных тестируемым кодом.
Примечание
Обратите внимание, что метод expectExceptionMessage, утверждает,
что фактическое сообщение в содержит ожидаемое сообщение
без выполнения точного сравнения строк. Кроме того, вы можете использовать аннотации ,
,
и
, чтобы установить
ожидания для исключений, вызванных тестируемым кодом
Кроме того, вы можете использовать аннотации ,
,
и
, чтобы установить
ожидания для исключений, вызванных тестируемым кодом.
демонстрирует пример использования.
Пример 2.12 Использование аннотации @expectedException
<?php use PHPUnit\Framework\TestCase; class ExceptionTest extends TestCase { /** * @expectedException InvalidArgumentException */ public function testException() { } }
Какую программную платформу лучше подобрать для использования?
В первую очередь пользователям нужно хорошо учесть следующие пункты:
Цель. Предназначения создания приложения — главный аспект в постановке задачи. Для базовой программы не съедет использовать сложные продукты платформ, требующий большого опыта работы и затраты ресурсов программы;
Обратная связь. Библиотеки, носящие дополнительный характер, обратная связь с разработчиками и внешние пакеты являются ключевым аспектом в создании программ. Русскоязычные и англоязычные программы требуют индивидуального подхода по разработке, не забывайте об этом;
Безопасность и надёжность
При разработке веб-сайтов нужно уделять внимание конфиденциальности и безопасности, поскольку информационная утечка данных может понести за собой ужасные последствия.
Документационное обеспечение. Благодаря правильному учёту задач пользователям легче ориентироваться в пространстве изначально написанного кода, заниматься разработкой собственного проекта
Программные платформы подзразделяются по разным уровням сложности, для освоения некоторых программ придётся приложить силы. При выборе подходящего инструмента «под себя» ориентируется на параметры качества и количество обеспечения документирования.
Методика тестирования и тестовый стенд
Машина, на которой производилось тестирование, обладает следующими характеристиками:
Server version: Apache/2.4.7 (ubuntu)
Server build: Jul 15 2016
php 7.1 / php7.0 / php5.6
Вводим команду — и фрейм уже на нашей машине. Поскольку мы использовали Mint, необходимо выполнить настройку:
sudo sysctl -p
Немного о структуре самого php-framework-benchmark:
/benchmarks — содержит bash-скрипты, отвечающие за сбор информации о количестве запросов в секунду (при помощи утилиты ab), количестве информации, сколько времени было потрачено и сколько файлов вызывалось из файла «точки старта».
/lib — директория, в которой находятся файлы, отвечающие за обработку полученной информации после вывода страницы “Hello world”, вывод таблиц с результатами и построение диаграмм.
/output — директория, в которую добавляются логи после выполнения тестирования. Здесь находится по два файла для каждого протестированного файла: .ab.log — лог после работы утилиты ab, и .output — содержит информацию, которая была выведена на экран (обычно это hello world и данные по памяти, времени выполнения, использовавшимся файлам).
Остальные папки — это заготовки фреймов, в которые уже добавлен один контроллер, который вернет строку “hello world” при обращении по URI, составленному по правилам обращения к данному фреймворку.
Для запуска теста сначала нужно настроить фреймворки. Рассмотрим два подхода.
Команда настроит те фремворки, которые описаны в файле list.sh. Вы можете его редактировать: добавлять и удалять папки для тестирования. То есть конфигурировать так, как вам необходимо.
Командой вы можете установить какие-то отдельные фреймворки, задав их параметрами к команде. В некоторых случаях это удобно, но мы использовали первый подход.
После произведенной настройки фреймворков, мы запустили тестирование при помощи .
По окончании работы в терминале появилась таблица со списком протестированных фреймворков, количеством запросов в секунду, относительным значением, занимаемой памятью, а также относительными значениями этих показателей.
Как вы понимаете, необходимо было произвести настройку Apache и заставить его смотреть в папку с фреймом. Всё это описано в readme, поэтому вопросов не возникает.
Фреймворк — что это?
Фреймворк (framework — конструкция, каркас) представляет собой программную платформу, определяющую структуру программной системы. Также это ПО, которое облегчает разработку и интеграцию различных компонентов программного проекта. К примеру, чтобы не писать какой-нибудь модуль с нуля, намного проще и быстрее задействовать уже готовый шаблон фреймворка, который сформируют рабочую среду программиста.
Вам должно быть известно, что фреймворки существуют и у множества других языков программирования: Java, Python, JavaScript и т. д. Однако именно PHP-фреймворки до сих пор занимают важнейшее место среди инструментов современной бэкэнд-разработки.
Как пишутся тесты
Составление тестов начинается со сбора списка требований к тестируемому коду. Затем для каждого требования пишется тестовый сценарий, который проверяет, что оно выполняется. Сценарии бывают позитивными — когда мы передаем корректные данные и ждем успешный результат, и негативными — когда мы передаем неправильные данные и ждем сообщение об ошибке.
Вот пример сбора требований. Допустим, что у нас есть функция , которая обрезает строку, если она длиннее N символов. Каким требованиям она должна соответствовать?
- если передать ей строку из 5 символов и = 10, функция должна вернуть строку без изменений
- если передать ей строку из 11 символов и = 5, то функция должна обрезать строку до
Вот более сложный пример. Допустим, у нас есть система бронирования номеров в отеле, и мы хотим написать интеграционные тесты для класса , который отвечает за создание броней. Тут список требований будет другой:
- если передать корректные дату заезда, дату выезда, количество человек и в наличии есть свободные номера, то должна создаться бронь
- если дата выезда раньше или совпадает с датой заезда, должна вернуться ошибка
- если количество человек меньше или равно нулю, должна вернуться ошибка
- если свободных номеров на выбранные даты нет, должна вернуться ошибка
На каждое требование мы пишем отдельный тест — это позволит при ошибке понять, что именно сломалось. Тесты обычно пишут в стиле Arrange, Act, Assert. Мы сначала подготавливаем и настраиваем нужные компоненты (Arrange), выполняем действие (Act) и проверяем результат (Assert).
class TruncateTest extends \PHPUnit\Framework\TestCase { public function testShortStringRemainsAsIs() { // Act: вызываем функцию $result = truncate("hello", 10); // Assert: проверяем, что возвращенный результат совпадает с ожидаемым $this->assertEquals("hello", $result); } public function testLongStringIsTruncated() { $result = truncate("hello world", 5); $this->assertEquals("hello…", $result); } }
Метод из PhpUnit проверяет, что фактический результат совпадает с ожидаемым, и выдает ошибку, если это не так. В PhpUnit много assert-функций на все случаи жизни.
HttpUnit
HttpUnit – это широко используемый опенсорсный фреймворк тестирования веб-сайтов без каких-либо требований к браузеру. Платформа прекрасно подходит для выполнения скриптов автоматизированного тестирования веб-приложений. HttpUnit можно разумно использовать для юнит-тестирования, это следует из названия.
Однако модульное тестирование не работает с общими веб-компонентами типа сервлетов, страниц JSP (JavaServer Pages) и некоторых других элементов шаблона. Написанная на языке Java, платформа позволяет коду обрабатывать возвратные страницы в виде XML DOM, текста, контейнеров таблиц, ссылок и форм.
Особенности
- Поддержка cookie-файлов;
- Поддержка протоколов HTTPS и HTTP;
- Поддержка HTML ответов сервера;
- Поддержка прокси-сервера;
- Отличная поддержка JavaScript.
Предварительные условия для установки HttpUnit
- Поддержка Java JDK 1.4 или последней версии;
- Добавление и , оба из которых включены в HttpUnit, в ваш classpath. Также убедитесь, что XML парсер уже установлен;
- При работе со старой версией Java включите JAXP-совместимый XML парсер в ваш classpath;
- Загрузите последнюю версию HttpUnit.
Преимущества
У HttpUnit много полезных функций:
- Использование фреймворка позволяет автоматизировать тестирование веб-приложений, а также и помогает в регрессионном тестировании;
- Одно из преимуществ HttpUnit – он гораздо быстрее других платформ автоматизации тестирования вроде Selenium;
- Хорошая поддержка JavaScript позволяет имитировать действия настроенного браузера (IE или Firefox);
- HttpUnit использует движок Rhino JavaScript в качестве основного языка и обеспечивает точное выполнение объектов для реализации в браузере;
- Юнит-тесты популярных библиотек JavaScript интегрированы в собственные модульные тесты HtmlUnit. Библиотеки типа jQuery 1.11.3, MochiKit 1.4.1, MooTools 1.2.1 и т. д., отлично работают с HtmlUnit;
- Возможность вставить код в текущую страницу, используя HtmlPage.executeJavascript(String yourJsCode).
Недостатки
- С ним хорошо выполнять простые задачи, но будет нужно все больше и больше кода для создания сложных тестов;
- Фреймворк типа Selenium является более конкретным и позволяет использовать browser-centric (браузер важнее пользователя) подход и не ограничивать приложения во время тестирования. Но с такой платформой у вас будет ограниченная поддержка, за исключением некоторых известных браузеров.
Подведение итогов с HttpUnit
HttpUnit очень прост в использовании и требует минимум усилий для начала работы. Фреймворк прекрасно подходит для разработки простых тестов, но для создания сложных тестов потребуются глубокие знания в разработке. В сравнении с HttpUnit, фреймворк автоматизации тестирования типа Selenium является не просто библиотекой: он оснащает разработчика функционалом для автоматизированного тестирования высокого уровня.
Касаемо некоторых элементов, основанных на фреймворке Model-View Controller, они подходят для тестирования с другими типами платформ. К примеру, действия WeWork 2
Что касается элементов, основанных на платформе Model-View Controller, то они подходят для тестирования с другими типами платформ. Например, можно произвести юнит-тестирование действий WebWork 2 без контейнера сервлетов, а используя StrutsUnit, можно выполнить модульное тестирование Struts.
Сюжетный игрок
Story player – это платформа тестирования PHP с открытым исходным кодом, которая используется для выполнения сквозного тестирования. Он лучше всего подходит для тестирования автоматизации API и тестирования веб-приложений. Он обеспечивает поддержку нескольких языков программирования, что является одной из причин его популярности как одного из лучших фреймворков PHP.
Шаги По Установке
Шаг 1: Поскольку это фреймворк для тестирования PHP, перед настройкой этого фреймворка требуется установить PHP. В настоящее время он поддерживает только Apple OSX Yosemite и Ubuntu Linux Desktop 14.10.
Шаг 2: Также необходимо добавить некоторые расширения, такие как CURL, JSON, OpenSSL и т.д. Вы можете прочитать дальше на их официальном веб-сайте .
Преимущества Использования Фреймворка Сюжетного Игрока
- Он предлагает фреймворк с открытым исходным кодом, который весьма полезен, если вы новичок в веб-разработке на PHP. Вам не нужно оформлять подписку или платить комиссию, чтобы воспользоваться услугами Storyplayer.
- Еще одним большим преимуществом использования платформы тестирования PHP Story player является потрясающая поддержка, которую она предоставляет для нескольких языков программирования. Это делает разработку и тестирование PHP намного проще и конкурентоспособнее.
Selenium
Selenium автоматизирует браузеры для тестирования веб-приложений. Проект поддерживают несколько крупнейших разработчиков браузеров, предпринимающих шаги, направленные на то, чтобы сделать Selenium составляющей частью браузера. Также это также основная технология для множества других инструментов автоматизации браузеров, API и фреймворков.
2. PHPUnit
PHPUnit — это ориентированный на программистов фреймворк тестирования для PHP. Он построен на архитектуре XUnit для фреймворков модульного тестирования. PHPUnit можно управлять через командную строку, он предоставляет в наше распоряжение класс TestCase, который может быть расширен в соответствии с нашими потребностями.
Фреймворк также позволяет разработчикам использовать заранее написанные методы подтверждения определенного поведения приложения.
3. Behat
Behat — фреймворк для тестирования PHP через функционирование (BDD), который позволяет писать понятный человеку код, описывающий, как должно функционировать приложение.
4. Kahlan
Kahlan — это полнофункциональный фреймворк модульного и BDD тестирования похожий на RSpec и JSpec, который использует описание синтаксиса и выводит тестирование PHP на новый уровень. Kahlan позволяет разобрать или проверить код напрямую (как в Ruby или JavaScript) без необходимости использования PECL-расширения. Он содержит большое количество функций, которые обеспечивают расширяемый и настраиваемый процесс тестирования.
5. Atoum
Atoum — это современный фреймворк для тестирования PHP, который позволяет запускать проверку отдельных модулей. Фреймворк ориентирован на использование новых возможностей, которые были введены в PHP 5.3 (он не поддерживает более старые версии языка).
6. Codeception
Codeception позволяет писать функциональные тесты, а также тесты подтверждения. Они тестируют РНР-приложения в целом, а не каждую его функцию по отдельности. Codeception позволяет подключить и настроить различные модули в соответствии с требованиями разработки. Он поддерживается многими фреймворками разработки PHP, такими как Symfony2, Laravel4, Yii, Phalcon и Zend Framework.
7. SimpleTest
SimpleTest — простой в использовании фреймворк TDD модульного тестирования PHP. SimpleTest поддерживает SSL, формы, прокси, фреймы и аутентификацию в базе данных, что позволяет быстро проверить общие задачи PHP.
8. Storyplayer
Storyplayer — это фреймворк тестирования полного стека, который позволяет осуществлять тестирование всей платформы. Команда Storyplayer предлагает специальный вид поддержки — создание сред тестирования по запросу. Это соответствует принципам TDD и позволяет писать функциональные тесты, с помощью которых можно проверить все приложение.
9. Peridot
Peridot — расширяемый фреймворк для тестирования PHP. Он имеет ориентированную на события архитектуру, что позволяет разработчикам легко настраивать фреймворк через плагины и отчеты. Peridot использует описание синтаксиса для создания тестов, которые четко описывают, как должен себя вести код приложения.
10. PHO
PHO — это фреймворк BDD-тестирования для PHP, во многом похожий на Jasmine и RSpec. Он характеризуется традиционным синтаксисом. Отслеживает команды для повторного запуска спецификаций в процессе разработки. Он также может быть расширен пользовательскими вычислениями и отчетами.
11. Mockery
Mockery — это простой, но гибкий фреймворк псевдо-объектов PHP, предназначенный для использования в модульном тестировании с помощью PHPUnit и PHP Spec. Он обеспечивает дублированное тестирование с API, способным четко определить все возможные операции и взаимодействия объектов, используя читаемый Domain Specific Language (DSL).
12. PHP Specs
PHPSpec также «исповедует» BDD подход тестирования, но другой его подтип, который называется SpecBDD. В PHPSpec сначала нужно создать спецификации, которые описывают, как код приложения будет себя вести.
Вадим Дворниковавтор-переводчик статьи «12 Best PHP Automated Test Frameworks»
Что учесть при выборе?
Выбор PHP-фреймворка зависит от целей и масштабов предстоящего проекта
На какие нюансы стоит обратить особое внимание:
- Функциональность и гибкость. Есть ли в выбранном инструменте все, что может понадобиться для реализации проекта.
- Легкость освоения. Трезво оценить и учесть уровень своих навыков — всегда полезно.
- Скорость, современность, актуальность. Учитывайте, насколько PHP framework поддерживает прогрессивные методы разработки. К примеру, существует ли поддержка ООП.
- Особенности масштабируемости текущего проекта, созданного на фреймворке.
- Насколько часто выпускаются обновления фреймворка, есть ли у него активное профессиональное сообщество.
- Есть ли гарантированная долгосрочная поддержка релизов (LTS).
- Поддерживается ли модель MVC (Model ViewController/).
Заключение
Как и стоило ожидать безоговорочным лидером по производительности (но не скорости разработки) является Phalcon. Второе место, — а на самом деле первое среди PHP-фреймворков (а не C, на котором написан исходный код Phalcon) — занимает CodeIgniter 3!
Конечно же, не стоит забывать, что каждому инструменту своё предназначение. Если вы выбираете небольшой и легкий фреймворк и собираетесь написать на нём что-то отличное от простейших приложений или REST API, то, скорее всего, вы столкнётесь с проблемами при расширении функционала. И наоборот — избыточность полнофункциональных, больших фреймворков повлечёт за собой финансовые издержки на содержание даже для элементарных приложений под большой нагрузкой.
Это тестирование проводилось для того, чтобы убедить/рассказать/укрепить позицию языка РНР версий 7.0 и 7.1 в вашем сознании и в будущих проектах, донести информацию о том, что производительность действительно возросла.
Тесты полностью подтверждают и вдвое ускорившуюся обработку запроса в РНР7, и уменьшенное количество используемой памяти.
Заключение
Разработчик на Java должен понимать тестирование программного обеспечения. Чтобы стать ближе к идеалу, настоятельно рекомендую ознакомиться с описанными выше фреймворками. С их помощью вы сможете с невероятной легкостью тестировать веб-приложения.
***
Изучение Java – непростая задача
Можно освоить необходимые знания самостоятельно, но если вы только начинаете путь в профессии, стоит обратить внимание на курс Факультета Java-разработки онлайн-университета GeekBrains. Занятия ведут опытные преподаватели, а студенты во время обучения создают проекты, которые будет не стыдно показать потенциальным работодателям
Кроме того онлайн-университет помогает выпускникам с трудоустройством.
Интересно, хочу попробовать