Skip to content

Instantly share code, notes, and snippets.

@Firues
Forked from monolithed/testing-frameworks.md
Created September 27, 2017 10:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Firues/b1ba1d57b56d40de146372cf627dc7a8 to your computer and use it in GitHub Desktop.
Save Firues/b1ba1d57b56d40de146372cf627dc7a8 to your computer and use it in GitHub Desktop.
Сравнение фреймворков для интеграционного тестирования
Название Движок Язык Преимущества Ограничения
Feta Selenium Java * Ориентирован на интеграционное тестирование
* Уже используется в команде тестирования
* Интегрировано с нашим CI и JIRA
* Учтены многие многие проблемы
* Исходный код написан на Java
* Требуются знания Java
Selenium WebDriver Java * Высокая популярность
* Развитая экосистема
* Слишком "косолапое" API
* Требуются знания Java
Thucydides
(Serenity)
WebDriver Java * Развитая экосистема * Требуются знания Java
Browserstack WebDriver JavaScript * * Проект в забвении
webdrvr WebDriver JavaScript * * Обертка над WebDriver и не более того
* Проект в забвении
Buster PhantomJS, jsdom JavaScript * * Низкая популярность
* Ничего не знает про WebDriver
Leadfoot WebDriver JavaScript * Проект активно развивается и является частью Intern * Обертка над WebDriver и не более того
Testium WebDriver CoffeeScript * Поддерживает автоматическое управление сервером Selenium * Синхронное API
webdriver-sync WebDriver JavaScript * * Обертка над WebDriver и не более того
* Проект в забвении
Kommando WebDriver JavaScript * * Проект в забвении
GhostDriver PhantomJS JavaScript * Является полноценной реализацией WebDriver Wire протокола под PhantomJS
* Есть клиенты как для Python так и для JavaScript
* Проект остался без мейнтейнеров
* Слишком "косолапое" API
Selenium-WebDriver WebDriver JavaScript Является полноценной реализацией WebDriver Wire протокола для JavaScript
* Поддержка всех современных браузеров, включая Android
* Официальный биндинг от SeleniumHQ
* Слишком "косолапое" API
* Требуется Selenium Server
WD WebDriver Java, JavaScript * Является полноценной реализацией WebDriver Wire протокола для JavaScript
* Поддержка всех современных браузеров, включая Android
* Слишком "косолапое" API
* Требуется Selenium Server
WebdriverIO WebDriver Java, JavaScript * Является полноценной реализацией WebDriver Wire протокола для JavaScript
* Поддержка всех современных браузеров, включая Android
* Имеется встроенный test-runner
* Активно развивается компанией Sauce Labs
* Развитая экосистема для всех видов тестрования
* Простое и понятное API
* Есть возможность отладки (нативный Web Inspector)
* Headlessly-режим (xvfb)
* Имплементировано большинство методов протокола WebDriver
API Appium протокола для тестирования мобильных платформ
* Нет метода fill (не так страшно)
* Требуется вручную запускать Selenium Server (фикс планируется в 4-й версии
* Пока отсутствует REPL-интерфейс (планируется в 4-й)
Dalek Native Driver JavaScript * Исходный код написан на JavaScript
* Ориентирован на интеграционное тестирование
* Простое и понятное API
* Отсутствие в зависимостях Selenium!
* Проект в состоянии "ушел на покой"
* Требует в основных зависимостях CoffeeScript
PhantomJS PhantomJS C++ * Есть биндинги для Node * Отсутствует высокоуровневое API для работы с DOM и его окружением
* Требуются дополнительные инструменты для формирования "экосистемы" тестирования
Mozilla Marionette Gecko Python * Поддержка WebDriver GeckoDriver/FirefoxDriver * Высокая сложность понимания инфраструктуры
* Больше ориентирован на тестирование в Firefox Gaia
NW.js Node-WebKit C++ * Есть биндинги для Node
* Возможность использовать API DOM и Node
* Отсутствует headlessly режим
* Требуется сборка через node-gyp
* Не решены проблемы с фоновым выполнением задач
* См. PhantomJS
Moonraker WebDriver JavaScript * Функциональность напоминает WebDriverIO * Не очень удачная реализация паттерна PageObject
* См. WebDriverIO
Nightwatch WebDriver JavaScript * Функциональность напоминает WebDriverIO
* Интегрирован с библиотекой с assert'ов
* Автоматизировано упраление Selenium сервером
* См. WebDriverIO
* В отличии от WebDriverIO более слабая экосистима
Nightmare Electron JavaScript * Исходный код написан на JavaScript
* Самый популярный из всего списка
* Проект развивается коммерческой организацией
* Есть система расширений
* Умеет делать скриншоты
* Отсутствует headlessly режим
* Большое количество открытых багов
* Мейнтейнеры не справляются даже с принятием пул-реквестов в одну строчку
* Требуются дополнения для тест-кейсов (аля chai)
* Нет валидации форм
navit PhantomJS и SlimerJS JavaScript * Исходный код написан на JavaScript
* Работает поверх PhantomJS и SlimerJS
* Простое и удобное API
* Умеет делать скриншоты
* Есть обертка над DOM-объектами
* Умеет выставлять UA
* Умеет загружать файлы, отправлять формы, скроллировать страницы
* Поддерживает навигацию
* Есть состояние ожидания появления элемента
* Имеется возможность расширять API
* Таймеры
* Умеет зумминг
* Есть методы для работы с куками и пр. заголовками
* Поддерживает авторизацию
* Умеет работать с фреймами, табами
* Headlessly-режим (xvfb)
* Нет методов для массовового заполнения полей форм
* Нет события submit
* Не умеет генерировать события клавиатуры
* Очень скромное комьюнити
* Расширение функциональности под вопросом
* Ограниченное количество движков (Geko и WebKit)
* Отсутствует интеграция с существующими test-runner'ами типа Karma
* В SlimerJS отсутствует возможность инспектирования кода
Zombie jsdom JavaScript * См. navit * Использует виртуальное окружение
* Не умеет далать скриншоты
Horseman PhantomJS JavaScript * Логирование
* Умеет инлайнить картинки
* Поддерка событий клавиатуры
* Возможность загрузить скрипты на страницу
* Умеет рендерить страницу как PDF
* Поддерживает системные события типа alert и prompt
* На борту jQuery
* См. navit
* Не умеет отправлять формы с типом multipart/form-data
* Отсутствует API для написания тест-кейсов (аля mocha + chai)
* Отсутствуют репортеры
* Отсутствуют возможность выбора движка отличного PhantomJS (например SlimerJS)
Casper PhantomJS и SlimerJS JavaScript * Исходный код написан на JavaScript
* Поддерживает CSS и XPath селекторы
* Работает поверх PhantomJS и SlimerJS
* Отсутствует в зависимостях Selenium!
* Большое количество высокоуровневых функций для работы с DOM
* Логирование
* Отладочный режим
* Парсинг
* В зависимостях только PhantomJS
* CI Travis, Jenkins (XUnit)
* Требует в зависимостях Python
* Для разработки проекта требуется Mono и RPM
* В npm лежит пакет 2-х летней давности
* Нет мейнтенеров, проект на грани "ушел на покой"
* Довольно многословное API
* Огромное количество открытых таской (порядка 300)
Intern PhantomJS, WebDriver JavaScript * Исходный код написан на JavaScript
* Репортеры для Sauce Labs
* CI для Travis CI, Jenkins
* Развивается Dojo
* Имеется test-runner
* Есть recorder, который позволяет автоматически записывать тест-кейсы.
* Позволяет использовать кастомные интерфейсы (API других фреймворков)
* Можно писать интеграционные и модульные тесты
* Имееются репортеры покрытия кода тестами
* Поддержка AMD идет "из коробки"
* Окружение тип тестирования не имеет значения (браузер, сервер)
* Слишком многословное API и запутанная документация
* Требуется Selenium Server, который требуется запускать вручную
Protractor WebDriver JavaScript * Исходный код написан на JavaScript
* Репортеры для Sauce Labs
* Поддержка WebDriver
* Ориентирован для работы с AngularJS
Cucumber Отсутствует JavaScript * Можно подружить с любым фреймворков для интеграционного тестирования * Ориентирован на BDD-тестирование
Capybara Rack::Test, Selenium, WebKit Ruby * Очень популярный в "узких" кругах *
Poltergeist PhantomJS Ruby * Является двайвером для Capybara *
Ghostbuster PhantomJS Ruby * * Заброшен
dryscrape WebKit Python * *

Вспомогательные инструменты: Chimp, Wallaby

Ниже будут перечисленны только отличительные особенности некоторых инструментов, на которые стоит обратить внимание:

WebdriverIO

[+]

— Возможность использовать 6 различных браузеров (Chrome, Firefox, Opera, IE, Android, Safari), не включая PhantomJS
— Многофункциональное и простое API
— Имеется встроенный test-runner
— Не требует node-gyp
— Имеется npm-пакет для работы с сервером Selenium
— Наличие веб-инспектора в браузере
— Наличие плагинов для Grunt, Gulp, WebRTC, Browserevent
Подписка на события в браузере
Интеграция с облачными сервисами типа Sauce Labs, BrowserStack, Travis CI, TestingBot
— Интеграция c CI типа Jenkins и Travis CI
Инструментарий для визуального регрессионного тестирования
— Наличие репортеров
— Интеграция c BDD-фрейморками типа Mocha, Jasmine (v2.0) и Cucumber
— Возможность запуска тестов в рамках одной сессий Selenium
— Возможность [паралельного запуска инстансов](паралельного запуска инстансов) (уже на стадии релиза)
— Каждая команда возвращает Promise
Подписка на события тестового сценария
Биндинг элментов
— Есть событие submit
— Поддерживает xPath
— Проект активно развивается компанией Sauce Labs
— API Appium протокола для тестирования мобильных платформ — Есть возможность встроить сторонний сторонний код на страницу

[-]

— Не автоматизировано управление Selenium сервером (планируется в 4-й версии)
— Нет метода fill
— Нет SlimerJS (может быть удобно для тех, кто будет запускать тесты локально "для галочки")
— Пока не нашел примера импортирта внешних скриптов
— Пока отсутствует REPL-интерфейс для интерактивной отладки запущенного процесса (см. пример). Планируется в 4-й версии.

CasperJS

[+]

— Самый популярный из списка;
— Есть метод fill
— Есть ассерты
— Встроенные методы для Unit-тестирования
— Есть репортеры типа XUnit
— Подерживает два движка SlimerJS и PhantomJS — Есть логирование

[-]

— Требует в зависимостях Python;
— В npm лежит пакет версия 2-х летней давности
— Нет мейнтенеров, проект в стадии "заброшен"
— Относительно многословное API

navit

[+]

— Подерживает два движка SlimerJS и PhantomJS
— Самое простое в хорошем смысле слова API из всех

[-]

— Пока очень скромная аудитория
— Нет метода fill
— Нет метода для отправки форм используя событие submit (можно написать свой метод или использовать get.evaluate)

Nightwatch

[+]

— По функциональности практичкски не уступает WebdriverIO
— Интегрирован с библиотекой с assert'ов — Автоматизировано управление Selenium сервером

[-] — В отличии от WebdriverIO все свалено в одну кучу. WebdriverIO работает как сервис — репортеры, фреймворки, плагины все это отдельные пакеты, которые устанавливаются только по требованию.

Intern

[+]

— По функциональности не уступает WebdriverIO и даже в чем-то превосходит
— Позволяет использовать кастомные интерфейсы (API других фреймворков)
— Есть recorder, который позволяет автоматически записывать тест-кейсы. — Можно писать интеграционные и модульные тесты
— Имееются репортеры покрытия кода тестами
— Поддержка AMD идет "из коробки"
— Окружение тип тестирования не имеет значения (браузер, сервер)

[-]

— Отсутствует метод wait (selector [, time]) (вместо него используется setFindTimeout, который завязан только на время)
— Не автоматизировано управление Selenium сервером — Слишко многословное API:

define(function (require) {
	let registerSuite = require('intern!object'),
		assert = require('intern/chai!assert');

	registerSuite({
		name: 'section',

		'case': function () {
			return this.remote
				.get(require.toUrl('/user/login'))
				.setFindTimeout(5000)
				.findByCssSelector('button[data-name="submit"]')
				.click()
				.end()
				.then(function () {
					assert.strictEqual(...);
				});
		}
	});
});

Этот же пример WebdriverIO

suite('section', () => {
	test('case', function *() {
		yield browser
			.url('/user/login')
			.waitForExist('form[name="login"]')
			.click('button[data-name="submit"]')
	});
});

Вывод — CasperJS и navit в значительной степени уступают по многим показателям Intern, Nightwatch, Moonraker и WebdriverIO, однако у последнего более простое и понятное API

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment