Медленно работающий приемочный тест с php + codeception + phantomjs

Я перехожу на codeception 2.0.3 для выполнения некоторых тестов на различных разрабатываемых мной веб-платформах. Я начал проводить приемочные испытания. В основном проверяйте страницы в порядке и выполняйте некоторые формы заполнения (вход, подписка, ничего особенного).

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

Конфигурация в accept.suite.yml

WebDriver:
  url: 'localUrl'
  browser: phantomjs 
  window_size: 'maximize'
  capabilities:
      phantomjs.cli.args: ['--ignore-ssl-errors=true']

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

Мне что-то не хватает в конфигурации стека тестирования? Я читал, что тестирование phantomjs таким образом должно быть быстрым и надежным, что можно интегрировать во время разработки, но мне кажется, что это не работает правильно. Я выполнял TDD на Smalltalk, и, возможно, я немного предвзято отношусь к тому, как все работает в этой среде, поэтому, возможно, мои ожидания слишком высоки, но я надеялся, что это может быть немного более отзывчивым и легким.

Я использую codeception 2.0.3 с phantomjs 1.9.7 в Linux с php 5.5.

Любые предложения приветствуются. Спасибо!!!


person DraQ    schedule 08.08.2014    source источник


Ответы (3)


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

Вместо того, чтобы писать:

$I->fillField('username, 'john');

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

$I->fillField(['id' => 'username'], 'john');

or

$I->fillField(['class' => 'username'], 'john');

or

$I->fillField(['css' => 'input .username'], 'john');

Прочтите здесь: http://codeception.com/docs/04-AcceptanceTests#Click

person Martin Ezequiel    schedule 04.03.2015
comment
Это ответ? Ржу не могу. Мы только что узнали, что решение медленных приемочных испытаний состоит в том, чтобы не использовать строгие локаторы? Даже с неправильным URL! - person Jim Maguire; 31.01.2016
comment
@JimMaguire, это было предложение, как и просил оригинальный плакат. Это было очень непрофессионально, к тому же это актуальная рекомендация из документации. Это не ваш фейсбук, так что оставьте свой сарказм на потом. - person Martin Ezequiel; 05.10.2016
comment
Ты наполовину прав, Марти. На самом деле я не заметил вашего ответа. Я просто заметил, что это ПРИНЯТЫЙ ответ. Я не хотел задеть твои чувства. - person Jim Maguire; 07.10.2016
comment
@JimMaguire, ты, должно быть, веселишься на вечеринках. мир. - person Martin Ezequiel; 07.10.2016

Могут быть проблемы с phantomjs, обычно без головы с Codeception PhpBrowser работает очень быстро, попробуйте переключиться на него.

Для работы в браузере попробуйте использовать Codeception WebDriver + latest selenium 2 standalone.

Также, если вы разрабатываете какой-либо фреймворк, вы можете проверить, присутствует ли он в списке модулей Codeception. Если вы можете его использовать, он работает намного быстрее, чем PhpBrowser, поскольку ему не нужен сервер и он работает с symfony dom - crawler и browser - kit.

person Community    schedule 16.08.2014

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

person gorodezkiy    schedule 13.08.2015