All streams
Search
Write a publication
Pull to refresh
2
0
AlekseiM @m_aleksei

Пользователь

Send message

наша ферма на Аппиуме

  • 2 МакМиника (М1 + М2про). Вначале был один. Второй больше для страховки сделали

  • 25 тел: 12 Аппл к одному макминику, 13 Андроид тел к другому

  • Макминики подлючены к Дженкису

  • Каждую ночь бегут 800 тестов. При релизе более 1000. Это на каждую ось - всего 1600 или 2000.

  • Видео всех тестов (как успешных так и не очень успешных :-)). Отчеты в Allure. Результаты в TestRail.

  • кроме того макмини используются для запуска тонн всяких helperov типа создай пользователя, добавь деньги карту еще что то ...

  • кроме того макминики используются для API тестов - их много тоже

Телефоны используем примерно одинаковые. С разными тел накладные на разные экраны приводят к более долгому времени теста. 800 + 800 тестов бегут где то за 3 часа. Андроид чуть быстрее. Телефоны меняются примерно раз в 3-4 года. Итог обладания этим хозяйством около 200 евро в месяц. Подписка на похожую ферму - самую дешевую видел за 4 000 - 5 000 долларов. Все таки своя ферма значительно дешевле пока небольшая. Количество автоматизаторов 1 - 2 (иногда 1 иногда 2).

Проблема понимания как идут тесты (иногда хочется ведь не ждать до конца) - прям лог по окончании теста сколько прошло в общих логах. Просто и наглядно - пример из ночных:

[01:24:10.504] [choosePlanPremium]   BaseTest:                     | afterMethod(): Test tests.deepLinks.plan, status SUCCESS 
[01:24:10.504] [choosePlanPremium]   BaseTest:                     | afterMethod():   Execution time: 22sec 
[01:24:10.504] [choosePlanPremium]   BaseTest:                     | afterMethod():   --------------------------- 
[01:24:10.504] [choosePlanPremium]   BaseTest:                     | afterMethod():   partially completed results 
[01:24:10.504] [choosePlanPremium]   BaseTest:                     | afterMethod():    passed  tests: 204 
[01:24:10.504] [choosePlanPremium]   BaseTest:                     | afterMethod():    skipped tests: 18 
[01:24:10.504] [choosePlanPremium]   BaseTest:                     | afterMethod():    failed  tests: 9 

Проблему сертификатов надо как-то решать - все таки симуляторы по мне не тема.

ЗЫ ночные тесты идут в Slack сообщением. Не удержался без генератора шуток Норриса и афоризмов Черномырдина

так глубоко я не копаю. я больше практик. да по тест коду гуляю.

А вы что используете для работы с фермой

Не поверите - ничего. Просто подключены к макминикам через хабы. К одному iOS, к другому Android. Макминики подключены агентами к Jenkins.

По ночам бегают 700-800 тестов под каждую платформу. При релизе около 900. За 5 лет стоимость такого по подсчетам около 200-250 евро в месяц. Все таки надо менять иногда. Андроид все Nokia. iOS - самые дешевые были iPhone8, сейчас iPhone11.

А че ждать то - вот сейчас и попробуем на обычных вытаскивается у нас

String txt = driver.switchTo().alert().getText();
->
Allow “xx” to use your location?
“xx” Would Like to Send You Notifications

ЗЫ да и на офиц форум Аппиума вы заходите? я там -

https://discuss.appium.io/u?order=likes_received&period=all

А вы не пробовали для обычных ?

String txt = driver.switchTo().alert().getText();

С контактами мне кажется только сменив defaultActiveApplication можно вытащить.

ЗЫ Нам в тестах надо просто принять или отклонить запрос. Сам текст не нужен. Тот код что я прислал выше ну и еще есть немного другого все покрывает. Все на реальных тел. Своя ферма 25 тел.

С какой "конкретикой"? Речь идет о новых системных разрешениях которые появились с iOS18.

Оригинальные тикет в Аппиум трекере "Find a better method to handle com.apple.ContactsUI.LimitedAccessPromptView bundle id automatically since iOS 18 contacts permission" -

https://github.com/appium/appium/issues/20591

Я это делаю так:

    @Step("Tap 'Allow Full Access' contact permission button")
    public void acceptContactPermission() {
        // iOS 18 only
        // https://github.com/appium/appium-xcuitest-driver/pull/2474
        // docs: address com.apple.ContactsUI.LimitedAccessPromptView in troubleshooting
        if (isIOS) {
            getDriver().setSetting("defaultActiveApplication", "com.apple.ContactsUI.LimitedAccessPromptView");
            try {
                tap(driver.findElement(AppiumBy.iOSNsPredicateString("label == 'Allow Full Access' OR label BEGINSWITH 'Share All'")));
            } catch (Exception ignored) {
            }
        }
    }

Со старыми/другими разрешениями - ничего не изменилось. Они прекрасно видны и нажимаются по старому.

