Какие java технологии и инструменты стоит использовать для автоматизации тестирования?! Аналитика 2014-2015

Компания RebelLabs потрудилась на славу и выпустила отличный доклад “Java Tools and Technologies Landscape for 2014”. Автоматизаторам стоит быть в курсе того что происходит в общем в Java мире и программировании, чтобы использовать самые популярные и стабильные решения.

Сама презентация ниже, а самые важные слайды для тестировщиков-автоматизаторов я выделил в отдельные картинки.

Git + Jenkins + JUnit + Maven наше все

Все в основном разрабатывают веб-приложения

Если задумываетесь о смежных языках программирования с Java

C помощью maven собирают большинство проектов

Для работы с БД чаще всего используют hibernate

Jenkins самый популярный CI

End to end Browser testing автоматизируют только 30%, BDD 12%

Презентация:

Ссылка на оригинальную статью http://zeroturnaround.com/rebellabs/java-tools-and-technologies-landscape-for-2014/

А что вы думаете на счет будущего и автоматизации на java технологиях?

4 лайка

В целом, со всем согласен. Но Eclipse 48% вызывает расстройство желудка. :smile: Все же новое поколение будет использовать IntelliJ, % держится за счет олд-скул дэвов.

Касательно Browser Testing, думаю, что вскоре процент будет гораздо выше. Еще не все к этому пришли, как к must have на вэб проектах, ибо не до конца осознают пока потенциальный профит. Это же может отразиться и на % использования JUnit. Ибо в плане чистого автомейшена у него есть сильный конкурент - TestNG. Есть слайдик и с Selenium, % которого будет тоже расти.

Процент Java 6/7 будет падать, ввиду существенного прорыва Java 8. Конечно Java 8 еще не скоро поднимется в топ, но все к этому идет.

Jenkins всегда будет в лидерах, пока не выпустят бесплатный аналог.

Gradle вряд ли выйдет в лидеры, т.е. тут maven и останется в топе.

C Hibernate / Spring - все ясно. Тут конкурентов нет. Думаю, что автоматизаторы вскоре тоже откажутся от plain jdbc.

1 лайк

Ну, TeamCity бесплатен до 10 разработчиков и до двух, кажется, агентов. А с учётом того, что всё-таки есть IDEA, которая хорошо с ним интегрирована… Будем посмотреть. мы, вот, хотим как раз на TeamCity уйти.
C Gradle тоже, ждмаю, будет прогресс ибо удобнее он мавена и более гибок. :smile:
Есть у меня сомнения по соотношению Groovy и Scala. Почему-то, мне кажется что грувистов больше, нет? :smile:
Spring да, к сожалению, пока нечем заменятью Hibernate… Dо много да, но есть тот же iobatis, который иногда удобнее.

Доброго времени суток,
а нет случаем подобной статистики для % используемых языков/технологий аля Java vs .net vs Python vs etc в этом году ? например, на основе статистики по вакансиям.

Мы используем:

  • Intellij IDEA. Самая рулезная ide, несомненно.
  • JUnit. Те дополнительные функции, которые даёт TestNG - нехорошие. А JUnit зато проще.
  • Selenide + chrome driver. Преимущества браузерных автотестов без головняка с аяксом, таймаутами и пропадающими элементами.
  • Gradle или ant+ivy. Mavens - это геморрой. Популярным он стал, как и Eclipse, в силу исторических причин.
  • Jenkins. Пробовали также Bamboo - не нашли никаких преимуществ. Поэтому не видим причины платить.
2 лайка
  1. Inellij Idea.
  2. JUnit.
  3. Thucydides.
  4. Jenkins (но пока отошёл на второй план)

А можно подробней? Чем JUnit проще, и какие функции TestNG - нехорошие?

А как хром драйвер связан с аяксом, таймаутами и пропадающими элементами? Или имеется ввиду то, что Selenide умеет хорошо это хэндлить?

Можно несколько примеров из реальной практики преимущества gradle над maven? Все хотел на него посмотреть, но наверное нужна сильная мотивация.

1 лайк

Java stack:

  • IntelliJ Idea or sometimes Sublime
  • scala, scalatest (unit tests, integration)
  • jenkins
  • selenium-grid
  • play (front-tier)
  • akka+rabbitmq (backend controllers)
  • mongo
  • sbt+shell

Frontend UI:

  • coffeetests+mocha for integration are using phantom or grid (see ^)

End-2-end:

  • python, webdriver, requests
  • Sandbox is set up in sbt, and calls python, which use grid (see ^) for some tests
  • Playground is using python, which use grid (see ^) for some tests

Пробовал скалу для webdriver, по сравнению с java кода меньше, да и implicits и с traits, сокращают шум. Но к сожалению порог входа высокий (коллега, не смог свободно освоить, и его убивала долгая компиляция скалы) => и Питон победил для e2e тестирования.

