Итак, вы написали плагин для Play … вы уверены, что он работает?
Недавно я подарил Deadbolt некоторую любовь, и как часть работы я добавил тестовое приложение для функционального тестирования. Это приложение, которое использует все функции Deadbolt и управляется HTTP-вызовами REST-Assured. Первоначально он был основан на Play 2.3.5, но при этом игнорируются поддерживаемые версии Play с 2.3.1 по 2.3.4. Кроме того, эти трудолюбивые люди из команды Play в Typesafe продолжают выпускать новые версии с полным набором функций.
Кроме того, требуется поддержка Scala 2.10.4 и 2.11.1, поэтому необходимо тестирование кросс-версии Scala.
Очевидно, что тестирование вашего плагина на одной версии Play недостаточно. Кажется, что какая-то непрерывная интеграция может помочь нам здесь …
Опираясь на Трэвис CI
Deadbolt основан на Travis CI , отличной платформе CI, бесплатной для проектов с открытым исходным кодом. Это запускает тесты и публикует версии снимков в Sonatype. Я не буду вдаваться в подробности, потому что в Cake Solutions уже есть отличное руководство. Вы можете найти руководство здесь: http://www.cakesolutions.net/teamblogs/publishing-artefacts-to-oss-sonatype-nexus-using-sbt-and-travis-ci-here…
Я внес некоторые изменения в скрипт сборки, потому что код плагина не находится на верхнем уровне хранилища; скорее он расположен на один уровень ниже. Репозиторий выглядит так:
1
2
3
|
deadbolt- 2 -java |-code # plugin code lives here |-test-app # the functional test application |
В результате файл .travis.yml, который определяет сборку, выглядит следующим образом.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
language: scala jdk: - openjdk6 scala: - 2.11 . 1 script: - cd code - sbt ++$TRAVIS_SCALA_VERSION +test - cd ../test-app - sbt ++$TRAVIS_SCALA_VERSION +test - cd ../code - sbt ++$TRAVIS_SCALA_VERSION +publish-local after_success: - ! '[[ $TRAVIS_BRANCH == "master" ]] && { sbt +publish; };' env: global: - secure: foo - secure: bar |
Это устанавливает версию Java (люди злятся, когда я не предоставляю Java 6-совместимые версии), и определяет сценарий как процесс сборки. Обратите внимание на команды cd
используемые для переключения между каталогом плагина и каталогом test-app.
Этот сценарий уже охватывает требование кросс-версии Scala — добавление к команде префикса +, например, +test
, выполнит эту команду для всех версий Scala, определенных в вашем build.sbt. Важно отметить, что хотя в .travis.yml определен только Scala 2.11.1, сам SBT позаботится об установке текущей версии сборки на основе build.sbt.
1
|
crossScalaVersions := Seq( "2.11.1" , "2.10.4" ) |
Тестирование нескольких версий Play
Однако версия Play, используемая тестовым приложением, все еще жестко задана в 2.3.5 в test-app / project / plugins.sbt.
1
|
addSbtPlugin( "com.typesafe.play" % "sbt-plugin" % "2.3.5" ) |
К счастью, файлы .sbt — это не просто файлы конфигурации, а настоящий код. Это означает, что мы можем изменить версию Play в зависимости от свойств среды. Значение по умолчанию 2.3.5 дается, чтобы позволить тестам запускаться локально без необходимости устанавливать версию.
1
|
addSbtPlugin( "com.typesafe.play" % "sbt-plugin" % System.getProperty( "playTestVersion" , "2.3.5" )) |
Наконец, мы обновляем .travis.yml, чтобы воспользоваться этим.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
language: scala jdk: - openjdk6 scala: - 2.11 . 1 script: - cd code - sbt ++$TRAVIS_SCALA_VERSION +test - cd ../test-app - sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion= 2.3 . 1 +test - sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion= 2.3 . 2 +test - sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion= 2.3 . 3 +test - sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion= 2.3 . 4 +test - sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion= 2.3 . 5 +test - cd ../code - sbt ++$TRAVIS_SCALA_VERSION +publish-local after_success: - ! '[[ $TRAVIS_BRANCH == "master" ]] && { sbt +publish; };' env: global: - secure: foo - secure: bar |
Это означает, что во время сборки выполняются следующие шаги:
- sbt ++ $ TRAVIS_SCALA_VERSION + test
- Запустите тесты плагинов для Scala 2.11.1
- Запустите тесты плагинов для Scala 2.10.4
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.1 + test
- Запустите функциональные тесты тестового приложения для Scala 2.11.1 и Play 2.3.1.
- Запустите функциональные тесты тестового приложения для Scala 2.10.4 и Play 2.3.1.
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.2 + test
- Запустите функциональные тесты тестового приложения для Scala 2.11.1 и Play 2.3.2.
- Запустите функциональные тесты тестового приложения для Scala 2.10.4 и Play 2.3.2.
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.3 + test
- Запустите функциональные тесты тестового приложения для Scala 2.11.1 и Play 2.3.3.
- Запустите функциональные тесты тестового приложения для Scala 2.10.4 и Play 2.3.3.
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.4 + test
- Запустите функциональные тесты тестового приложения для Scala 2.11.1 и Play 2.3.4.
- Запустите функциональные тесты тестового приложения для Scala 2.10.4 и Play 2.3.4.
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.5 + test
- Запустите функциональные тесты тестового приложения для Scala 2.11.1 и Play 2.3.5.
- Запустите функциональные тесты тестового приложения для Scala 2.10.4 и Play 2.3.5.
Если все эти шаги after_success
будет выполнена ветка after_success
сценария сборки. Если какой-либо из этапов завершится неудачно, сборка будет нарушена и снимки не будут опубликованы.
- Вы можете взглянуть на хранилище, используя этот подход здесь: https://github.com/schaloner/deadbolt-2-java .
- Полученная сборка Travis доступна здесь: https://travis-ci.org/schaloner/deadbolt-2-java .
Ссылка: | Тестирование вашего плагина с несколькими версиями Play от нашего партнера JCG Стива Чалонера в блоге Objectify . |