Делаю так:

    @Step("Tap 'Accept permissions' button")
    public boolean tapAcceptPermissionsButton() {
        Logger.log();
        final String iosLocator = "**/XCUIElementTypeButton[`name == \"Allow While Using App\" OR name == \"Allow\"`]";
        boolean bool = false;

        // https://appium.github.io/appium-xcuitest-driver/7.3/reference/settings/
        try {
            driver.setSetting("acceptAlertButtonSelector", iosLocator);
        } catch (Exception ignored) {
        }
        try {
            driver.switchTo().alert().accept();
            bool = true;
        } catch (Exception ignored) {
        }
        return bool;
    }

Ссылочка на док (а как вы работаете без чтения доков :-) .....

https://appium.github.io/appium-xcuitest-driver/latest/reference/settings/

ну наворотили конечно......

А чем простое переключение не устаивает через сетинги?

// Java
driver.setSetting("defaultActiveApplication", "com.apple.ContactsUI.LimitedAccessPromptView");

И все - никто не дергается..... и все видно

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

Возможно вы просто не так пишите... (1000+ тестов под iOS + Android - проблемы что мешают пока только в не 100% стабильном сервере)

А ReactNative это общая боль в виду большой вложенности (особенно iOS).

Почему так важна скорость? Распараллелит тесты ведь можно.

Appium этого просто не умеет, мир нативного

Уточнение - не Аппиум, а тотже XCUItest к примеру или UIAutomator2.

В iOS еще NSPredicate сильный локатор. Можете добавить как уточнение (на скрине он у вас кстати виднеется).

Про xPath можно добавить, что лучше забыть о нем. Особенно в iOS из-за сильного замедления при поиске элементов.

Flutter сейчас все больше и больше используют. Отдельная тема в мобильном направлении. Для Аппиума есть плагинчик для него.

Наконец можно упомянуть Espresso фраймворк для Андороида. Крайне мощный но бывает капризный в настройках. Тоже есть в Аппиуме поддержка.

Интересен момент поддержки выполненых задач. Как легко вносить изменения потом как людям так и самому АИ....

Дословно их ответы

January 9, 2024

OpenAI admits it's 'impossible' to create ChatGPT-like tools without using copyright material, amid court battles over intellectual property theft allegations

OpenAI признает, что «невозможно» создавать инструменты, подобные ChatGPT, без использования материалов, защищенных авторским правом, на фоне судебных баталий по поводу обвинений в краже интеллектуальной собственности

Today at 4:28 AM

OpenAI says it has uncovered evidence that Chinese AI startup DeepSeek used its proprietary models to train a competing open-source model, potentially violating the company's terms of service.

На макбуке с М1 Про пашет отлично (пробовал). Ясно что такие 4-12гБ модельки не такие идеально крутые как более большие модели. Но все же...

Если мы говорим и маленких проектах, где действительно надо только кликать - то возможно простота Маэстро выигрывает.

Но! Как только мы говорим о чем то более сложном, где в тестах на лету нужно создавать данные, пользователей используя много как API, так и DB обращений, то все становится намного сложнее. В таких проектах клики это лишь 30%, а сложная обвязка уже требует более высокого уровня инженеров. И таким людя пары строк настройки - вообще не проблема.

"Тем не менее, ожидания в Appium очень хрупкая вещь, по крайней мере добавляет лишний код." - вы вообще о чем? Вы пробовали Аппиум Java аннотации? Там во первых супер гибкая система ощидания. А во вторых xPath вообще отдыхает по степени сложности, какие можно задать в Java Appium annotations.

Я вам свой пример скину

https://discuss.appium.io/t/combining-iosclasschain-locators-issue/40162/3

А вот пример управления на лету временем поиска элементов

https://discuss.appium.io/t/withtimeout-pagefactory-annotation-and-implicit-or-explicit-waiting/41684/2

Насколько актуальны сегодня ссылки 10ти летней давности? Например по "не экологичной" утилизации, чтобы утверждать это сегодня.

Зачем писать TouchAction который уже 2+ года не используется?

А я Playwrignt на Java использую. По сравнениню с глючнимы хромдрайверами - в 10 раз и быстрее безглючнее

Какой Robot, есть еще проще https://maestro.mobile.dev/ !

Только, чем проще инструмент, тем более простые тесты он может написать.

Ответ: инструмент поддерживает жесты через класс TouchAction. Например, для жестов свайпа используются методы pressmoveTo и release.

Стираем. Это убрали больше года назад.

приложение и пакет приложения (appPackage),

Уж если указываете Андроидовский appPackage, то надо бы указать и bundleId от iOS

Ответ: для распознавания элементов мобильных приложений Appium применяет локаторы, аналогичные Selenium. Это могут быть idnameclassXPath. А также в Appium используются локаторы accessibility id.

Тут забыты нативные локаторы Android: UiSelector, UiSelector, iOS: NSPredicate, Class Chain Queries.

Information

Rating
Does not participate
Location
Таллин, Эстония, Эстония
Registered
Activity