Приемочное тестирование (PHP codeception и selenium)

Этап приемочного тестирования - это формальный процесс тестирования, который проверяет соответствие системы требованиям и проводится с целью определения удовлетворяет ли система приемочным критериям и вынесения решения заказчиком или другим уполномоченным лицом принимается приложение или нет. Это тезисное определение данного этапа тестирования и далее я разъясню этот термин более подробно.

Если вы хотите ознакомиться с данным материалом в видео формате, вы можете найти запись в лектории или просто перейти по ссылке. Также вы сможете получить методичку и перезентацию на данную тему под видео - лекцией.

Для лучшего понимания материала текущего конспекта рекомендую ознакомиться с записью которую я оставлял ранее на тему "Модульное тестирование". Данный материал вы можете найти в архиве конспектов или просто перейдя по ссылке

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

13323-NOXPCJ.eps_320x240.png

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

Демонстрация функций от разработчиков заказчику и называется приемочным тестированием. Тестировщики из группы разработки пишут набор тестов, которые после их запуска демонстрируют функции робота, например, медленный шаг, прыжок, взять предмет, положить предмет в другое место и многие другие функции. Когда заказчик приезжает на демонстрацию, запускается набор таких тестов, по завершении которых клиент принимает работу или отправляет ее на доработку.

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

  • Демонстрация регистрации на портале
  • Демонстрация возможности положить товар в корзину
  • Демонстрация возможности получения скидки за каждый третий оформленный заказ и многое другое

Как правило, набор приемочных тестов запускается при демонстрации функциональных возможностей системы непосредственно самому заказчику. Как было сказано ранее именно на этом этапе заказчик принимает решение о том, забирает ли он работу или хочет внести коррективы.

Инструменты

Дефакто разработкой приемочных тестов занимается отдел тестирования. Для реализации приемочного тестирования существует огромное количество инструментов, но сегодня мы поговорим о приемочных тестах в мире PHP.

Для реализации таких тестов есть замечательный фреймворк Codeception.

codeception-logo_320x240.png

Напоминаю, что ранее, в конспекте с именем “Модульное тестирование (PHP Codeception)”, я уже рассказывал про этот фреймворк и мы даже писали простейшие модульные тесты используя возможности данного фреймворка. Если вы еще не читали данный конспект, настоятельно рекомендую сделать паузу и прочитать его.

В рамках данной лекции я не буду повторяться и рассказывать про данный фреймворк и о его установке, так как эта информация была информативно изложена в лекции “Введение в тестирование - модульное тестирование (PHP Codeception)”

Selenium

Selenium - это открытый (open source) фреймворк для тестирования веб приложений. Selenium включает предметно ориентированный язык программирования Selenese, который позволяет писать тесты на популярных языках общего назначения, включая PHP. Фреймворк также позволяет запускать тесты в большинстве популярных веб браузеров.

seleniumlogo_320x240.png

Написав тесты на PHP при помощи фреймворка Codeception, этот фреймворк произведет очень грубо скажем трансляцию в Selenese. Прогон тестов по факту будет происходить на стороне Selenium, но обо всем по порядку.

Написание приемочного теста

Для инициализации тестового окружения необходимо запустить следующую команду

codecept bootstrap

Эта команда создаст конфигурационный файл “codeception.yml”, директорию с тестами и стандартные наборы всех видов тестов.

Сгенерируем шаблон нашего первого приемочного теста

codecept generate:cest acceptance First

Предположим, что мы будем тестировать портал geekspace.info. Перед написанием самого теста, в конфигурационном файле необходимо указать URL тестируемого приложения. Конфигурационный файл находится в директории “tests/acceptance.suite.yml”

actor: AcceptanceTester
  modules:
    enabled:
      - PhpBrowser:
          url: http://geekspace.info
      - \Helper\Acceptance

Теперь отредактируем наш созданный приемочный тест, который располагается по следующему пути: “tests/acceptance/FirstCest.php”

