Автоматизация тестирования может автоматизировать некоторые повторяющиеся, но необходимые задачи. Но если вы не будете осторожны, вы можете быстро попасть в кроличью нору в погоне за неудачными тестами и упустить из виду столь же необходимые исследовательские вопросы: «Могут ли наши пользователи легко пройти путь пользователя?» «Есть ли потенциальные ошибки в этом путешествии?» «Ухудшается ли качество этого путешествия?»

Тесты ненадежны, поскольку базовая механика XPath, селекторов CSS, идентификаторов элементов и других дескрипторов часто тесно связана с автоматическими тестами. Это особенно болезненно, когда у вас есть приложения с динамическими локаторами или локаторы, которые не обязательно уникальны, как в случае с приложениями Angular и React.

Решение для тестирования на основе машинного обучения, такое как mabl, обрабатывает приложения с динамическим пользовательским интерфейсом, чтобы помочь тестировщикам сосредоточиться на человеческой стороне тестирования, что делает роль тестирования такой уникальной и мощной в первую очередь.

«Я обучил несколько переходов в своем приложении Angular, которые требовали уникальных значений для каждого выполнения, и был удивлен, увидев, что mabl поддерживает это, и рад, что мои тесты завершились успешно».

— Кэти, ведущий инженер-испытатель в Immuta

Как это делает мабл? Все это встроено в ее способность тестировать адаптацию.

Какую информацию использует mabl для создания надежных адаптивных тестов?

Пока тестировщики взаимодействуют с тренажером mabl для создания теста, под прикрытием mabl фиксирует ваши пользовательские пути, используя наш собственный проприетарный предметно-ориентированный язык. Она также собирает большое количество атрибутов элементов DOM, свойств и визуальных деталей (таких как XPath, имена тегов, атрибуты класса, текст и различные контекстные идентификаторы), чтобы помочь идентифицировать концептуально эквивалентные элементы в будущих тестовых прогонах путешествия.

Итак, теперь, когда у нее есть понимание пути пользователя, а также вся эта дополнительная информация, mabl знает достаточно о каждом действии в пути, чтобы снова идентифицировать соответствующий элемент или найти ему подходящие замены по мере изменения пользовательского интерфейса. Когда доступен только один вероятный кандидат, mabl будет постепенно обновлять свои модели для соответствующего этапа пути, поэтому тесты будут оставаться актуальными даже после нескольких последовательных изменений пользовательского интерфейса.

Большую часть этой информации можно даже применить к тому же пути в других средах, поэтому тесты, выполняемые через одно и то же приложение, будут выполняться последовательно. По мере того, как mabl собирает больше информации о кандидатах на замену во многих приложениях, она в конечном итоге будет использоваться в более продвинутых моделях для определения приоритетов будущих кандидатов в пути и даже в приложениях.

Но вопрос касается надежных изменений; может еще мабл приспособить? Что делает mabl, когда нет очевидного правильного ответа?

mabl использует собранную информацию для экспериментов. На основе прошлых идентификаций элементов она может ранжировать частичные и неопределенные совпадения. Чтобы убедиться, что экспериментальное действие было правильным, mabl оценивает, как разворачивается оставшаяся часть путешествия.

Например, она учитывает, проходят ли утверждения, может ли она выполнять последующие действия, а также внешний вид результирующего состояния приложения по сравнению с предыдущими запусками. Если mabl определит, что ее исправление для теста было успешным, она сообщит вам, какое было предложенное исправление. Отсюда вы можете просто отклонить исправление mabl для путешествия, если оно было неправильным, и mabl запомнит это для будущих запусков.

Хватит разговоров, давайте посмотрим на пример этого в Angular!

Как упоминалось в начале, одна из трудностей при работе с различными современными веб-фреймворками, такими как Angular и React, заключается в том, что они в значительной степени зависят от манипуляций с DOM и выполнения JavaScript. В частности, элементы DOM, созданные этими платформами, часто содержат минимальные и непрозрачные атрибуты, из-за чего их трудно различить.

Однако люди должны уметь распознавать, как выполнять определенные действия в разных итерациях пользовательского интерфейса; mabl собирает некоторые из тех же контекстуальных подсказок. Хотя атрибутов элемента может быть недостаточно для идентификации конкретного элемента для взаимодействия во время путешествия, существует множество других динамических или вычисляемых свойств, которые можно использовать, например, внутренний текст и отображаемое местоположение или размер.

Рассмотрим простой пример динамически генерируемого списка в приложении Angular с помощью ngFor (аналогично ng-repeat в AngularJS 1.x или массиву сгенерированных элементов списка в React). :

В этом примере у нас есть экран, который показывает список ролей пользователей в гипотетическом приложении, где каждую роль можно щелкнуть, чтобы получить подробное описание роли. Это создается как серия элементов списка (‹li›), каждый из которых содержит элемент привязки (‹a›) с кликами, обрабатываемыми Angular — атрибутом href каждый якорь является одним и тем же, самореферентным, значением «#», даже если щелчок приводит к отображению другого описания роли для каждого посредством манипуляции с DOM с помощью кода Angular JavaScript. Просто учитывая атрибуты элемента, каждый элемент выглядит одинаково (например, ‹a _ngcontent-c5 href="#"› или просто ‹a href="#"› в React ), но внутренний текст каждого отличается.

Мы можем обучить mabl нажимать на роли в определенном порядке. В правом нижнем углу находится тренажер mabl, записывающий каждый шаг, когда мы взаимодействуем с нашим приложением Angular:

Ниже вы найдете тестовый вывод из приложения mabl. Вы можете видеть, как она собирает информацию на каждом этапе путешествия, а затем успешно завершает тест (справа показаны сопутствующие скриншоты, которые mabl собирает для приложения на каждом этапе):

Таким образом, когда наше гипотетическое приложение добавляет в список роль «A.3» перед «B.0», mabl по-прежнему может идентифицировать элемент привязки «Роль B.0», используя свойства внутреннего текста элементов привязки, и обновляет то, что она знает об этом элементе.

Если позже имена ролей были изменены (например, «B.0» становится «Beta-Zero»), mabl будет знать, что правильный элемент в последний раз встречался на 4-й позиции в списке (как по визуальному расположению, так и по последнему показателю). известный XPath). Поэтому она оценивала ссылку «Бета-ноль» как наиболее вероятный кандидат и оценивала оставшуюся часть пути, чтобы определить, сделала ли она правильный выбор, и обновить свои знания о новом тексте для элемента.

С помощью машинного интеллекта мы можем сделать автоматизированное тестирование простым, не требующим особого обслуживания и доступным для любой группы контроля качества.

Вы можете бесплатно попробовать мабл в своих приложениях на app.mabl.com.

Публичная ссылка на пример Angular:
https://stackblitz.com/edit/mabl-angular-list-example?file=app%2Fapp.component.ts

Общедоступная ссылка на соответствующий пример React:
https://stackblitz.com/edit/mabl-react-generated-array-example?embed=1&file=index.js

Первоначально опубликовано на www.mabl.com.