Презентация Примеры автоматизированного тестирования игр в Unity онлайн
На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Примеры автоматизированного тестирования игр в Unity абсолютно бесплатно. Урок-презентация на эту тему содержит всего 44 слайда. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » Примеры автоматизированного тестирования игр в Unity
Оцените!
Оцените презентацию от 1 до 5 баллов!
- Тип файла:ppt / pptx (powerpoint)
- Всего слайдов:44 слайда
- Для класса:1,2,3,4,5,6,7,8,9,10,11
- Размер файла:5.95 MB
- Просмотров:109
- Скачиваний:1
- Автор:неизвестен
Слайды и текст к этой презентации:
№3 слайд
![Ситуации Новый функционал](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img2.jpg)
Содержание слайда: Ситуации
Новый функционал ломает старый
или старый функционал бесследно исчезает
QA перегружен
или QA отсутствует
“Всё сломалось! *** ***!”
в мягкой форме: “Я уже заказал вам пиццу”
"Это всегда так работало!"
если разобраться: "Это сломалось два месяца назад. Я написал в чатик, но мне никто не ответил"
Команда встала, потому что основная ветка разработки разломана
а виновник уехал на Бали
Неожиданно перед релизом все узнали что билд вылез за 100 мб
за 100 мб он вылез три месяца назад и сейчас весит 150 мб
маркетинг уже закупил трафик
№5 слайд
![Ситуации Новый функционал](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img4.jpg)
Содержание слайда: Ситуации
Новый функционал ломает старый
или старый функционал бесследно исчезает
QA перегружен
или QA отсутствует
“Всё сломалось! *** ***!”
в мягкой форме: “Я уже заказал вам пиццу”
"Это всегда так работало!"
если разобраться: "Это сломалось два месяца назад. Я написал в чатик, но мне никто не ответил"
Команда встала, потому что основная ветка разработки разломана
а виновник уехал на Бали
Неожиданно перед релизом все узнали что билд вылез за 100 мб
за 100 мб он вылез три месяца назад и сейчас весит 150 мб
№11 слайд
![Процесс Коммит в репозиторий](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img10.jpg)
Содержание слайда: Процесс
Коммит в репозиторий
Continuous Integration
Unity Test Runner Edit Mode тесты (Unit-тесты)
Unity Test Runner Play Mode тесты (Интеграционные тесты в редакторе)
Сборка билда для каждой платформы (WebGL, Android, iOS)
Unity Test Runner Play Mode тесты (Интеграционные на устройстве)
Деплой (по требованию)
№12 слайд
![Результаты первого этапа.](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img11.jpg)
Содержание слайда: Результаты первого этапа.
Непрерывная интеграция
Основная ветка всегда в рабочем состоянии
Нет ошибок в редакторе
Билд для каждой платформы
Знаем когда билд вышел за пределы необходимых размеров
История из собранных билдов позволяет быстро сравнить различные билды между собой
№17 слайд
![Пример теста UnityTest public](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img16.jpg)
Содержание слайда: Пример теста
[ UnityTest ]
public IEnumerator ShopWindowTest()
{
// -> .. создание gameProvider, viewProvider
yield return gameProvider.StartWithCustomScene( "TestFrameworkExample" );
yield return viewProvider.ClickButton< ViewMainMenuExample >( "Shop" );
yield return viewProvider.WaitView< ViewShopExample >();
yield return viewProvider.ClickButton< ViewShopExample >( "Close" );
yield return gameProvider.CleanUpGame();
}
№18 слайд
![Запуск сцены UnityTest public](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img17.jpg)
Содержание слайда: Запуск сцены
[ UnityTest ]
public IEnumerator ShopWindowTest()
{
// -> .. создание gameProvider, viewProvider
yield return gameProvider.StartWithCustomScene( "TestFrameworkExample" );
yield return viewProvider.ClickButton< ViewMainMenuExample >( "Shop" );
yield return viewProvider.WaitView< ViewShopExample >();
yield return viewProvider.ClickButton< ViewShopExample >( "Close" );
yield return gameProvider.CleanUpGame();
}
№19 слайд
![TestElement - помечаем поля](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img18.jpg)
Содержание слайда: TestElement - помечаем поля
public class ViewShopExample : MonoBehaviour
{
[ SerializeField ]
[ TestElement( "Close" ) ]
private Button _closeButton;
[ TestElement( "OffersCount" ) ]
private int _offersCount;
}
// использование
viewProvider.ClickButton< ViewShopExample >( "Close" )
viewProvider.GetElementFromView< ViewShopExample, int >( "OffersCount" )
viewProvider.GetElementByName< ViewShopExample, int >( "_offersCount" )
№20 слайд
![Нажимаем на кнопку UnityTest](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img19.jpg)
Содержание слайда: Нажимаем на кнопку
[ UnityTest ]
public IEnumerator ShopWindowTest()
{
// -> .. создание gameProvider, viewProvider
yield return gameProvider.StartWithCustomScene( "TestFrameworkExample" );
yield return viewProvider.ClickButton< ViewMainMenuExample >( "Shop" );
yield return viewProvider.WaitView< ViewShopExample >();
yield return viewProvider.ClickButton< ViewShopExample >( "Close" );
yield return gameProvider.CleanUpGame();
}
№21 слайд
![Способы нажать на кнопку в](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img20.jpg)
Содержание слайда: Способы нажать на кнопку в Unity UI
Внешний - API операционной системы
Работает не только на кнопки, но и на все приложение
Для каждой платформы нужно писать реализацию
Внутренний - вызываем событие onClick
Работает только для кнопок Unity UI
Работает на всех платформах
Прокликивание сквозь другие UI элементы
Внутренний - переопределение BaseInput
Работает для всех элементов Unity UI
Работает для любой платформы
Эмулируем курсор и касания из кода
№23 слайд
![Assert yield return](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img22.jpg)
Содержание слайда: Assert
yield return gameProvider.StartWithCustomScene( "TestFrameworkExample" );
yield return viewProvider.ClickButton< ViewMainMenuExample >( "Shop" );
yield return viewProvider.WaitView< ViewShopExample >();
Assert.AreEqual( 100500, viewProvider.GetElementFromView< ViewShopExample, int >( "OffersCount" ) );
yield return viewProvider.ClickButton< ViewShopExample >( "Close" );
yield return gameProvider.CleanUpGame();
№24 слайд
![Делаем скриншоты](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img23.jpg)
Содержание слайда: Делаем скриншоты
GameViewUtils.SetResolution( 800, 600 );
yield return gameProvider.StartWithCustomScene( "TestFrameworkExample" );
yield return viewProvider.ClickButton< ViewMainMenuExample >( "Shop" );
yield return viewProvider.WaitView< ViewShopExample >();
Assert.AreEqual( 100500, viewProvider.GetElementFromView< ViewShopExample, int >( "OffersCount" ) );
yield return screenshotHelper.CreateScreenshot( "Shop" );
yield return viewProvider.ClickButton< ViewShopExample >( "Close" );
yield return gameProvider.CleanUpGame();
№27 слайд
![Сравнение скриншотов](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img26.jpg)
Содержание слайда: Сравнение скриншотов
GameViewUtils.SetResolution( 800, 600 );
yield return gameProvider.StartWithCustomScene( "TestFrameworkExample" );
var beforeShop = screenshotHelper.CreateScreenshot( "MainMenu" );
yield return beforeShop;
yield return viewProvider.ClickButton< ViewMainMenuExample >( "Shop" );
yield return viewProvider.WaitView< ViewShopExample >();
Assert.AreEqual( 100500, viewProvider.GetElementFromView< ViewShopExample, int >( "OffersCount" ) );
yield return screenshotHelper.CreateScreenshot( "Shop" );
yield return viewProvider.ClickButton< ViewShopExample >( "Close" );
var afterShop = screenshotHelper.CreateScreenshot( "MainMenu" );
yield return afterShop;
var diffImagePath = screenshotHelper.GetPath( "MainMenuDiffAfterShopOpened" );
var pixelsChanged = ImageComparer.Compare( beforeShop.Path, afterShop.Path, diffImagePath );
Assert.AreEqual( 0, pixelsChanged );
yield return gameProvider.CleanUpGame();
№29 слайд
![Итоговый результат](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img28.jpg)
Содержание слайда: Итоговый результат
GameViewUtils.SetResolution( 800, 600 );
yield return gameProvider.StartWithCustomScene( "TestFrameworkExample" );
var beforeShop = screenshotHelper.CreateScreenshot( "MainMenu" );
yield return beforeShop;
yield return viewProvider.ClickButton< ViewMainMenuExample >( "Shop" );
yield return viewProvider.WaitView< ViewShopExample >();
yield return screenshotHelper.CreateScreenshot( "Shop" );
yield return viewProvider.ClickButton< ViewShopExample >( "Close" );
var afterShop = screenshotHelper.CreateScreenshot( "MainMenu" );
yield return afterShop;
Assert.AreEqual( 100500, viewProvider.GetElementFromView< ViewShopExample, int >( "OffersCount" ) );
var diffImagePath = screenshotHelper.GetPath( "MainMenuDiffAfterShopOpened" );
var pixelsChanged = ImageComparer.Compare( beforeShop.Path, afterShop.Path, diffImagePath );
Assert.AreEqual( 0, pixelsChanged );
yield return gameProvider.CleanUpGame();
№33 слайд
![Результаты этапа .](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img32.jpg)
Содержание слайда: Результаты этапа 3. Тестирование скриншотами
Из кода сложно понять, что игра выглядит неправильно
Человек справляется лучше со сравниванием скриншотов, если он знает куда смотреть
Компьютер может сравнить скриншоты и принять по этому поводу решение, либо просто показать разницу человеку, который будет принимать решение
№38 слайд
![Выводы Поэтапно вводим](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img37.jpg)
Содержание слайда: Выводы
Поэтапно вводим интеграционное тестирование
Этап 1. Непрерывная интеграция
Этап 2. Интеграционное тестирование
Этап 3. Тестирование скриншотами
Этап 4. Performance-тестирование
Автоматизируем процесс тестирования
Быстрое время реагирования, если что-то идет не так
Экономим деньги (баг найденный раньше стоит намного дешевле)
Увеличиваем количество Smoke-тестов (кардинально)
Меньше неожиданностей
Команда знает о состоянии билда
У программиста есть страховочная сеть
Можно осуществить на любой стадии проекта
№39 слайд
![Полезные ссылки https](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img38.jpg)
Содержание слайда: Полезные ссылки
https://www.gdcvault.com/play/1025013/Tools-Tutorial-Day-Tools-to (GDC, Amy Phillips, Tools to Reduce Open Bug Count at Media Molecule)
http://gdcvault.com/play/1022784/Fast-Iteration-Tools-in-the (GDC, Alen Ladavac, Fast Iteration Tools in the Production of the Talos Principle)
https://www.youtube.com/watch?v=ff5LNHGBGoM (DataArt, Валентин Анопренко, Интеграционные автотесты бизнес-логики)
https://simonschreibt.de/wft/watchdog/ (Simon Schreibt, Using screenshot comparing techniques)
https://www.youtube.com/watch?v=ULwdj_Vr_WA (HolyJS, Роман Дворнов, Unit-тестирование скриншотами: преодолеваем звуковой барьер)
https://www.youtube.com/watch?v=LEy3_2ZzWpk (DotNext, Андрей Акиньшин, Поговорим про Performance-тестирование)
№40 слайд
![Бонус . Улучшаем плей-тесты](/documents_6/4c1e2109bdb6c9ab6a879557e43eb924/img39.jpg)
Содержание слайда: Бонус 1. Улучшаем плей-тесты
Увеличиваем Time.timeScale (не применимо для всех тестов/приложений)
Не должны зависеть от рандома
Узкая функциональность
Нам не важна производительность кода теста (поэтому мы активно используем рефлексию в тестах)
Monkey Runner
Использовать функционал ботов и/или реплеев
Скачать все slide презентации Примеры автоматизированного тестирования игр в Unity одним архивом:
Похожие презентации
-
Автоматизированное тестирование
-
Создание логической игры «Ханойская башня» на платформе Unity
-
Компьютерные курсы. Создание трехмерных игр на движке Unity Юниум
-
Основные конструкции языка программирования. Турбо Паскаль (тестирование). 10 -11 класс
-
Программирование игр на Python
-
Развивающие мобильные игры и приложения
-
Управление в автоматизированном производстве (01)
-
Построение моделей стратиграфии и вертикальных разрезов толщи горного массива по данным геологоразведочных скважин
-
Разработка тест-кейсов. Ручное тестирование
-
Юзабилити. Тестирование