Приемочное тестирование средствами JBehave_Vasili Spirydzionak.pptx
- Количество слайдов: 17
ПРИЕМОЧНОЕ ТЕСТИРОВАНИЕ СРЕДСТВАМИ JBEHAVE Декабрь, 2016 1
УРОВНИ ТЕСТИРОВАНИЯ Exploratory/ Session based tests Business facing tests Automated GUI Tests “Are we building the right system? ” Automated API Tests Automated Integration Tests Automated Component Tests Automated Unit Tests Technology Facing Tests “Are we building the system right? ” 2
СТРУКТУРА АВТОМАТИЗИРОВАННОГО ТЕСТИРОВАНИЯ Automation testing BDD DDT Keyword driven testing 3
ПОДХОДЫ В АВТОМАТИЗИРОВАННОМ ТЕСТИРОВАНИИ 1 KDT (Keyword Driven Testing) • тесты, управляемые ключевыми словами 2 DDT (Data Driven Testing) • позволяет данные хранить отдельно от тестов 3 BDD (Behavior-driven development) • разработка, основанная на поведении 4
BDD ПОДХОД GIVEN WHEN THEN <Исходное состояние> <Событие> <Результат> 5
BDD ФРЕЙМВОРКИ 6
BDD FRAMEWORKS 7
УРОВНИ ФРЕЙМВОРКА АВТОМАТИЗАЦИИ И PAGEOBJECT TEST SCRIPTS TEST DATA public class Search. Page { System. set. Property("webdriver. chrome. driver", "/path/to/chromedriver"); Web. Driver driver = new Chrome. Driver(); driver. get("http: //www. google. by"); TEST STEPS ACTION/UTILITIES public static By SEARCH = By. xpath("//input[@name=‘q’] "); Webel. Ement search. Input = driver. find. Element(SEARCH); search. Input. send. Keys(“Apple”); search. Input. submit(); } UI LAYER 8
JBEHAVE trader_is_alerted_of_status. story TEST SCRIPTS Trader. Steps. java TEST SCRIPTS Trader. java UI LAYER 9
JBEHAVE 10
BDD ПОДХОД НА ПРОЕКТЕ 11
ФУНКЦИОНАЛ ПРОЕКТА 1 Создание тренингов 2 Расписание 3 Обработка запросов • обеспечивает полное описание курсов, которые доступны в каталоге • запланированный тренинг с опредленным тренером, расписанием и местоположением • управление регистрацией пользователей на тренинг: перемещение в запланированные события, отметка посещаемости, сбор фидбеков 12
СТРУКТУРА ТЕСТОВОГО ПРОЕКТА Admin. Page. java src pages Training. List. Page. java main java resources Admin. Page. Steps. java steps Training. List. Page. Steps. java admin_can_edit_dictionaries. story stories searching_for_existing_training. story 13
ТЕСТОВЫЙ СЦЕНАРИЙ admin_can_edit_dictionaries. story Meta: @test. Type ui @user //users/admin/x. Username @xml. File testdata/smoke. Test. Data. xml Scenario: Administrator can edit Categories Given user logs in with 'Administrator' role When user clicks 'Admin' tab And user clicks Add button And user types random records name And user types 'Test. Name' records short name And user clicks Ok button And user clicks Save dictionary button And user clicks edit icon on new added record And user types 'new. Test. Name' records short name And user clicks Ok button And user clicks Save dictionary button Then new record Short Name is 'new. Test. Name' 14
ТЕСТОВЫЙ КЛАСС Admin. Page. Steps. java public class Admin. Page. Steps { @When("user clicks '$tab. Name' tab") public void go. Tab(String tab. Name) { get. Page(). go. Tab(tab. Name); } @When("user clicks Add button") public void click. Add. Button() { get. Page(). click. Add. Button(); } @Then("new record exists in list") public void check. New. Record. Exists() { String record. Name = Records. Storage. get. Last. Created. Record(). get. Name(); Assert. assert. True(String. format(Messages. NEW_RECORD_NOT_DISPLAYED, record. Name), get. Page(). is. Record. Exist(record. Name)); }. . . . } 15
PAGE OBJECT Admin. Page. java public class Admin. Page extends Custom. Abstract. Page { protected static final By ADD_BUTTON = By. css. Selector(". ui-button-add-label--green"); protected static final By MODAL_BODY = By. class. Name("ui-modal__body"); protected static final String RECORD_ROW_XPATH = "//td[1]//div[text()='{0}']/. . "; public void click. Add. Button() { _find. Element(ADD_BUTTON). click(); _find. Element(MODAL_BODY); } public boolean is. Record. Exist(String name) { return is. Element. Visible(format. Xpath(RECORD_ROW_XPATH, name), Property. Constants. LOWEST_WAIT); }. . . . } 16
СПАСИБО ЗА ВНИМАНИЕ! 17
Приемочное тестирование средствами JBehave_Vasili Spirydzionak.pptx