SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Downloaden Sie, um offline zu lesen
Матчеры	
  

маленький	
  шаг	
  для	
  вас	
  и	
  огромный	
  
для	
  ваших	
  автотестов	
  

Меркушев Кирилл
Инженер по автоматизации тестирования
Тестовая среда, СПб, 30 ноября 2013
37544	


2
37544	


3
37544	

Сложности	

при оценке результатов	

4
Хватит	
  это	
  терпеть!	
  
5
Дорога	
  к	
  матчерам	
  
	
  

Hamcrest	
  
Готовые	
  инструменты	
  
Рубрика:	
  сделай	
  сам	
  
Дорога	
  к	
  матчерам	
  

//assertTrue();
//assertFalse();
//assertEquals();
assertTrue(
"Fruit should be sweet - expected TRUE",
fruit.isSweet());
Дорога	
  к	
  матчерам	
  
//проверки
log.info("Checking local");
FileAssert.assertFileNotExists(f1);
FileAssert.assertFileExists(new_fl);
FileAssert.assertIsDirectory(new_fl);
FileAssert.assertFileExists(new
File(new_fl.getAbsolutePath() +
File.separator + "innerFile"));
// ...
8
Дорога	
  к	
  матчерам	
  
//проверки
log.info("Checking local");
FileAssert.assertFileNotExists(f1);
FileAssert.assertFileExists(new_fl);
FileAssert.assertIsDirectory(new_fl);
FileAssert.assertFileExists(new
File(new_fl.getAbsolutePath() + File.separator
+ "innerFile"));
DavAssert.assertResourceExists(turkishletters);
DavAssert.assertResourceExists("İSTİKLAL
MARŞI");
DavAssert.assertResourceExists("ı.txt");
DavAssert.assertResourceExists("i.txt");
DavAssert.assertResourceExists("ı");
// ...
9
Дорога	
  к	
  матчерам	
  
//проверки
log.info("Checking local");
FileAssert.assertFileNotExists(f1);
FileAssert.assertFileExists(new_fl);
FileAssert.assertIsDirectory(new_fl);
FileAssert.assertFileExists(new File(new_fl.getAbsolutePath() + File.separator +
"innerFile"));
FileAssert.assertIsFile(new File(new_fl.getAbsolutePath() + File.separator + "innerFile"));
FileAssert.assertFileContent(new File(new_fl.getAbsolutePath() + File.separator +
"innerFile"), "qwerty".getBytes());
FileAssert.assertFileExists(new File(new_fl.getAbsolutePath() + File.separator +
"innerDir"));
FileAssert.assertIsDirectory(new File(new_fl.getAbsolutePath() + File.separator +
"innerDir"));
DavAssert.assertResourceExists(turkishletters);
DavAssert.assertResourceExists("İSTİKLAL MARŞI");
DavAssert.assertResourceExists("ı.txt");
DavAssert.assertResourceExists("i.txt");
DavAssert.assertResourceExists("ı");
DavAssert.assertResourceExists("i");
DavAssert.assertFileContent(turkishletters, content);
DavAssert.assertFileContent("İSTİKLAL MARŞI", content);
DavAssert.assertFileContent("ı.txt", content);
DavAssert.assertFileContent("i.txt", content);

10
Дорога	
  к	
  матчерам	
  
@Test
public void itShouldWork() {
checkThatAllWorks();
}
Дорога	
  к	
  матчерам	
  
сheckThatAllWorks();	

//проверки
log.info("Checking local");
FileAssert.assertFileNotExists(f1);
FileAssert.assertFileExists(new_fl);
FileAssert.assertIsDirectory(new_fl);
FileAssert.assertFileExists(new
File(new_fl.getAbsolutePath() + File.separator +
"innerFile"));
FileAssert.assertIsFile(new
File(new_fl.getAbsolutePath() + File.separator +
"innerFile"));
FileAssert.assertFileContent(new
File(new_fl.getAbsolutePath() + File.separator +
"innerFile"), "qwerty".getBytes());
FileAssert.assertFileExists(new
File(new_fl.getAbsolutePath() + File.separator +
"innerDir"));
FileAssert.assertIsDirectory(new
File(new_fl.getAbsolutePath() + File.separator +
"innerDir"));
DavAssert.assertResourceExists(turkishletters);
DavAssert.assertResourceExists("İSTİKLAL MARŞI");
DavAssert.assertResourceExists("ı.txt");
DavAssert.assertResourceExists("i.txt");
DavAssert.assertResourceExists("ı");
DavAssert.assertResourceExists("i");

12
Дорога	
  к	
  матчерам	
  
@Test //1

//проверки
log.info("Checking local");
FileAssert.assertFileNotExists(f1);
FileAssert.assertFileExists(new_fl);
FileAssert.assertIsDirectory(new_fl);
FileAssert.assertFileExists(new
File(new_fl.getAbsolutePath() + File.separator +
"innerFile"));
FileAssert.assertIsFile(new
File(new_fl.getAbsolutePath() + File.separator +
"innerFile"));
FileAssert.assertFileContent(new
File(new_fl.getAbsolutePath() + File.separator +
"innerFile"), "qwerty".getBytes());
FileAssert.assertFileExists(new
File(new_fl.getAbsolutePath() + File.separator +
"innerDir"));
FileAssert.assertIsDirectory(new
File(new_fl.getAbsolutePath() + File.separator +
"innerDir"));
DavAssert.assertResourceExists(turkishletters);
DavAssert.assertResourceExists("İSTİKLAL
MARŞI");

@Test //2

FileAssert.assertFileContent(new
File(new_fl.getAbsolutePath() + File.separator +
"innerFile"), "qwerty".getBytes());
FileAssert.assertFileExists(new
File(new_fl.getAbsolutePath() + File.separator +
"innerDir"));

+	
  
DavAssert.assertResourceExists(turkishletters);
DavAssert.assertResourceExists("İSTİKLAL
MARŞI");
Дорога	
  к	
  матчерам	
  
@Test
public void
itShouldWorkToday1() {
checkThatAllWorksToday1();
}
@Test
public void
itShouldWorkToday2() {
checkThatAllWorksToday2();
}
@Test
public void
itShouldWorkToday3() {
checkThatAllWorksToday3();
checkThatAllWorksToday4();
}

//проверки
log.info("Checking local");
FileAssert.assertFileNotExists(
f1);
FileAssert.assertFileExists(new
_fl);
FileAssert.assertIsDirectory(ne
w_fl);
FileAssert.assertFileExists(new
File(new_fl.getAbsolutePath() +
File.separator + "innerFile"));
FileAssert.assertIsFile(new
File(new_fl.getAbsolutePath() +
File.separator + "innerFile"));
FileAssert.assertFileContent(ne
w File(new_fl.getAbsolutePath()
+ File.separator +

//проверки
log.info("Checking local");
FileAssert.assertFileNotExists(
f1);
FileAssert.assertFileExists(new
_fl);
FileAssert.assertIsDirectory(ne
w_fl);
FileAssert.assertFileExists(new
File(new_fl.getAbsolutePath() +
File.separator + "innerFile"));
FileAssert.assertIsFile(new
File(new_fl.getAbsolutePath() +
File.separator + "innerFile"));
FileAssert.assertFileContent(ne
w File(new_fl.getAbsolutePath()
+ File.separator +

//проверки
log.info("Checking local");
FileAssert.assertFileNotExists(
f1);
FileAssert.assertFileExists(new
_fl);
FileAssert.assertIsDirectory(ne
w_fl);
FileAssert.assertFileExists(new
File(new_fl.getAbsolutePath() +
File.separator + "innerFile"));
FileAssert.assertIsFile(new
File(new_fl.getAbsolutePath() +
File.separator + "innerFile"));
FileAssert.assertFileContent(ne
w File(new_fl.getAbsolutePath()
+ File.separator +
Дорога	
  к	
  матчерам	
  

15
Дорога	
  к	
  матчерам	
  

16
Дорога	
  к	
  матчерам	
  

{Проверка}	
  
{Проверка}	
  
…	

{Проверка}	
  
17

AND,	
  	
  OR,	
  	
  NOT	
  
Дорога	
  к	
  матчерам	
  
assertTrue(
"Fruit should be sweet - expected TRUE", fruit.isSweet()

);

{Описание,	
  Логика}	
  

Матчер	
  
Дорога	
  к	
  матчерам	
  

assertThat	
  
JUnit	


assumeThat	
  
JUnit	


…	

select	
  
19

Lambdaj	


Объект	
  

Матчер	
  
Дорога	
  к	
  матчерам	
  

	
  

Hamcrest	
  

Готовые	
  инструменты	
  
Рубрика:	
  сделай	
  сам	
  
Hamcrest	
  
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
</dependency>
Hamcrest	
  
assertTrue("Fruit should be sweet", fruit.isSweet());
assertEquals("Fruit should be round",
Shape.ROUND, fruit.getShape());
assertEquals("Fruit should be orange",
Color.ORANGE, fruit.getColor());

assertThat(
fruit,
both(round()).and(sweet()).and(hasColor(Color.ORANGE))
);
Hamcrest	
  
assertTrue("Fruit1 should be sweet", fruit1.isSweet());
assertTrue("Fruit2 should be sweet", fruit2.isSweet());
assertTrue("Fruit3 should be sweet", fruit3.isSweet());

assertThat(asList(fruit1, fruit2, fruit3),
everyItem(is(sweet())));
// или
assertThat(asList(fruit1, fruit2, fruit3),
hasItem(not(sweet())));
Дорога	
  к	
  матчерам	
  

	
  
Hamcrest	
  

Готовые	
  инструменты	
  
Рубрика:	
  сделай	
  сам	
  
Готовые	
  инструменты	
  

Yandex-­‐qatools/matchers-­‐java	
  
http://bit.ly/yamatcher	


Derari/cthul/Regexp	

Github, …	


… python, c#, php	

25
Готовые	
  инструменты	
  

Yandex-­‐qatools/matchers-­‐java	
  
Webdriver-­‐matchers	
  
Collec^on-­‐matchers	
  
Matcher-­‐decorators	
  	
  

26

http://bit.ly/yamatcher
Webdriver-­‐matchers	
  

Href	
  

Name	
  

Afr	
  

27

Type	
  

Ac^on	
  

Placeholder	
  

Size	
  

Classname	
  

Target	
  

Alt	
  

Id	
  
Title	
  

Value	
  

Text	
  

Src	
  
http://bit.ly/yamatcher
CollecAon-­‐matchers	
  
List<String> actual = asList("1", "2", "3");
List<String> expected = asList("3", "2", "1");
assertThat(actual, hasSameItemsAsList(expected)
.sameSorted());

Expected: Lists contains same items and
sorted equally
but:
(Not sorted correctly) [<2>]:
-> "Expected 3 on position [0], but was - 1"
-> "Expected 1 on position [2], but was - 3"
http://bit.ly/yamatcher
Matcher-­‐decorators	
  
// ожидание
assertThat(element, should(exists())
.whileWaitingUntil(timeoutHasExpired(SECONDS.toMillis(5))));

// преддействие
assertThat(element,
should(exists()).after(pageRefresh(driver)));

// предпроверка
assertThat(element,
should(hasText("Text")).inCase(element, exists()));

http://bit.ly/yamatcher
Matcher-­‐decorators	
  
assertThat(mailsList,
should(hasMailWithSubject("Subject"))
.after(pageRefresh(driver))
.whileWaitingUntil(timeoutHasExpired()
);

http://bit.ly/yamatcher
Дорога	
  к	
  матчерам	
  

	
  
Hamcrest	
  
Готовые	
  инструменты	
  

Рубрика:	
  сделай	
  сам	
  
Рубрика: сделай сам

TypeSafeMatcher<T>	
  
FeatureMatcher<U,V>	
  
TypeSafeDiagnosingMatcher<T>	
  
32
TypeSafeMatcher<T>	

// логика проверки
public boolean matchesSafely(T actual)!


!
// описание ожидаемого значения
public void describeTo(Description description)


!
// описание полученного значения
protected void describeMismatchSafely(T item,
Description mismatchDescription)


!
33
FeatureMatcher<U,V>	

public static Matcher<Fruit> sweet() {
return new FeatureMatcher<Fruit, Boolean>(
is(true),
"fruit should be sweet",
"sweet -"
) {
@Override
protected Boolean featureValueOf(Fruit f) {
return fruit.isSweet();
}
};
}
!
34
Меркушев Кирилл
Инженер по автоматизации
тестирования

lanwen@yandex.ru

twitter.com/delnariel
http://bit.ly/yamatcher

Weitere ähnliche Inhalte

Mehr von Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

Mehr von Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Кирилл Меркушев: Матчеры: маленький шаг для вас и огромный для ваших автотестов

  • 1. Матчеры   маленький  шаг  для  вас  и  огромный   для  ваших  автотестов   Меркушев Кирилл Инженер по автоматизации тестирования Тестовая среда, СПб, 30 ноября 2013
  • 6. Дорога  к  матчерам     Hamcrest   Готовые  инструменты   Рубрика:  сделай  сам  
  • 7. Дорога  к  матчерам   //assertTrue(); //assertFalse(); //assertEquals(); assertTrue( "Fruit should be sweet - expected TRUE", fruit.isSweet());
  • 8. Дорога  к  матчерам   //проверки log.info("Checking local"); FileAssert.assertFileNotExists(f1); FileAssert.assertFileExists(new_fl); FileAssert.assertIsDirectory(new_fl); FileAssert.assertFileExists(new File(new_fl.getAbsolutePath() + File.separator + "innerFile")); // ... 8
  • 9. Дорога  к  матчерам   //проверки log.info("Checking local"); FileAssert.assertFileNotExists(f1); FileAssert.assertFileExists(new_fl); FileAssert.assertIsDirectory(new_fl); FileAssert.assertFileExists(new File(new_fl.getAbsolutePath() + File.separator + "innerFile")); DavAssert.assertResourceExists(turkishletters); DavAssert.assertResourceExists("İSTİKLAL MARŞI"); DavAssert.assertResourceExists("ı.txt"); DavAssert.assertResourceExists("i.txt"); DavAssert.assertResourceExists("ı"); // ... 9
  • 10. Дорога  к  матчерам   //проверки log.info("Checking local"); FileAssert.assertFileNotExists(f1); FileAssert.assertFileExists(new_fl); FileAssert.assertIsDirectory(new_fl); FileAssert.assertFileExists(new File(new_fl.getAbsolutePath() + File.separator + "innerFile")); FileAssert.assertIsFile(new File(new_fl.getAbsolutePath() + File.separator + "innerFile")); FileAssert.assertFileContent(new File(new_fl.getAbsolutePath() + File.separator + "innerFile"), "qwerty".getBytes()); FileAssert.assertFileExists(new File(new_fl.getAbsolutePath() + File.separator + "innerDir")); FileAssert.assertIsDirectory(new File(new_fl.getAbsolutePath() + File.separator + "innerDir")); DavAssert.assertResourceExists(turkishletters); DavAssert.assertResourceExists("İSTİKLAL MARŞI"); DavAssert.assertResourceExists("ı.txt"); DavAssert.assertResourceExists("i.txt"); DavAssert.assertResourceExists("ı"); DavAssert.assertResourceExists("i"); DavAssert.assertFileContent(turkishletters, content); DavAssert.assertFileContent("İSTİKLAL MARŞI", content); DavAssert.assertFileContent("ı.txt", content); DavAssert.assertFileContent("i.txt", content); 10
  • 11. Дорога  к  матчерам   @Test public void itShouldWork() { checkThatAllWorks(); }
  • 12. Дорога  к  матчерам   сheckThatAllWorks(); //проверки log.info("Checking local"); FileAssert.assertFileNotExists(f1); FileAssert.assertFileExists(new_fl); FileAssert.assertIsDirectory(new_fl); FileAssert.assertFileExists(new File(new_fl.getAbsolutePath() + File.separator + "innerFile")); FileAssert.assertIsFile(new File(new_fl.getAbsolutePath() + File.separator + "innerFile")); FileAssert.assertFileContent(new File(new_fl.getAbsolutePath() + File.separator + "innerFile"), "qwerty".getBytes()); FileAssert.assertFileExists(new File(new_fl.getAbsolutePath() + File.separator + "innerDir")); FileAssert.assertIsDirectory(new File(new_fl.getAbsolutePath() + File.separator + "innerDir")); DavAssert.assertResourceExists(turkishletters); DavAssert.assertResourceExists("İSTİKLAL MARŞI"); DavAssert.assertResourceExists("ı.txt"); DavAssert.assertResourceExists("i.txt"); DavAssert.assertResourceExists("ı"); DavAssert.assertResourceExists("i"); 12
  • 13. Дорога  к  матчерам   @Test //1 //проверки log.info("Checking local"); FileAssert.assertFileNotExists(f1); FileAssert.assertFileExists(new_fl); FileAssert.assertIsDirectory(new_fl); FileAssert.assertFileExists(new File(new_fl.getAbsolutePath() + File.separator + "innerFile")); FileAssert.assertIsFile(new File(new_fl.getAbsolutePath() + File.separator + "innerFile")); FileAssert.assertFileContent(new File(new_fl.getAbsolutePath() + File.separator + "innerFile"), "qwerty".getBytes()); FileAssert.assertFileExists(new File(new_fl.getAbsolutePath() + File.separator + "innerDir")); FileAssert.assertIsDirectory(new File(new_fl.getAbsolutePath() + File.separator + "innerDir")); DavAssert.assertResourceExists(turkishletters); DavAssert.assertResourceExists("İSTİKLAL MARŞI"); @Test //2 FileAssert.assertFileContent(new File(new_fl.getAbsolutePath() + File.separator + "innerFile"), "qwerty".getBytes()); FileAssert.assertFileExists(new File(new_fl.getAbsolutePath() + File.separator + "innerDir")); +   DavAssert.assertResourceExists(turkishletters); DavAssert.assertResourceExists("İSTİKLAL MARŞI");
  • 14. Дорога  к  матчерам   @Test public void itShouldWorkToday1() { checkThatAllWorksToday1(); } @Test public void itShouldWorkToday2() { checkThatAllWorksToday2(); } @Test public void itShouldWorkToday3() { checkThatAllWorksToday3(); checkThatAllWorksToday4(); } //проверки log.info("Checking local"); FileAssert.assertFileNotExists( f1); FileAssert.assertFileExists(new _fl); FileAssert.assertIsDirectory(ne w_fl); FileAssert.assertFileExists(new File(new_fl.getAbsolutePath() + File.separator + "innerFile")); FileAssert.assertIsFile(new File(new_fl.getAbsolutePath() + File.separator + "innerFile")); FileAssert.assertFileContent(ne w File(new_fl.getAbsolutePath() + File.separator + //проверки log.info("Checking local"); FileAssert.assertFileNotExists( f1); FileAssert.assertFileExists(new _fl); FileAssert.assertIsDirectory(ne w_fl); FileAssert.assertFileExists(new File(new_fl.getAbsolutePath() + File.separator + "innerFile")); FileAssert.assertIsFile(new File(new_fl.getAbsolutePath() + File.separator + "innerFile")); FileAssert.assertFileContent(ne w File(new_fl.getAbsolutePath() + File.separator + //проверки log.info("Checking local"); FileAssert.assertFileNotExists( f1); FileAssert.assertFileExists(new _fl); FileAssert.assertIsDirectory(ne w_fl); FileAssert.assertFileExists(new File(new_fl.getAbsolutePath() + File.separator + "innerFile")); FileAssert.assertIsFile(new File(new_fl.getAbsolutePath() + File.separator + "innerFile")); FileAssert.assertFileContent(ne w File(new_fl.getAbsolutePath() + File.separator +
  • 17. Дорога  к  матчерам   {Проверка}   {Проверка}   … {Проверка}   17 AND,    OR,    NOT  
  • 18. Дорога  к  матчерам   assertTrue( "Fruit should be sweet - expected TRUE", fruit.isSweet() ); {Описание,  Логика}   Матчер  
  • 19. Дорога  к  матчерам   assertThat   JUnit assumeThat   JUnit … select   19 Lambdaj Объект   Матчер  
  • 20. Дорога  к  матчерам     Hamcrest   Готовые  инструменты   Рубрика:  сделай  сам  
  • 22. Hamcrest   assertTrue("Fruit should be sweet", fruit.isSweet()); assertEquals("Fruit should be round", Shape.ROUND, fruit.getShape()); assertEquals("Fruit should be orange", Color.ORANGE, fruit.getColor()); assertThat( fruit, both(round()).and(sweet()).and(hasColor(Color.ORANGE)) );
  • 23. Hamcrest   assertTrue("Fruit1 should be sweet", fruit1.isSweet()); assertTrue("Fruit2 should be sweet", fruit2.isSweet()); assertTrue("Fruit3 should be sweet", fruit3.isSweet()); assertThat(asList(fruit1, fruit2, fruit3), everyItem(is(sweet()))); // или assertThat(asList(fruit1, fruit2, fruit3), hasItem(not(sweet())));
  • 24. Дорога  к  матчерам     Hamcrest   Готовые  инструменты   Рубрика:  сделай  сам  
  • 25. Готовые  инструменты   Yandex-­‐qatools/matchers-­‐java   http://bit.ly/yamatcher Derari/cthul/Regexp Github, … … python, c#, php 25
  • 26. Готовые  инструменты   Yandex-­‐qatools/matchers-­‐java   Webdriver-­‐matchers   Collec^on-­‐matchers   Matcher-­‐decorators     26 http://bit.ly/yamatcher
  • 27. Webdriver-­‐matchers   Href   Name   Afr   27 Type   Ac^on   Placeholder   Size   Classname   Target   Alt   Id   Title   Value   Text   Src   http://bit.ly/yamatcher
  • 28. CollecAon-­‐matchers   List<String> actual = asList("1", "2", "3"); List<String> expected = asList("3", "2", "1"); assertThat(actual, hasSameItemsAsList(expected) .sameSorted()); Expected: Lists contains same items and sorted equally but: (Not sorted correctly) [<2>]: -> "Expected 3 on position [0], but was - 1" -> "Expected 1 on position [2], but was - 3" http://bit.ly/yamatcher
  • 29. Matcher-­‐decorators   // ожидание assertThat(element, should(exists()) .whileWaitingUntil(timeoutHasExpired(SECONDS.toMillis(5)))); // преддействие assertThat(element, should(exists()).after(pageRefresh(driver))); // предпроверка assertThat(element, should(hasText("Text")).inCase(element, exists())); http://bit.ly/yamatcher
  • 31. Дорога  к  матчерам     Hamcrest   Готовые  инструменты   Рубрика:  сделай  сам  
  • 32. Рубрика: сделай сам TypeSafeMatcher<T>   FeatureMatcher<U,V>   TypeSafeDiagnosingMatcher<T>   32
  • 33. TypeSafeMatcher<T> // логика проверки public boolean matchesSafely(T actual)! 
 ! // описание ожидаемого значения public void describeTo(Description description) 
 ! // описание полученного значения protected void describeMismatchSafely(T item, Description mismatchDescription) 
 ! 33
  • 34. FeatureMatcher<U,V> public static Matcher<Fruit> sweet() { return new FeatureMatcher<Fruit, Boolean>( is(true), "fruit should be sweet", "sweet -" ) { @Override protected Boolean featureValueOf(Fruit f) { return fruit.isSweet(); } }; } ! 34
  • 35. Меркушев Кирилл Инженер по автоматизации тестирования lanwen@yandex.ru twitter.com/delnariel http://bit.ly/yamatcher