Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Антипаттерны и запахи в
автоматизации тестирования
QAFest - Kiev - 2017
О себе
Follow me on Fb
https://www.facebook.com/gr
oups/1180099188730673/
Иван Пашко
● Scrum Master
● QA Automation Engine...
Антипаттерны и запахи тестов
◎Личный опыт
◎Собеседования!
◎Форумы  Соц. Сети
◎Конференции  митапы
Антипаттерны
Антипаттерны процесса автоматизации
тестирования
Что такое анти-паттерн?
Анти-паттерн - это распространенный
подход к решению класса часто
встречающихся проблем, являющийс...
Причина возникновения антипаттернов
Отсутствие:
◎ЖЕЛАНИЯ
◎ВРЕМЕНИ
◎ЗНАНИЯ
*амбиции?..
#1 - Изолированная Автоматизация
◎ Изоляция от процесса  тест-кейзов 
тест-плана  регрессии
#2 - Ручная Автоматизация
Выполняется вручную:
◎ Запуск
◎ Проверка состояния  репорт
◎ Настройка тестового окружения
#3 - “Коварная” автоматизация
Автоматизация полностью вытесняет
ручное тестирование
#4 - Автоматизация на стероидах
◎“Сначала был фреймворк - сложный
фреймворк”
◎Автоматизация - инструмент:
Выбирайте и применяйте с умом
◎Подружите автоматизацию с
процессом тестирования!
Что же делат...
Запахи тестов
Что такое запах теста?
Тест (код) с запашком - термин,
обозначающий признаки (запахи)
проблем в системекодесценарие.
Ключе...
#1 Неясный тест (Obscure test)
Тест, который трудно понять с первого
взгляда.
#2 Мучительный тест (Eager test)
public void MakeVisaPayment()
{
// Create customer
var customer = new Customer();
Assert....
public void CheckVisaGatewayConfiguration()
{
// Create customer
var customer = new Customer();
Assert.IsNotNull(customer)...
#3 Однострочный тест (Mystery Guest)
[TestMethod]
public void CheckVisaPayment()
{
DoPaymentTest("VISA");
}
[TestMethod]
p...
#4 Тест с ветвлениями
[TestMethod]
public void CheckPaymentChargeback()
{
var ppid = DoPaymentTest("VISA");
if (string.IsN...
Хороший тест - это баланс кода и
документирования
// Arrange
var result = new DepositFlow()
.ByMethod("VISA")
.WithCreditC...
#5 Замусоривание
Все что не относится к тесту или его
интерпретации - мусор
#5.1 Дубликация-дублирование-
повторение
driver.FindElement(By.Name("q")).SendKeys( ...
driver.FindElement(By.Name("btnK")...
#5.2 Комментарии - плохо
// Строка для поиска
const string tmp = "I want to join QAFest";
// Инициализация драйвера, не за...
#5.2 Комментарии - хорошо
// Arrage
const string SEARCH_STRING = "I want to join QAFest2017";
// Act
var googlePage = new ...
#6 Код про запас, на будущее
Пишем, и оставляем неиспользуемый код,
авось когда-то пригодится
#7 Чрезмерная инициализация
Использование сложных флоу / вызовы
АПИ для инициализации состояния
#8 Общая инициализация
Приводит к зависимым, хрупким и
фантомные тестам
#9 Запахи в тестовых проверках
Основа теста - его проверки
#9.1 Множественные проверки
//Проверяем Int32
Assert.IsTrue(Int32.TryParse("1", out n));
Assert.AreEqual(1, Int32.Parse("1...
#9.2 Запутанная проверка
[TestMethod]
public void TestInt32Parser()
…
Assert.IsTrue(Int32.TryParse("1", out n));
Assert.Ar...
#9.3 Условная проверка
// Assert
if (searchResults.Count > 0)
{
Assert.AreEqual("http://qafest.com/", searchResults.First(...
#9.4 Молчаливая проверка
Assert.IsNotNull(user);
Assert.IsTrue(IsShown);
Assert.AreEqual(1, count);
Assert.IsNotNull(user,...
“
Good test
is like a
good joke
- it needs no explanation
Мои характеристики хорошего теста:
◎Читаемый (Readability)
◎Поддерживаемый (Maintainability)
◎Полезный (Usability)
◎Гибкий...
СПАСИБО ЗА ВНИМАНИЕ
Вопросы?
Полезности
Join me in FB- Testing Jam
Nächste SlideShare
Wird geladen in …5
×

QA Fest 2017. Иван Пашко. Антипаттерны и запахи в автоматизации тестирования

417 Aufrufe

Veröffentlicht am

Знакомо ощущение, когда смотрите на код, тест-кейc или на процесс - "здесь что-то не так"? Значит вы уловили этот запах - "test smells". К сожалению, не всегда понятно - от чего же он, и даже больше - что с ним делать. Непонимание, и как следствие, неверное применение хороших практик, собственные адаптации и приводят ошибкам, сложностям и еще большему усугублению проблемы.

В этом докладе, я поделюсь с вами своими мыслями и опытом. Как выглядят популярные проблемы, антипаттерны и запахи. Как их различить и что сделать, чтобы избавиться от них.

Veröffentlicht in: Bildung
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

QA Fest 2017. Иван Пашко. Антипаттерны и запахи в автоматизации тестирования

  1. 1. Антипаттерны и запахи в автоматизации тестирования QAFest - Kiev - 2017
  2. 2. О себе Follow me on Fb https://www.facebook.com/gr oups/1180099188730673/ Иван Пашко ● Scrum Master ● QA Automation Engineer ● 9+ лет в ИТ ● 0+ лет счастливый отец
  3. 3. Антипаттерны и запахи тестов ◎Личный опыт ◎Собеседования! ◎Форумы Соц. Сети ◎Конференции митапы
  4. 4. Антипаттерны Антипаттерны процесса автоматизации тестирования
  5. 5. Что такое анти-паттерн? Анти-паттерн - это распространенный подход к решению класса часто встречающихся проблем, являющийся неэффективным, рискованным или непродуктивным.
  6. 6. Причина возникновения антипаттернов Отсутствие: ◎ЖЕЛАНИЯ ◎ВРЕМЕНИ ◎ЗНАНИЯ *амбиции?..
  7. 7. #1 - Изолированная Автоматизация ◎ Изоляция от процесса тест-кейзов тест-плана регрессии
  8. 8. #2 - Ручная Автоматизация Выполняется вручную: ◎ Запуск ◎ Проверка состояния репорт ◎ Настройка тестового окружения
  9. 9. #3 - “Коварная” автоматизация Автоматизация полностью вытесняет ручное тестирование
  10. 10. #4 - Автоматизация на стероидах ◎“Сначала был фреймворк - сложный фреймворк”
  11. 11. ◎Автоматизация - инструмент: Выбирайте и применяйте с умом ◎Подружите автоматизацию с процессом тестирования! Что же делать?
  12. 12. Запахи тестов
  13. 13. Что такое запах теста? Тест (код) с запашком - термин, обозначающий признаки (запахи) проблем в системекодесценарие. Ключевые признаки необходимости рефакторинга.
  14. 14. #1 Неясный тест (Obscure test) Тест, который трудно понять с первого взгляда.
  15. 15. #2 Мучительный тест (Eager test) public void MakeVisaPayment() { // Create customer var customer = new Customer(); Assert.IsNotNull(customer); // Configure method var visaMethod = new PaymentMethod("VISA") { Limits = new Limits(5, 1000, "USD"); SetConfigurationGateway = "https://payment.visa.com"; }; Assert.IsTrue(visaMethod.GatewayPingIsOk()); // Link customer to method customer.AssignPaymentMethod(visaMethod); // MakePayment var result = customer.ProcessPayment( 100, "USD", "VISA"); //Check status Assert.AreEqual("OK", result.Status); } Вроде как проверка возможности платежа визой Зачем тогда эти проверки?
  16. 16. public void CheckVisaGatewayConfiguration() { // Create customer var customer = new Customer(); Assert.IsNotNull(customer); // Configure method var visaMethod = new PaymentMethod("VISA") { Limits = new Limits(5, 1000, "USD"); SetConfigurationGateway = "https://payment.visa.com"; }; Assert.IsTrue(visaMethod.GatewayPingIsOk()); // Link customer to method customer.AssignPaymentMethod(visaMethod); // MakePayment var result = customer.ProcessPayment( 100, "USD", "VISA"); //Check status Assert.AreEqual("OK", result.Status); } #2 Мучительный тест (Eager test) А зачем тогда эта проверка?
  17. 17. #3 Однострочный тест (Mystery Guest) [TestMethod] public void CheckVisaPayment() { DoPaymentTest("VISA"); } [TestMethod] public void CheckMasterCardPayment() { DoPaymentTest("MasterCard"); }
  18. 18. #4 Тест с ветвлениями [TestMethod] public void CheckPaymentChargeback() { var ppid = DoPaymentTest("VISA"); if (string.IsNullOrEmpty(ppid)) { MakePaymentRefund("VISA"); } }
  19. 19. Хороший тест - это баланс кода и документирования // Arrange var result = new DepositFlow() .ByMethod("VISA") .WithCreditCard("4111 1111 1111 1111") .WithAmount(100, "UAH") // Act .Submit(); // Assert Assert.AreEqual("OK", result.Status);
  20. 20. #5 Замусоривание Все что не относится к тесту или его интерпретации - мусор
  21. 21. #5.1 Дубликация-дублирование- повторение driver.FindElement(By.Name("q")).SendKeys( ... driver.FindElement(By.Name("btnK")).Click(); driver.FindElement(By.XPath("//div[@class= ... Дубликация не только в поведении.
  22. 22. #5.2 Комментарии - плохо // Строка для поиска const string tmp = "I want to join QAFest"; // Инициализация драйвера, не забудьте потом закрыть сессию var driver = new ChromeDriver(); // Переход на сайт-поисковик driver.Navigate().GoToUrl(new Uri("https://www.google.com.ua")); // Ввод в строку поиска driver.FindElement(OpenQA.Selenium.By.Name("q")).SendKeys( … // Нажатие кнопки поиска driver.FindElement(OpenQA.Selenium.By.Name("btnK")).Click();
  23. 23. #5.2 Комментарии - хорошо // Arrage const string SEARCH_STRING = "I want to join QAFest2017"; // Act var googlePage = new SearchPage() .WithUrl("https://www.google.com.ua"); var firstResult = googlePage.DoSearch(SEARCH_STRING).First(); // Assert Assert.AreEqual("qafest.com", firstResult);
  24. 24. #6 Код про запас, на будущее Пишем, и оставляем неиспользуемый код, авось когда-то пригодится
  25. 25. #7 Чрезмерная инициализация Использование сложных флоу / вызовы АПИ для инициализации состояния
  26. 26. #8 Общая инициализация Приводит к зависимым, хрупким и фантомные тестам
  27. 27. #9 Запахи в тестовых проверках Основа теста - его проверки
  28. 28. #9.1 Множественные проверки //Проверяем Int32 Assert.IsTrue(Int32.TryParse("1", out n)); Assert.AreEqual(1, Int32.Parse("1")); Assert.IsTrue(Int32.TryParse("-1", out n)); Assert.AreEqual(-1, Int32.Parse("-1")); .... //Мульти-проверки NUnit Assert.Multiple(() => { Assert.IsTrue(Int32.TryParse("-1", out n)); Assert.AreEqual(-1, Int32.Parse("-1")); }); А если мы упадем тут. Надо заново запускать тест...
  29. 29. #9.2 Запутанная проверка [TestMethod] public void TestInt32Parser() … Assert.IsTrue(Int32.TryParse("1", out n)); Assert.AreEqual(1, Int32.Parse("1")); //Граничные значения Assert.IsTrue(Int32.TryParse("2147483648", out n)); Assert.AreEqual(2147483648, Int32.Parse("2147483648")); //Переполнение буфера Assert.IsFalse(Int32.TryParse("2147483649", out n)); Assert.AreEqual(-2147483648, Int32.MaxValue + 1); Интересно, что же проверяет этот тест..
  30. 30. #9.3 Условная проверка // Assert if (searchResults.Count > 0) { Assert.AreEqual("http://qafest.com/", searchResults.First( … } else { var notFoundElm = driver.FindElement(OpenQA.Selenium.By.Id( … Assert.AreEqual("По запросу ничего не найдено. ", notFoundE … }
  31. 31. #9.4 Молчаливая проверка Assert.IsNotNull(user); Assert.IsTrue(IsShown); Assert.AreEqual(1, count); Assert.IsNotNull(user, "User doesn’t exist");
  32. 32. “ Good test is like a good joke - it needs no explanation
  33. 33. Мои характеристики хорошего теста: ◎Читаемый (Readability) ◎Поддерживаемый (Maintainability) ◎Полезный (Usability) ◎Гибкий (Flexibility)
  34. 34. СПАСИБО ЗА ВНИМАНИЕ Вопросы?
  35. 35. Полезности Join me in FB- Testing Jam

×