42
Опыт тестирования API САПР платформы От ручных тестов к автоматизации Илья Слободин Клуб разработчиков nanoCAD ЗАО «Нанософт», 2012

Опыт тестирования API САПР платформы

  • Upload
    sqalab

  • View
    1.710

  • Download
    1

Embed Size (px)

DESCRIPTION

Доклад Ильи Слободина на конференции SQA Days-12, 30 ноября-1 декабря, Минск

Citation preview

Page 1: Опыт тестирования API САПР платформы

Опыт тестирования API САПР платформыОт ручных тестов к автоматизации

Илья Слободин

Клуб разработчиков nanoCAD

ЗАО «Нанософт», 2012

Page 2: Опыт тестирования API САПР платформы

Об авторе

Впервые принял участие в разработке САПР в 1994 году

Разрабатывал ПО для:• архитектурной реставрации, восстановления геометрии по архивным фотографиям• производства кухонной мебели• обработки сканированных чертежей

В настоящее время: руководительпроекта «Клуб разработчиков nanoCAD»

Page 3: Опыт тестирования API САПР платформы

Что такое nanoCAD?

nanoCAD – это двумерный САПР общего назначения, «электронный кульман»

Предназначен для создания чертежей

Обладает развитым API, позволяющим создавать специализированные приложения

Page 4: Опыт тестирования API САПР платформы

Зачем в САПР API?

1. Автоматизация создания чертежей

2. Упрощение создания и редактирования чертежей

Виды API: COM, LISP, .NET, C++

Page 5: Опыт тестирования API САПР платформы

Простейший чертёж

Создадим чертёж, состоящий из единственного отрезка из точки (0, 0) в точку (100, 100)

Мышь: Клавиатура:

Page 6: Опыт тестирования API САПР платформы

Программное создание чертежа: COM

JScript:

VBScript:

Page 7: Опыт тестирования API САПР платформы

Программное создание чертежа: LISP

Page 8: Опыт тестирования API САПР платформы

Программное создание чертежа: .NET

Page 9: Опыт тестирования API САПР платформы

Программное создание чертежа: C++

Page 10: Опыт тестирования API САПР платформы

Сложно ли подвинуть стену?

Угол сюдаБаба Яга

Page 11: Опыт тестирования API САПР платформы

Делай – раз!

План начерчен отрезками,встроенными в nanoCAD

525 отрезков

План начерчен стенами, окнами, дверями приложения nanoCAD СПДС

4 стены, 2 окна, 1 дверь

Page 12: Опыт тестирования API САПР платформы

Настоящий чертёж

14399 объектов

Page 13: Опыт тестирования API САПР платформы

Предпосылки возникновения nanoCAD

• К 2008 году нами было создано более 20 приложений на платформе AutoCAD

• Кризис: AutoCAD дорог, и заметно дороже наших приложений

• Решение: создание собственной платформы

Page 14: Опыт тестирования API САПР платформы

Краткая история

• 2008 – первое приложение на платформе nanoCAD• 2008-2012 – портировано более 10 приложений

• 2011 – релиз платформы как самостоятельного продукта, открыт API,заработал «Клуб разработчиков nanoCAD»

• 2012 – выход на международный рынок

Page 15: Опыт тестирования API САПР платформы

Кому страшна регрессионная ошибка?

Если появилась ошибка там, где раньше её не было:

Человек найдёт как обойти ошибку

Программа, установленнаяу пользователя, обойти ошибку в API платформы не в состоянии

Page 16: Опыт тестирования API САПР платформы

Что тестируем?

• API работы с чертежами:▪ открытие, сохранение

• API взаимодействия с пользователем:▪ выбор графических примитивов▪ выбор точек на экране▪ ввод координат, чисел, строк▪ запуск команд

• События (реакторы):▪ на создание, удаление, изменение всего и вся

Page 17: Опыт тестирования API САПР платформы

Этап 1. Тестирование API вручную

Page 18: Опыт тестирования API САПР платформы

Этап 1. Тестирование API вручную

• Тест API – специальная команда, вызывающая функцию API со всеми основными вариантами параметров

• Команду запускает вручную тестировщик• Далее тестировщик выбирает точки на экране, вводит

координаты, и т.п. согласно тест кейсу• По завершении тест кейса анализируется лог файл

Page 19: Опыт тестирования API САПР платформы

Ручной тест API

Команда: GetAngleTest

Должен быть загружен документ UnitTest.dwg

Укажите угол мышью, первая точка: 0,0,0Вторая точка: 100,100,0Проверка на отмену. Нажмите Esc: EscПроверка на ввод 0. Введите 0: 0Проверка на запрещение ввода 0. Введите 0: 0Значение должно быть ненулевым.Проверка на запрещение ввода 0. Введите 0: 1Проверка на запрещение пустого ввода. Нажмите Enter или пробел: <Enter>Проверка на запрещение пустого ввода. Нажмите Enter или пробел: <Space>Проверка на запрещение пустого ввода. Нажмите Enter или пробел: 1Проверка на пустой ввод. Нажмите Enter или пробел: <Enter>Проверка свободного ввода. Введите не число: #sqadays12Проверка на значение по умолчанию. Нажмите Enter <135>: <Space>Проверка ввода с ключевыми словами. Введите число или [Пи/Два-пи/]: ПиПроверка ввода по умолчанию с ключевыми словами. Нажмите Enter или пробел <135> или [Пи/Два-пи/]: <Enter>