красивая инфографика)

Технологии:

Java 7

  1. WebDriver - (chrome + firefox)
  2. TestNG
  3. Jenkins
  4. Eclipse + IntelliJ
  5. Git
  6. Maven
  • почему Java 7 - потому, что Dev Team перешла на Java 7
  • почему WebDriver - потому, что нет бесплатных альтернавит такого же уровня
  • почему TestNG - потому, что JUnit сильно хуже и предназначем по
    большей степени для dev team написания unit tests, мы сильно глубоко
    копнули и переопределили TestNG классы для написания сильно
    кастомизированного отчета под наши нужды.
  • почему Jenkins - потому, что TeamCity платный и со своими ограничениями не проходит по
    количеству джоб (20шт) для нас, плюс мало плагинов для TeamCity
  • все остальное - исторически так сложилось и выбор самого Dev.

есть статья по поводу использования Gradle в Автомашен проектах
http://artkoshelev.github.io/posts/getting-started-with-gradle/

посностью согласен с первым комментом

без Maven Central оно далеко само по себе не уедет

1 лайк

Чем JUnit проще, и какие функции TestNG - нехорошие?

Когда-то TestNG был действительно круче - до тех пор, пока не появился JUnit 4 с аннотациями. Теперь у TestNG осталось всего парочка функций, которых нет у JUnit: это возможность настраивать порядок (зависимости) тестов и параметризированные тесты. Ну как бы один из основополагающих принципов автоматических тестов - они должны быть независимыми. Поэтому возможность задавать порядок в принципе вредна. А вот Gradle, кстати, намеренно запускает тесты в разном порядке.

Параметризированные тесты есть и в TestNG, и в JUnit (вроде бы в TestNG богаче возможности), но сама по себе эта возможность вредна в случае браузерных тестов. Ибо браузерных тестов по определению должно быть мало (по сравнению с юнит-тестами). Через браузер должны тестироваться только самые критичные дял бизнеса цепочки, а все остальные комбинации и частные случае - через юнит-тесты. А параметризированные тесты стимулируют обратное: миллион комбинаций через браузер. Что приводит к раздутому и крайне медленному набору тестов.

Или имеется ввиду то, что Selenide умеет хорошо это хэндлить?

Да, я имел в виду, что Selenide умеет хорошо это хэндлить. А хром тупо быстрее. Хотя, кстати, я это давно не проверял.

несколько примеров из реальной практики преимущества gradle над maven?

Ну, тут важно, что Maven - это геморрой. Куча проблем, неочевидных подводных камней. Огромных билд-файлы, нестабильные плагины. Тот самый мем, что “Мавен качает интернет” - это ж правда. Качает, ещё как качает.

Gradle быстр. Инкрементальная компиляция. Ацки гибкий билд-файл. Билд-файл пишется на груви, что означает, что ты не ограничен форматом XML или возможностями плагинов, а можешь писать любую логику. И ещё есть одна офигенная штука - “Gradle wrapper”. Благодаря этой штуке тебе необязательно инсталлировать Gradle. Просто запускаешь билд-скрипт - и он сам скачает Gradle при первом запуске.

Можно попробовать Gradle, например, на этом проекте: GitHub - selenide-examples/hangman: The hangman game written in Java
Делаешь “git clone GitHub - selenide-examples/hangman: The hangman game written in Java” и потом в этой папке “./gradle test”. Скачается Gradle, скомпилируется код, запустятся юнит-тесты. Быстро. При следующем запуске Gradle скажет, что всё “up-to-date”, то есть ничего не поменялось, и поэтому нечего компилировать. Красота.

Но у Gradle есть один минус. Если ты не близко знаком с синтаксисом Groovy, и тебе надо в билд-скипте сделать что-нибудь нетривиальное, и ты куда-нибудь не туда поставил скобочку, придётся сильно попотеть, пока поймёшь, в чём дело. Но это проблема общая для любых новых языков. Поддержка IDE постоянно развивается, так что я надеюсь, что эта проблема скоро решится.

“Общественное мнение — не маяк, а блуждающие огни.” (с) Андрэ Моруа

2 лайка

так а чем JUnit проще то по итогу? Из цитаты видно что те же яйца только в профиль, просто у TestNG больше возможностей и соответственно больше путей накосячить. Но это ни как не отражается на простоте имхо.

Ну так тем и сложнее. У TestNG больше возможностей и больше путей накосячить.
Чтобы забить гвоздь, можно взять молоток, а можно атомную бомбу. Чем бомба хуже? Да только тем, что у неё больше возможностей и больше путей накосячить. А больше ничем.

У нас:

  • Groovy
  • Cucumber
  • Jenkins
  • Maven