Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Оценка качества автотестов

34,324 views

Published on

Доклад Алексея Баранцева на конференции SQA Days-18, 27-28 ноября 2015 г., Москва www.sqadays.com

Published in: Education
  • Be the first to comment

Оценка качества автотестов

  1. 1. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Характеристики качества автотестов © 2015 Алексей Баранцев Software-Testing.Ru
  2. 2. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Кто здесь? Алексей Баранцев Software-Testing.Ru barancev@gmail.com http://software-testing.ru/ http://selenium2.ru/
  3. 3. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Как оценить качество?
  4. 4. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Серия стандаров 250NN
  5. 5. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Серия стандартов 25000 • ГОСТ Р ИСО/МЭК 25010 – модель качества продукта – модель качества при использовании • ГОСТ Р ИСО/МЭК 25012 – модель качества данных
  6. 6. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Цели моделей качества
  7. 7. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev ГОСТ Р ИСО/МЭК 25010
  8. 8. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Функциональная пригодность • Функциональная полнота • Функциональная корректность • Функциональная целесообразность
  9. 9. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Целесообразность
  10. 10. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Функциональная пригодность • Функциональная полнота • Функциональная корректность • Функциональная целесообразность
  11. 11. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Пример №1 @Rule public TemporaryFolder tempDir = new TemporaryFolder(); @Test public void canCreateFileWithValidName() throws IOException { String validName = "test.txt"; File f = new File(tempDir.getRoot(), validName); f.createNewFile(); }
  12. 12. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Пример №2 @Rule public TemporaryFolder tempDir = new TemporaryFolder(); @Test public void canCreateFileWithValidName() throws IOException { String validName = "test.txt"; File f = new File(tempDir.getRoot(), validName); Assert.assertTrue(f.createNewFile()); }
  13. 13. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Пример №3 @Rule public TemporaryFolder tempDir = new TemporaryFolder(); @Test public void canCreateFileWithValidName() throws IOException { String validName = "test.txt"; File f = new File(tempDir.getRoot(), validName); assertTrue(f.createNewFile()); assertTrue(f.exists()); }
  14. 14. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Пример №4 @Rule public TemporaryFolder tempDir = new TemporaryFolder(); @Test public void canCreateFileWithValidName() throws IOException { String validName = "test.txt"; File f = new File(tempDir.getRoot(), validName); assertTrue(f.createNewFile()); assertTrue(f.exists()); assertEquals(1, tempDir.getRoot().listFiles().length); }
  15. 15. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Функциональная пригодность • Функциональная полнота • Функциональная корректность • Функциональная целесообразность
  16. 16. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Уровень производительности • Временные характеристики • Использование ресурсов • Потенциальные возможности
  17. 17. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Параллельность
  18. 18. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Шаблон проектирования «Сон» http://www.slideshare.net/orgeirIngvarsson/ui-automation-patterns-sleep
  19. 19. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Уровень производительности • Временные характеристики • Использование ресурсов • Потенциальные возможности
  20. 20. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Та самая пирамида
  21. 21. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Совместимость • Сосуществование • Интероперабельность
  22. 22. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Изоляция тестов @ClassRule public static TemporaryFolder tempDir = new TemporaryFolder(); @Test public void canCreateFileWithValidName1() throws IOException { String validName = "test.txt"; File f = new File(tempDir.getRoot(), validName); assertTrue(f.createNewFile()); } @Test public void canCreateFileWithValidName2() throws IOException { String validName = "test.txt"; File f = new File(tempDir.getRoot(), validName); assertTrue(f.createNewFile()); }
  23. 23. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Oops… 
  24. 24. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Совместимость • Сосуществование • Интероперабельность
  25. 25. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Failed to start up socket within 45000 ms OpenQA.Selenium.WebDriverException: Failed to start up socket within 45000 ms Result StackTrace: at OpenQA.Selenium.Firefox.Internal.ExtensionConnection.ConnectToBrowser(TimeSpan timeToWait) at OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Start() at OpenQA.Selenium.Firefox.FirefoxDriver.StartClient() at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities) at OpenQA.Selenium.Firefox.FirefoxDriver..ctor(FirefoxBinary binary, FirefoxProfile profile) at OpenQA.Selenium.Firefox.FirefoxDriver..ctor()
  26. 26. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Взаимодействие с баг-трекером @Test @Bug(12345) public void testSomething() { Assert.assertTrue(someOperationWithBug()); }
  27. 27. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev TestNG и MantisBT public class AssumeBugIsFixed implements IAnnotationTransformer { public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) { Bug bugAnnotation = testMethod.getAnnotation(Bug.class); if (bugAnnotation != null) { try { MantisConnectLocator mcl = new MantisConnectLocator(); MantisConnectPortType mcp = mcl.getMantisConnectPort( new URL("http://localhost/mantisbt-1.2.17/api/soap/mantisconnect.php")); IssueData issue = mcp.mc_issue_get("administrator", "root", BigInteger.valueOf(bugAnnotation.value())); String status = issue.getStatus().getName(); if (! ("closed".equals(status) || "resolved".equals(status))) { annotation.setEnabled(false); } } catch (Exception e) { e.printStackTrace(); } } } }
  28. 28. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Удобство использования • Определимость пригодности • Изучаемость • Управляемость • Защищенность от ошибки пользователя • Эстетика пользовательского интерфейса • Доступность
  29. 29. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Пользовательский интерфейс
  30. 30. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Доступность
  31. 31. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Тоже доступность
  32. 32. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Удобство использования • Определимость пригодности • Изучаемость • Управляемость • Защищенность от ошибки пользователя • Эстетика пользовательского интерфейса • Доступность
  33. 33. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Надёжность • Завершённость • Готовность • Отказоустойчивость • Восстанавливаемость
  34. 34. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Позаботься о себе сам def test_delete_some_group(app, db): if len(db.get_group_list()) == 0: app.group.create(Group(name="test")) group = random.choice(db.get_group_list()) app.group.delete_group_by_id(group.id)
  35. 35. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Эффект домино
  36. 36. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Защищённость • Конфиденциальность • Целостность • Неподдельность • Отслеживаемость • Подлинность
  37. 37. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Переносимость • Адаптируемость • Устанавливаемость • Взаимозаменяемость
  38. 38. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Пример №6 @Rule public TemporaryFolder tempDir = new TemporaryFolder(new File("C:/temp")); @Test public void canCreateFileWithValidName() throws IOException { String validName = "test.txt"; File f = new File(tempDir.getRoot(), validName); assertTrue(f.createNewFile()); }
  39. 39. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Пример №7 @Test public void deleteGroup() { driver.get(baseUrl + "/addressbook/group.php"); driver.findElement( By.xpath("//input[@value='42']")).click(); driver.findElement(By.name("delete")).click(); }
  40. 40. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Сопровождаемость • Модульность • Возможность многократного использования • Анализируемость • Модифицируемость • Тестируемость
  41. 41. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Читайте хорошие книжки
  42. 42. Алексей Баранцев Software-Testing.Ru Selenium2.Ru facebook.com/groups/selenium.ru/ barancev@gmail.com skype:barancev Удачной автоматизации! Алексей Баранцев Software-Testing.Ru barancev@gmail.com http://software-testing.ru/ http://selenium2.ru/

×