Upload
sqalab
View
129
Download
2
Embed Size (px)
Citation preview
Software quality assurance days17 Международная конференция по вопросам качества ПОsqadays.com
Минск. 29–30 мая 2015
Говако ЕвгенийDeutsche Bank Technology Center, Санкт-Петебург, Россия
Исполнимые спецификации в тестировании UI.
О себе Евгений Говако
QA/Test Automation Engineer
Deutsche Bank Technology Center Russia, St. Petersburg◦ В QA с 2004 года◦ QA Lead/Support Lead◦ QMS◦ Test Automation since 2012
Традиционный подход к автотестам
Test id Test Actions Expected Results
1 1. Open Control Panel with Red light shown2. Click Next button
1. Yellow light should be shown
[Test][Scenario("1")]public void 01_RedButtonShouldTurnOnGreenLight(){
// Open Control Panel with Red light shownOpen.ControlPanel();TrafficLight.RedLight.IsShown.ShouldBe(true);
// Click Next buttonControlPanel.NextButton.IsVisible.WaitFor(true);ControlPanel.NextButton.Click();
// Yellow light should be shownTrafficLight.YellowLight.IsShown.ShouldBecome(true);
}
Gherkin – исполнимые спецификации
◦ Автотесты - исполнение спецификации шаг за шагом
◦ Gherkin – язык, позволяющий формализовать исполнение строк спецификации
◦ Gherkin – сам по себе является языком программирования◦ Ключевые слова Given/When/Then◦ Предполагает интерпретатор шагов
(Cucumber/SpecFlow)◦ Изначально изобретен в для написания
спецификаций для Cucumber
Выполнение Gherkin
Строка Поиск метода по шаблону
Выполнение с параметрами
Scenario: 01 Turn red to Red Yellow Given Red Light is shown When user clicks on Next button Then Yellow light should be shown
Пишем тест на GherkinScenario: 01 Turn red to Red Yellow Given Red Light is shown When user clicks on Next button Then Yellow light should be shown
[Given(@"Red light is shown")]public void CheckRedLightShown(){
TrafficLight.RedLight.IsShown.ShouldBe(true);}
[When(@"user clicks on Next button")]public void PressButton(){
ControlPanel.NextButton.IsVisible.WaitFor(true);ControlPanel.NextButton.Click();
}
[Then(@"Yellow light should be shown")]public void CheckLightVisibility(){
TrafficLight.YellowLight.IsShown.ShouldBe(true);}
Вводим параметризацию
[Given(@"(.*) light is shown")]public void CheckRedLightShown(Light light){
TrafficLight.GetLight(light).IsShown.ShouldBe(true);}
[When(@"user clicks on Next button")]public void PressButton(){
ControlPanel.NextButton.IsVisible.WaitFor(true);ControlPanel.NextButton.Click();
}
[Then(@"(.*) light should be shown")]public void CheckLightVisibility(Light light){
TrafficLight.GetLight(light).IsShown.ShouldBe(true);;}
Scenario: 01 Turn red to Red Yellow Given Red Light is shown When user clicks on Next button Then Yellow light should be shown
Делаем Data Driven testScenario Outline: 01 Switch Lights Given <original> Light is shown When user clicks on Next button Then <expected> light should be shownScenarios: | original | expected | | red | green | | greeen | yellow | | yellow | red |
[Given(@"(.*) light is shown")]public void CheckRedLightShown(Light light) {}
[When(@"user clicks on Next button")]public void PressButton() {}
[Then(@"(.*) light should be shown")]public void CheckLightVisibility(Light light) {}
Преимущества и недостатки
Прямая связь спецификации и автотестаВысокая скорость разработки тестовРазработка новых тестов без участия программистовПоддержка тестов на уровне модификации сценариев
Ограничение свободы QA в формулировках тестовых сценариевСпецификации уходят от бизнес-смысла к описанию манипуляций с интерфейсом
Лучшие практики
• Переиспользование шагов• Одно действие на шаг• Использование Background• Использование декларативного стиля написания
Что еще?
• Создание библиотеки общих шагов• Модификация фреймворка (SpecFlow) • Написание собственного интерпретатора