1 <?php
2
3
4  class FirstCest
5  {
6      public function _before(AcceptanceTester $I)
7      {
8      }
9
10     public function _after(AcceptanceTester $I)
11     {
12     }
13
14     // tests
15     public function tryToTest(AcceptanceTester $I)
16     {
17         $I->amOnPage('/');
18         $I->see('Учебный онлайн IT центр');
19
20         $I->click('.btn-default');
21         $I->see('Авторизация');
22     }
23 }

Разбор

  • На 17 строке кода мы говорим, что нужно перейти на корневую страницу сайта
  • На 18 строке мы говорим, что видим строку “Учебный онлайн IT центр”, на странице
  • 20 строкой кода мы кликаем на элемент с классом “.btn-default”
  • На 21 строке кода мы говорим, что видим строку “Авторизация”

Теперь давайте попробуем запустить данный тест

codecept run --steps

И мы увидим, что каждый шаг теста был завершен успешно и тест был помечен как “пройденный”

Selection_061_640x480.png

Но дело в том, что в рамках данного теста Selenium не был задействован. Тогда напрашивается вопрос, а как codeception без использования Selenium запустил приемочный тест?

Дело в том, что Selenium это не единственный фреймворк для тестирования. Существуют и другие фреймворки. Например по умолчанию codeception использует “PHPBrowser”.

PHP браузер это эмуляция браузера. Такой PHP браузер не способен воспроизводить динамику написанную на языке программирования JavaScript на страницах тестируемого портала и это его главный недостаток. Преимущество данного браузера - это его скорость, но такой браузер нельзя назвать полноценным. При помощи данного инструмента хорошо писать базисные пред демонстрационные тесты.

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

Загрузите “Selenium Standalone Server”, ссылка в дополнительных материалах к уроку. Selenium Standalone Server - это jar сервер который мы можем легко запустить например при помощи терминала.

В данной лекции будет использована версия сервера 3.8.1. Запустим сервер

java -jar selenium-server-standalone-3.8.1.jar -enablePassThrough false

Если вы увидели в окне терминала строку следующего содержания, значит сервер был успешно запущен

INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444

Изменим конфигурационный файл “acceptance.suite.yml”

actor: AcceptanceTester
  modules:
    enabled:
      - WebDriver:
          url: http://geekspace.info
          browser: firefox
      - \Helper\Acceptance

Попробуем запустить написанный ранее тест

codecept run acceptance

В терминале на вывод отдастся ошибка следующего вида:

Unable to create new service: GeckoDriverService

Дело в том, что для прогона приемочных тестов при помощи Selenium нам необходим драйвер браузера, в нашем случае драйвер браузера firefox, то есть Gecko. Скачать веб драйвер можно по ссылке приведенной в дополнительных материалах к лекции.

В данном примере будет использован Gecko драйвер версии 0.22.0 для 64 битной ОС Linux

wget https://github.com/mozilla/geckodriver/releases/download/v0.22.0/geckodriver-v0.22.0-linux64.tar.gz

Разархивируем драйвер

tar -xf geckodriver-v0.22.0-linux64.tar.gz

Перезапускаем Selenium Stand Alone сервер указав путь до Gecko драйвера

java -Dwebdriver.gecko.driver=./geckodriver -jar selenium-server-standalone-3.8.1.jar -enablePassThrough false

В очередной раз запустим приемочный тест

codecept run acceptance

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

Selection_067_2_320x240.png

Готово. Тест был успешно пройден

Очень важно отметить, что порой тест может провалиться по разным причинам, например распространенная проблема - это несоответствие версии браузера и веб драйвера, а может и самого фреймворка codeception или selenium. Как правило такие ошибки легко исправляются путем замещения версия инструментов.

Приемочный этап тестирования очень важная часть процесса разработки ПО и им, конечно же по возможности, не стоит пренебрегать

Информация

Автор конспекта


Дата создания: 04.01.2019
Категория: Тестирование