• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Кирилл Меркушев — Матчеры: польза использования и легкость применения в ваших автотестах
 

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

on

  • 988 views

Сама по себе технология матчеров не нова: в нынешнем виде она была залита в репозиторий в июле 2012 года, а ...

Сама по себе технология матчеров не нова: в нынешнем виде она была залита в репозиторий в июле 2012 года, а появилась и того раньше. Но, несмотря на это, многие о ней до сих пор не слышали или почему-то избегают. В докладе рассказано о преимуществах этой технологии и представлена наша библиотека матчеров.

Statistics

Views

Total Views
988
Views on SlideShare
324
Embed Views
664

Actions

Likes
0
Downloads
0
Comments
0

4 Embeds 664

http://tech.yandex.ru 613
http://events.yandex.ru 46
https://tech.yandex.ru 4
http://news.google.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Кирилл Меркушев — Матчеры: польза использования и легкость применения в ваших автотестах Кирилл Меркушев — Матчеры: польза использования и легкость применения в ваших автотестах Presentation Transcript

    • Меркушев Кирилл Инженер по автоматизации тестирования Я.Субботник, Минск, 31 августа Матчеры   польза использования и легкость применения в ваших автотестах  
    • 2 Проблемы   «Спагетти»   тесты   Дублирование   кода   Сложности  оценки   результата  
    • Дорога  к  матчерам     Hamcrest   Готовые  инструменты   Рубрика:  сделай  сам  
    • Дорога  к  матчерам   //assertTrue(); //assertFalse(); //assertEquals(); assertTrue( "Fruit should be sweet - expected TRUE", fruit.isSweet());
    • 5 Дорога  к  матчерам   //проверки 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")); // ...
    • 6 Дорога  к  матчерам   //проверки 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("ı"); // ...
    • 7 Дорога  к  матчерам   //проверки 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);
    • @Test public void itShouldWork() { checkThatAllWorks(); } Дорога  к  матчерам  
    • 9 Дорога  к  матчерам   с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");
    • @Test //1 @Test //2 Дорога  к  матчерам   //проверки 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"); +   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 +
    • 12 Дорога  к  матчерам  
    • 13 Дорога  к  матчерам  
    • 14 Дорога  к  матчерам   {Проверка}   {Проверка}   {Проверка}   … AND,    OR,    NOT  
    • assertTrue( "Fruit should be sweet - expected TRUE", fruit.isSweet() ); Дорога  к  матчерам   Матчер   {Описание,  Логика}  
    • 16 Дорога  к  матчерам   assertThat   JUnit Объект   Матчер   select   Lambdaj assumeThat   JUnit …
    • Hamcrest   Готовые  инструменты   Рубрика:  сделай  сам   Дорога  к  матчерам    
    • Hamcrest   <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-all</artifactId> <version>1.3</version> </dependency>
    • 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()); Hamcrest   assertThat( fruit, both(round()).and(sweet()).and(hasColor(Color.ORANGE)) );
    • assertTrue("Fruit1 should be sweet", fruit1.isSweet()); assertTrue("Fruit2 should be sweet", fruit2.isSweet()); assertTrue("Fruit3 should be sweet", fruit3.isSweet()); Hamcrest   assertThat(asList(fruit1, fruit2, fruit3), everyItem(is(sweet()))); // или assertThat(asList(fruit1, fruit2, fruit3), hasItem(not(sweet())));
    • Готовые  инструменты   Рубрика:  сделай  сам   Дорога  к  матчерам     Hamcrest  
    • 22 Готовые  инструменты   http://bit.ly/yamatcher Yandex-­‐qatools/matchers-­‐java   Derari/cthul/Regexp Github, … … python, c#, php
    • 23 Готовые  инструменты   Yandex-­‐qatools/matchers-­‐java   Webdriver-­‐matchers   Collec^on-­‐matchers   Matcher-­‐decorators     http://bit.ly/yamatcher
    • 24 Href   Name   Size   Afr   Alt   Ac^on   Title   Id   Type   Src  Value   Placeholder   Classname   Target   Text   Webdriver-­‐matchers   http://bit.ly/yamatcher
    • 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" List<String> actual = asList("1", "2", "3"); List<String> expected = asList("3", "2", "1"); assertThat(actual, hasSameItemsAsList(expected) .sameSorted()); CollecAon-­‐matchers   http://bit.ly/yamatcher
    • // преддействие assertThat(element, should(exists()).after(pageRefresh(driver))); // предпроверка assertThat(element, should(hasText("Text")).inCase(element, exists())); // ожидание assertThat(element, should(exists()) .whileWaitingUntil(timeoutHasExpired(SECONDS.toMillis(5)))); Matcher-­‐decorators   http://bit.ly/yamatcher
    • assertThat(mailsList, should(hasMailWithSubject("Subject")) .after(pageRefresh(driver)) .whileWaitingUntil(timeoutHasExpired() ); Matcher-­‐decorators   http://bit.ly/yamatcher
    • Рубрика:  сделай  сам   Дорога  к  матчерам     Hamcrest   Готовые  инструменты  
    • 29 Рубрика: сделай сам TypeSafeMatcher<T>   FeatureMatcher<U,V>   TypeSafeDiagnosingMatcher<T>  
    • 30 // логика проверки public boolean matchesSafely(T actual)! 
 ! // описание ожидаемого значения public void describeTo(Description description) 
 ! // описание полученного значения protected void describeMismatchSafely(T item, Description mismatchDescription) 
 ! TypeSafeMatcher<T>
    • 31 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(); } }; } ! FeatureMatcher<U,V>
    • Меркушев Кирилл Инженер по автоматизации тестирования lanwen@yandex.ru twitter.com/delnariel http://bit.ly/yamatcher