Мой баг дня (записки тестировщика)
245 subscribers
172 photos
23 videos
11 files
127 links
Precondition:
Repro steps:
1. ...
2. ...
3. ...
Expected: good
Actual: bad

Связь: @MyachinDA
Download Telegram
Это не баг, а запланированное поведение, но тем не менее сходу оно может попортить нервы тем, кто погружается в Espresso (как я).

Есть аннотация @Rule. Поля и методы с этой аннотацией выполняются до всех @Before и после всех @After. Поля выполняются до методов. Порядок полей и порядок методов при этом не определён, так что есть ещё RuleChain, но не об этом разговор.

Эталонный пример Правила — это ActivityTestRule. К примеру у меня это СплешАктивити. Я знаю, что она будет запущена и завершена до выполнения метода с аннотацией @Test и завершена после его выполнения. Так что в @After я пишу код, который удаляет данные приложения, будто это первый запуск.

Если выполнять методы @Test отдельно, то всё работает. Но если запустить все методы в классе, то все, кроме первого, завалятся, т.к. запущенная по правилу активити будет не той. Будто бы данные не удалены. Но они удалены!

Это происходит потому что запущенный на выполнение процесс приложения не перезапускается, пока не пройдут все тесты. То есть все @Before, @After — всё работает правильно, но процесс не увидит, что данные очищены, потому что он и не будет читать, т.к. он не перезапускается. Если воткнуть какое-нибудь System.exit(0), то тесты упадёт, т.к. процесс завершился.

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

Более правильно — иметь что-то, что будет следить за процессом, но не будет зависеть от него и будет выполнять методы изолировано, с полным завершением процесса.

Можно написать скрипт, который будет на компе будет исполнять команды по-отдельности. Это вполне себе нормальный подход, я его применял когда-то и, возможно, ещё вернусь к нему. Но лучше (впрочем, одно другому не мешает) использовать оркестратор: https://developer.android.com/training/testing/junit-runner?hl=ru#using-android-test-orchestrator Он будет установлен как ещё одно приложение и берёт на себя то, что вы могли делать своими скриптами.

В документации сказано, что можно чистить данные вот такой инструкцией в гредле: testInstrumentationRunnerArguments clearPackageData: 'true'. Но учтите, что данные будут полностью очищаться перед каждым @Test. Если вам где-то надо чистить, а где-то не надо, то лучше реализуйте очистку вручную. Например, засуньте её в @After. Т.к. оркестратор завершает процесс после каждого теста, то с проблемой не перечитывания данных вы не столкнётесь.
Новая фича у Пикселей. По крайней мере в Pixel 2 её раньше не было
Ошибка взаимодействия сервиса звонилки и приложения звонилки в Android. Словил на Pixel 2 на Android 10

1. При активном звонке отстреливаем приложение звонилки. В моём случае достаточно было запустить тяжёлое приложение, чтобы система выгрузила звонилку
2. Т.к. сервис продолжает работать, мы слышим, что звонок всё ещё живой
3. Запуск звонилки никак не влияет на установленное подключение. Звонилка не видит активного звонка и позволяет совершить ещё один звонок

В моём случае я звонил в Hoff и там не брали трубку по полчаса. И я не мог завершить зависший звонок, пришлось ребутать устройство, потому что сервис продолжал держать установленный звонок и я слушал музыку и "ваш звонок дохера важен для нас".
Мой баг дня (записки тестировщика)
JFYI: PIA (https://www.privateinternetaccess.com/) приложение под Android обновилось. Завезли поддержку WireGuard, наконец.
У меня не завелось на Android, лол. Не подклчается. Pixel 2, Android 10. Хотя они честно пишут, что это превью. Взятки гладки, так сказать. Но когда заработает, я сделаю замеры скорости. Т.к. в 10ке оно всё равно работает в юзер спейсе, то буст должен быть не сильный. Но проверю.
Переустановка решила проблему. Вот результаты сравнения. Нижний — WireGuard, верхний — openVPN
Для сравнения. Вообще без VPN значения 129 и 73 соотвественно.
Столкнулись с проблемой: программа не запускалась у некоторых пользователей. Что их объединяло — RDP и Windows 7. Пробовали — проблема воспроизводится.

Чуть-чуть Гугла и выяснилось то, что некоторые из вас и так знали (но не я). Как оказалось, если Win7 используется в качестве RDP сервера, то на ней нельзя задействовать openGL, из-за чего ваши программы, написанные с использованием Qt, могут просто падать.
Screenshot_20200504_161621.png
4.2 KB
Лол. Эпл, по крайней мере для моего тестового iPhone SE, впаяла ровно 32 гигабайта памяти. Ни байтом больше или меньше
И да, речь о GB, а не о GiB. Это Windows неправильно пишет GB. В MS, почему-то, не желают использовать нормальные единицы измерения.
Такое-то качество, теперь от Google.

Приложение Google Photos, установленное из Маркета на Pixel 2 с Android 10 без модификаций.

Достаточно иметь тёмную тему в системе (штатно), чтобы видеть такое вот
Боковая панель > Settings > SD card access