Page 20: Опыт тестирования API САПР платформы

Этап 1. Тестирование API вручную

• Достоинства:▪ API может быть проверен

• Недостатки:▪ высокая трудоёмкость и низкая эффективность ручных

тестов

Page 21: Опыт тестирования API САПР платформы

Автоматизируем?

Page 22: Опыт тестирования API САПР платформы

Главный вопрос автоматизации

Как мы будем поддерживать автотесты в актуальном состоянии?

Page 23: Опыт тестирования API САПР платформы

Что мешает автоматизации?

Специфика САПР: координаты, пиксели, масштабы

На координаты влияют:• Размеры и взаиморасположение окна приложения и

его панелей управления• Отображение элементов управления в разных

версиях ОС, стили оформления ОС• Многомониторные конфигурации• И многое, многое другое…

Page 24: Опыт тестирования API САПР платформы

Как найти нужный пиксель?

Экран

(401, 18)

Чертёж

(100, 100, 0)

Page 25: Опыт тестирования API САПР платформы

Как найти нужный пиксель?

Экран

(207, 128)

Чертёж

(100, 100, 0)

Page 26: Опыт тестирования API САПР платформы

Как найти нужный пиксель?

Экран

(315, 161)

Чертёж

(100, 100, 0)

Page 27: Опыт тестирования API САПР платформы

Координаты: из чертежа в пиксели

Вывод: Координаты должны храниться в системе координат чертежа

COM модель расширена методами преобразования координат:

nanoCAD.Utility.CoordFromPixelToWorld()

nanoCAD.Utility.CoordFromWorldToPixel()

Page 28: Опыт тестирования API САПР платформы

Этап 2. Традиционная автоматизация

• Последовательность действий тестировщика записана в виде сценария системы автоматизированного тестирования

• Результат выполнения теста сохраняется в специальный объект САПР платформы

• Система автоматизированного тестирования читает результат через COM

Page 29: Опыт тестирования API САПР платформы

В поисках идеального рекордера

Стандартный скрипт автоматизации:

Как автоматизировать это преобразование при записи?

Надёжный скрипт автоматизации:

Page 30: Опыт тестирования API САПР платформы

Этап 2. Традиционная автоматизация

• Достоинства▪ высокая скорость тестирования, низкая вероятность

ошибок, связанных с человеческим фактором

• Недостатки▪ тесты сложно поддерживать, приходится синхронизировать

две разделённые части теста:1. тест API, загружаемый в САПР платформу

2. сценарий автоматизированного теста

Page 31: Опыт тестирования API САПР платформы

Этап 2. Традиционная автоматизация

Q. Как создать легко поддерживаемый тест?

A. Объединить две разделённые части автотестав один модуль

Page 32: Опыт тестирования API САПР платформы

Вариант 1. Адаптер для nanoCAD

Логика теста только в системе автоматизированного тестирования, в nanoCAD загружен адаптер

Не подходит. Мы теряем возможность прогона теста вручную

Page 33: Опыт тестирования API САПР платформы

Вариант 2. Адаптер для системы автотестов

Логика теста только в nanoCAD, в систему автотестов загружен адаптер, «универсальный проигрыватель»

Подходит. Тесты можно прогнать вручную. Есть теоретическая возможность замены системы автотестирования

Page 34: Опыт тестирования API САПР платформы

Изобрели велосипед?

Page 35: Опыт тестирования API САПР платформы

Этап 3. Универсальный проигрыватель

Page 36: Опыт тестирования API САПР платформы

Этап 3. Универсальный проигрыватель

• Сценарий автотеста содержит лишь название теста и код запуска универсального проигрывателя

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

Page 37: Опыт тестирования API САПР платформы

Этап 3. Универсальный проигрыватель

• Достоинства:▪ тесты легко поддерживать:

при изменениях исправлениявносятся только в один модуль

• Недостатки:▪ Большая трудоёмкость создания автоматизированного теста

по сравнению с традиционным подходом:1. запись сценария в системе автоматизированного

тестирования

2. перенос сценария в модуль тестов

Page 38: Опыт тестирования API САПР платформы

Требования к системе автотестирования

Система должна позволять:

• Автоматизировать мышь и клавиатуру

• Создать универсальный проигрыватель

• Прочитать через COM список действий и результат выполнения тестов

Page 39: Опыт тестирования API САПР платформы

Как мы выбирали систему автотестирования

Когда мы начинали думать обавтоматизации, отдел тестированияуже использовал TestComplete

Мы работаем в Visual Studio, основной язык разработки: С++

Первые ручные тесты были написаныдля .NET API на С#

Мы решили попробовать Coded UI TestУ нас получилосьТам и остались

Page 40: Опыт тестирования API САПР платформы

P.S. Всё ли автоматизировано?

Что автоматизировано?• Тесты исправленных

ошибок в API• Тесты нового API

Что не автоматизировано?• Тесты API, написанные

до решения проблемы автоматизации

Времени не хватает: вперёд, только вперёд!

Page 41: Опыт тестирования API САПР платформы

Точка роста твоей карьеры

Тесты, которые ещё не автоматизированы == Курс молодого бойца

Page 42: Опыт тестирования API САПР платформы