Традиционно, на проектах где back-end писан на Java, фреймворк тестирования тоже строится на технологиях Java. С одной стороны это оправдано единообразием и уже готовым тулсетом у разработчиков. Но с другой стороны немного усложняет вход в автоматизацию для тестировщиков, не знакомых с тонкостями Java. Новичкам, конечно, можно посоветовать более простые для понимания варианты написания тестов на Ruby или Python, но это уже совсем другой мир, и совсем другой геморрой для DevOps. Очень неплохим вариантом в такой ситуации мне видится использование языка программирования Groovy в паре с тест фреймворком Spock. Эта связка позволяет писать понятные REST API тесты на базе уже существующей Java инфраструктуры.
В докладе на примерах посмотрим как это сделать и попытаемся для себя понять есть ли у такого подхода будущее или это просто баловство для ленивых.
14. Киев 2016
def (a, b, c) = [10, 20, 'foo']
def nums = [1, 3, 5]
def a, b, c
(a, b, c) = nums
def (day, month, year) =
"1st November 2016".split()
Делаем жизнь проще: Spock + Groovy
15. Киев 2016
for ( i in 0..9 ) {}
for ( i in [0, 1, 5, 6, 15] ) {}
def map = ['abc':1, 'def':2, 'xyz':3]
def x = 0
for ( e in map ) { x += e.value }
Делаем жизнь проще: Spock + Groovy
23. Киев 2016
Fields
def obj = new FirstClassObject()
def coll = new Collaborator()
@Shared res = new SharedResource()
Делаем жизнь проще: Spock + Groovy
24. Киев 2016
Fixsture Methods
def setup() {}
//run before every feature method
def cleanup() {}
//run after every feature method
def setupSpec() {}
//run before the first feature method
def cleanupSpec() {}
//run after the last feature method
Делаем жизнь проще: Spock + Groovy
26. Киев 2016
Blocks
• Нaстройка параметров теста (Setup)
• Выполнение воздействия на систему (Stimulus)
• Описание ожидаемого ответа системы
(Response)
• Очистка после теста (Cleanup)
Делаем жизнь проще: Spock + Groovy
32. Киев 2016
@Ignore
class MySpec extends Specification { ... }
@IgnoreIf({ os.windows })
def "Везде, но не на винде"() { ... }
@Requires({ os.windows })
def "Люблю Windows"() { ... }
@Timeout(value = 5, unit = MINUTES)
def "Ушла на 5 минут"() { ... }
Делаем жизнь проще: Spock + Groovy
33. Киев 2016
@Title("This is easy to read")
class ThisIsHarderToReadSpec extends
Specification { ... }
@Narrative("""
As a user
I want drink
So go bar
""")
class HelpUserToGetToTheBar () { ... }
34. Киев 2016
@Issue("http://my.jira/SP-1002")
class MySpec extends Specification {
@Issue("SP-1311")
def "Something wrong has happened"() { ... }
@Issue(["SP-1911", "FO-3334"])
def "Then I have two related issues"() { ... }
}
37. Киев 2016
Groovy http://groovy-lang.org/documentation.html
Spock http://spockframework.org/spock/docs/1.1-rc-2/all_in_one.html
RESTClient https://github.com/jgritman/httpbuilder/wiki/RESTClient
Allure http://allure.qatools.ru/
SoapUI https://www.soapui.org/downloads/soapui.html
RESTful http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
HTTP RFC https://tools.ietf.org/html/rfc2616#section-5
JSON HAL https://tools.ietf.org/id/draft-kelly-json-hal-03.txt
Делаем жизнь проще: Spock + Groovy
Что почитать
Notes de l'éditeur
Приветствие
Зовут
Занимаюсь
Кто вы ?
Поговорим об некоторых инструментах автоматизации тестирования АПИ
Где это ?
Что такое REST API зачем и когда нам надо его тестировать?
Спросить про то, стоит ли рассказать про это или и так все понятно?
Roy Fielding), одним из создателей протокола «HTTP»,
REST архитектурный стиль взаимодействия компонентов распределённого приложения в сети.
Representational State Transfer (REST)
С точки зрения тестировщика тестирование Рест это - слать реквесты и анализировать респонсы
Рассмотрим что сабой являет запрос
это НТТР который специфицорован под контекст общения
джсон
Для тестирования через рест нам нужно уметь :
слать/получать НТТР сообщения
парсить JSON, XML
Change pic!
switch / case for any type
Expected 7 actual 15
http://meetspock.appspot.com/
interpolated
Parsing Json XML
http://meetspock.appspot.com/
Interaction Based Testing Data Driven Testing
Фазы
RESTClient has convenience methods for get, put post delete, head
The response data is always parsed and buffered in-memory
The returned HttpResponseDecorator instance gives convenient access to headers and the parsed response data