Недавно я устроился на новую работу, и мне было поручено настроить и запустить автоматическое тестирование пользовательского интерфейса.
Я решил использовать WebdriverIO, так как он отвечал всем критериям для необходимой мне среды автоматизации.
Это означало, что мне нужно было начать с написания краткого доказательства концепции для приложений, в которых я собирался это реализовать. Чтобы написать доказательство концепции, я просто следовал разделу Начало работы Руководства по разработке. Благодаря этому я смог быстро встать и бежать.
НО ЖДАТЬ! Я не просто хотел написать кучу
browser.click("myselector")
заявления. Это было бы очень сложно поддерживать и выглядело бы очень уродливо для всех, кому я показывал это как наш новый фреймворк для написания тестов. К счастью, WebdriverIO поддерживает объекты страницы и шаблон объектов страницы. Это означало, что я мог написать гораздо больше поддерживаемых тестов, которые можно было бы легко изменить, если бы веб-приложение изменилось.
Мне удалось написать первую часть моего теста с использованием объектов страницы. Я начал с простого, написав небольшой скрипт для входа в приложение. Это было довольно просто. Однако, когда я пошел запускать свой тест, я сразу же столкнулся с ошибкой.
{
"error": {
"message": "Couldn't connect to selenium server",
"stack": "Error: Couldn't connect to selenium server\n at getHTML(\"html\", true) - chart-service.js:77:",
"type": "RuntimeError",
"seleniumStack": {
"status": -1,
"type": "ECONNREFUSED",
"message": "Couldn't connect to selenium server",
"orgStatusMessage": "Couldn't connect to selenium server"
},
"isBoom": true,
"isServer": true,
"data": null,
"output": {
"statusCode": 500,
"payload": {
"statusCode": 500,
"error": "Internal Server Error",
"message": "An internal server error occurred"
},
"headers": {}
}
}
}
Упс!! Я забыл запустить селен-сервер, чтобы можно было запустить эти тесты. Это было легко и быстро решено с помощью пакета npm selenium-standalone, который я также смог найти на сайте WebdriverIO. Как только я установил и запустил его (что почти не заняло времени), я смог запустить свои тесты и увидеть вход в браузер.
Когда я работал над своим первым набором тестов, самым важным было то, что я должен был убедиться, что этот набор тестов покрывает большую часть функциональности приложения, которое я тестировал. Я не хотел тратить уйму времени на написание этих тестов, так как писал их в нескольких разных фреймворках, так как хотел посмотреть, какой из них лучше всего подойдет для проекта, над которым я работал. Это означало, что мне пришлось придумать подмножество тестов, в которых использовались многие функции приложений, но на их написание и сборку у меня не ушло много времени. Чтобы выяснить, как лучше всего это сделать, я посмотрел на свой набор тестов, чтобы увидеть основные области приложения. Затем я сузил тесты, которые у меня были, на основе нашего критического пути приложения. Тестов по-прежнему было слишком много, чтобы написать их быстро, поэтому я посмотрел, как должен выглядеть типичный дымовой тест. Это также было немного больше, чем мне хотелось бы, поэтому я разбил все на часть дымового теста, который затрагивал самые основные функции, которые покрывали некоторые из более странных частей нашего приложения. Имея эти тесты в руках, я смог относительно быстро написать свой тест для проверки концепции, поскольку я работал в каждой из сред. На самом деле это было частью моих критериев для фреймворка. Насколько сложно мне было заставить тест работать? Этот процесс и то, как я выбрал фреймворк для работы, — это отдельная статья в другой раз.
После того, как я написал доказательство концепции, мне нужно было сделать несколько следующих шагов. Сначала мне нужно было попытаться запустить это в нескольких браузерах в WebdriverIO таким образом, чтобы CI мог выбирать, какой браузер запускать и когда его запускать. Во-вторых, я забыл сделать что-либо, что облегчило бы настройку и запуск в другом месте. На этот раз было легко запустить только мою машину. Если это собиралось использовать где-то в среде CI, мне нужно было сделать так, чтобы его можно было легко развернуть и запустить.
Я напишу об этом в своем следующем посте на WebDriverIO.