svn co svn+ssh://arcadia.yandex.ru/arc/trunk/arcadia/mail/testopithecus
Bash Support
XCode
и CommandLineTools
Setup Project
справа сверхуsvn up .
или command + t
в WebStormVersion Control
-> пкм на ненужной папке
(node_modules
, build
и т.п.) -> Ignore all files under
-> OK
Для этого можно запустить все тесты в режиме "модель" против "модели"
Выбираем и запускаем конфигурацию Run all tests on Model
из списка конфигураций справа сверху.
Тесты используют некоторые сервисы, доступы к которым должны прорасти через некоторое время после получения роли в ABC.
Выбираем и запускаем конфигурацию Run all tests on Mobile API
из списка справа сверху (см. backend.ts
).
Автотесты запустятся на случайном пользователе из пула. Его логин пароль будет в одной из первых строчек логов:
Got account login=yandex-team-12993-09775 password=simple123456 uid=946220544
Перед началом прочтите обзорную статью про тестирование на основе модели.
Для того, чтобы протестировать новую функциональность надо добавить фичу, реализовать ее в модели и в приложении,
сделать действия и составить из них несколько кросс-платформенных тестов.
Фича
- некий кусок функциональности тестируемого приложения, представленный в Тестопитеке произвольным интерфейсом. Примеры фичей живут mail-features.ts
.
У каждой фичи есть ее метаинформация (имя и пр.) - наследник класса Feature
.
Для того, чтобы ваша функциональность могла быть протестирована, соответсвующая фича должна быть реализована и в модели, и в приложении.
Реализация фичи в модели добавляется через класс MailboxModel
(там много примеров).
Реализация фичи в приложении добавляется в проекте ваших автотестов - через класс MobileMailBackend
для мобильного API, AndroidMailboxApplication.kt
для Android и IOSMailboxApplication.swift
для iOS.
Методы фичи, которые меняют состояние приложения, следует завернуть в Действия
(MBTAction
).
Действие переводит приложение из одного компонента в другой компонент (MBTComponent
) после выполнения метода perform
.
По сути, компонент - это один из экранов приложения.
Все проверки записываются в assertMatches
у соответствующего компонента. Проверки должны использовать read-only методы вашей фичи.
Для каждого мутабельного метода вашей фичи надо сделать наследника MBTAction
. В папке actions
есть много примеров.
Дальше можно написать кросс-платформенный тест, который протестирует вашу функциональность (см. папку tests
).
Каждый тест - это просто последовательность action-ов. Платформа сама будет вызывать assertMatches
между действиями при прогоне теста.
Итого, чтобы протестировать вашу функциональность надо:
mail-features.ts
MailboxModel
MBTComponent
MBTAction
для действий в вашей функциональностиMBTTest
-ов при помощи новых MBTAction
-овRun all tests on Model
Как запустить один кросс-платформенный тест
)Такой подход позволяет автоматически генерировать автотесты для вашей функциональности. Платформа сама это сделает. Кроме того, она сгенерирует так называемый "умный обход", который протестирует все возможные состояния вашей фичи.
Если у вас обычный тест, который использует один яндексовый аккаунт, то надо в папке code/tests
реализовать класс-наследник RegularYandexTestBase
. Там много подобных примеров.
Если ваш тест более сложный, то надо отнаследоваться от AbstractMBTTest
Если у вашего теста есть братишка в Пальме, то вы можете переопределить метод testSettings
- он должен вернуть конфиг с id соответсвующих кейсов.
Пример такого теста - InboxTopBarDisplayTest
из inbox-top-bar-display-test.ts
Реализованный тест следует зарегистрировать в register-your-test-here.ts
Все тесты регистрируются в register-your-test-here.ts
и на каждой платформе запускаются всем скопом под одним параметризированным тестом
(см. TestopithecusFixedScenarioTests.swift / TestopithecusFixedScenarioTests.kt / backend.ts
).
Для запуска одного теста раскомментируйте строку с TestsRegistry.testToDebug
и в качестве значения укажите свой тест.
После чего запустите конфигурацию с тестопитековскими тестами (Run Testopithecus Tests
в Android,
TestopithecusFixedScenarioTests [Debug]
в iOS и Run all tests on Mobile API
для бэкенда)
brew install git-lfs && git lfs install
git clone ssh://git@bb.yandex-team.ru/mobile/monorepo.git
mail/common/xmail
yarn install
packages/ys/package.json
build
из scripts
packages/ys/build/src/app.js
Скачиваем код автотестов https://github.yandex-team.ru/mobmail/mobmail-autotests и кладем в соседнюю для testopithecus
папку
Переключаемся на ветку feature/mailbox-preparer
Возвращаемся обратно в Тестопитек
Теперь можно запустить транслятор - конфигурация Generate code for mobmail Android autotests
из списка справа сверху.
В ней надо будет немного поправить пути. Для этого давайте изучим ее подробнее:
node /Users/amosov-f/Documents/yandex/monorepo/mail/common/xmail/packages/ys/build/src/app.js -i /Users/amosov-f/Documents/yandex/mail/testopithecus/common/code -o ../mobmail-autotests/android-core/src/main/java/ru/yandex/mobmail/testopithecus/generated -g /Users/amosov-f/Documents/yandex/monorepo/mail/common/xmail/packages/ys/build/src/generators/kotlin -c codegen/android.json -s
node
- программа запуска JavaScript
app.js
- программа траслятора
-i
- путь до транслируемого TypeScript
кода
-o
- путь, где должен появиться транслированный код
-g
- путь до файла, соответствующего языку, в который мы транслируем
-c
- путь до конфига транслятора, в котором указывается информация, специфичная нашей задаче. В данном примере в нем указано, какой пакет будет у всех kotlin
классов и какие дополнительные import
-ы надо в начало каждого вставлять.
-s
- отключить кеширование у траслятора
Исправляем пути и запускаем эту конфигурацию
После отработки транслятора в папке, указанной за -o
, появятся классы из папки common/code
, но на нужном вам языке.
Теперь вы можете их использовать в ваших тестах. Profit!
Generate code for iOS
- прописываем путь до транслятора в Environment variables
Generate code for iOS
Как сделать пул-реквест в Testopithecus
)mail/ios/mail-app/YandexMobileMail/YandexMobileMail.xcworkspace
cocoapods
по инструкции из ридми приложения. Если что-то не получается то Тимур может помочьtestopithecus
в Podfile на последнюю ревизию Аркадии -
ее можно посмотреть справа сверху на морде Аркадии https://a.yandex-team.ru/pod install --repo-update
Unable to connect to a repository ...
, то попробуйте залогинится в svn. Проще всего попробовать скачать какую-нибудь папкуsvn co https://arcadia.yandex.ru/arc/trunk/arcadia/mail/testopithecus/ios
ввести credentials, после чего ее удалитьnpm test
в консоли, или зеленая стрелочка рядом с script -> test
в package.json
)Generate code for iOS
Some message REVIEW:NEW
Version Control
в разделе Unversioned Files
нет незакоммиченных файлов с исходным кодом amosov-f
и a-zoshchuk
в ревьюPublish
Some message REVIEW_UPLOAD:ID
, где ID
- id пул реквеста из урла OAuth токен можно получить, выполнив такой запрос
curl -v -F grant_type=password -F username=LOGIN -F password=PASSWORD -F client_id=e7618c5efed842be839cc9a580be94aa -F client_secret=81a97a4e05094a4c96e9f5fa0b21f794 "https://oauth.yandex.ru/token"
Print model graph
, после выполнения должен появиться файл graph.txt
dot -ofile -O -Tpng graph.txt
, после выполнения должен появиться файл graph.txt.png
https://clubs.at.yandex-team.ru/mail/25713 https://clubs.at.yandex-team.ru/mail/25718
Generated using TypeDoc