Your SlideShare is downloading. ×
Кирилл Меркушев — Матчеры: польза использования и легкость применения в ваших автотестах
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

923

Published on

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

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

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
923
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Меркушев Кирилл Инженер по автоматизации тестирования Я.Субботник, Минск, 31 августа Матчеры   польза использования и легкость применения в ваших автотестах  
  • 2. 2 Проблемы   «Спагетти»   тесты   Дублирование   кода   Сложности  оценки   результата  
  • 3. Дорога  к  матчерам     Hamcrest   Готовые  инструменты   Рубрика:  сделай  сам  
  • 4. Дорога  к  матчерам   //assertTrue(); //assertFalse(); //assertEquals(); assertTrue( "Fruit should be sweet - expected TRUE", fruit.isSweet());
  • 5. 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. 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. 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);
  • 8. @Test public void itShouldWork() { checkThatAllWorks(); } Дорога  к  матчерам  
  • 9. 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");
  • 10. @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");
  • 11. @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. 12 Дорога  к  матчерам  
  • 13. 13 Дорога  к  матчерам  
  • 14. 14 Дорога  к  матчерам   {Проверка}   {Проверка}   {Проверка}   … AND,    OR,    NOT  
  • 15. assertTrue( "Fruit should be sweet - expected TRUE", fruit.isSweet() ); Дорога  к  матчерам   Матчер   {Описание,  Логика}  
  • 16. 16 Дорога  к  матчерам   assertThat   JUnit Объект   Матчер   select   Lambdaj assumeThat   JUnit …
  • 17. Hamcrest   Готовые  инструменты   Рубрика:  сделай  сам   Дорога  к  матчерам    
  • 18. Hamcrest   <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-all</artifactId> <version>1.3</version> </dependency>
  • 19. 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)) );
  • 20. 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())));
  • 21. Готовые  инструменты   Рубрика:  сделай  сам   Дорога  к  матчерам     Hamcrest  
  • 22. 22 Готовые  инструменты   http://bit.ly/yamatcher Yandex-­‐qatools/matchers-­‐java   Derari/cthul/Regexp Github, … … python, c#, php
  • 23. 23 Готовые  инструменты   Yandex-­‐qatools/matchers-­‐java   Webdriver-­‐matchers   Collec^on-­‐matchers   Matcher-­‐decorators     http://bit.ly/yamatcher
  • 24. 24 Href   Name   Size   Afr   Alt   Ac^on   Title   Id   Type   Src  Value   Placeholder   Classname   Target   Text   Webdriver-­‐matchers   http://bit.ly/yamatcher
  • 25. 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
  • 26. // преддействие 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
  • 27. assertThat(mailsList, should(hasMailWithSubject("Subject")) .after(pageRefresh(driver)) .whileWaitingUntil(timeoutHasExpired() ); Matcher-­‐decorators   http://bit.ly/yamatcher
  • 28. Рубрика:  сделай  сам   Дорога  к  матчерам     Hamcrest   Готовые  инструменты  
  • 29. 29 Рубрика: сделай сам TypeSafeMatcher<T>   FeatureMatcher<U,V>   TypeSafeDiagnosingMatcher<T>  
  • 30. 30 // логика проверки public boolean matchesSafely(T actual)! 
 ! // описание ожидаемого значения public void describeTo(Description description) 
 ! // описание полученного значения protected void describeMismatchSafely(T item, Description mismatchDescription) 
 ! TypeSafeMatcher<T>
  • 31. 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>
  • 32. Меркушев Кирилл Инженер по автоматизации тестирования lanwen@yandex.ru twitter.com/delnariel http://bit.ly/yamatcher

×