AppSpector — український продукт, що допомагає в тестуванні та моніторингу мобільних застосунків
Доброго дня, з вами Артур Шевченко, і в цій статті я би хотів вас познайомити з AppSpector — помічником під час розробки, дебагінгу та тестування мобільних застосунків. Чому треба звернути на нього увагу? По-перше, це наш український продукт, родом з мого рідного міста Дніпра. По-друге, він є поєднанням таких інструментів: Android Studio / XCode та сніферів трафіку. І традиційно: якщо ви більше полюбляєте формат відео і вам хочеться подивитись, як це все робилось, заглядайте на мій ютуб-канал. І якщо вас цікавлять думки, статті, курси та корисні матеріали про тестування, розробку та менеджмент, буду радий вас бачити у своєму телеграм-каналі.
Почну одразу з плюсів та мінусів:
Плюси:
- легкий моніторинг логів, нетворку, перфомансу, баз даних та загалом файлової системи;
- фільтрування та шифрування ваших даних;
- легка інтеграція та підтримка від команди AppSpector;
- можливість мокати локацію;
- повноцінний перегляд та редагування баз даних;
- створення власних бекдорів у застосунок для поліпшення тестування;
Мінуси:
- потрібна інтеграція в застосунок;
- немає можливості мокати response або видозмінювати request (як це можна робити у Fiddler / Charles / Proxyman).
Тож розгляньмо, як можна використовувати AppSpector у тестуванні та як його додати до проєкту. Розбиратися будемо на прикладі Android-застосунку.
Як взагалі працює AppSpector
Тут доволі все просто: ви інтегруєте у ваш застосунок SDK AppSpector, далі він акумулює інфо та віддає по вебсокету на сервачок AppSpector’a і після, зайшовши у веб-застосунок або десктопний застосунок ви можете монітори всі метрики що збирає AppSpector. Для людей які піклуються про безпеку — у AppSpector є варіант з шифруванням даних які ніхто не побаче крім вас.
Як інтегрувати AppSpector у наш застосунок
Спочатку вам треба зареєструватись. Після цього ви зможете створити або організацію, або проєкт. Проєктів може бути скільки завгодно. Кожен з них буде мати унікальну ідентифікацію.
Наразі AppSpector підтримує iOS-, Android- та Flutter-застосунки.
Обираючи тип застосунку, ви попадаєте на головну дашборду, де можете побачити активні сесії (сеанси користування вашим застосунком) та налаштування проєкту.
Аби перемикатися між проєктам, є кнопка Jump to project.
Нам потрібно зайти в сеттінги та запамʼятати API Key
Далі перейдемо в Android Studio та підімкнемо SDK до нашого застосунку.
У файл build.gradle
на рівні проєкту додамо:
buildscript { repositories { jcenter() google() maven { url "https://maven.appspector.com/artifactory/android-sdk" } } dependencies { classpath "com.appspector:android-sdk-plugin:1.+" } }
А також у файл на рівні застосунку app/build.gradle
додамо:
apply plugin: 'com.android.application' // Put AppSpector plugin after Android plugin apply plugin: 'com.appspector.sdk' // Add AppSpector maven repository repositories { maven { url "https://maven.appspector.com/artifactory/android-sdk" } } dependencies { implementation "com.appspector:android-sdk:1.+" }
Нам треба ініціалізувати AppSpector. Для цього:
import android.app.Application; import com.appspector.sdk.AppSpector; public class AmazingApp extends Application { @Override public void onCreate() { super.onCreate(); // Стартонути з всіма моніторингами AppSpector .build(this) .withDefaultMonitors() .run("API_KEY"); // Або вибрати ті які вам треба AppSpector .build(this) .addPerformanceMonitor() .addHttpMonitor() .addLogMonitor() .addScreenshotMonitor() .addSQLMonitor() .run("API_KEY"); } }
Logs
Відкриваємо застосунок, відкриваємо дашборд AppSpector і бачимо, що наш девайс став онлайн. А якщо натиснемо на нього, побачимо, що магія почала працювати. Перше, що може нас цікавити, — це логи. Логи можна фільтрувати за типом, можна шукати за ключовими словами, а також можна експортувати їх.
Network
Для того, щоб підімкнути моніторинг запитів від девайсу та відповідей від сервера, нам треба дописати пару рядків коду. Наприклад якщо використовуєте ретрофіт, щоб побачити запити достатньо написати таке:
OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new AppSpectorOkHttp3Interceptor()) .build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://petstore.swagger.io/v2/") .addConverterFactory(GsonConverterFactory.create()) .client(client) .build();
Робимо декілька запитів, відкриваємо AppSpector з браузера та переходимо в Network. І вуаля, магія стала ще кращою: бачимо всі наші запити та відповіді. Також можемо фільтрувати та шукати, що саме нам треба. І також все це можна експортувати архівчиком.
Ще з цікавого є таке: за бажання ви можете ще й фільтрувати, що показувати (або що не показувати) в логах. Знову ж таки, з міркувань безпеки ви можете прибирати якісь хедери, наприклад. Або запити на якісь домени.
Events
Наступна цікава фіча — це івенти. Івенти — це щось типу розширеного кастомного логування (я би якось так це описав). Для цього нам треба зробити декілька речей. Наприклад, просто логуватимемо нашу DTO тваринки, яку створюємо. Уявімо, що в нас десь є клас Pet з полями. Додаймо внутрішній клас, який буде створювати нам івент. Для цього нам треба в новому класі імплементувати інтерфейс CustomEventPayload
і три методи в ньому — getName
, getCategory
та getPayload
.
class PetModelEvent implements CustomEventPayload{ @NonNull @Override public String getName() { return "Custom Event Pet"; } @NonNull @Override public String getCategory() { return "Application DTO"; } @NonNull @Override public Map<String, Object> getPayload() { final Map<String, Object> payload = new HashMap<>(); payload.put("sampleDate", new Date()); payload.put("id", id); payload.put("name", name); payload.put("status", status); return payload; } }
А тепер там, де відбувається створення або надсилання нашого Pet, треба додати виклик цього івента як:
CustomEventsSender.send(pet.new PetModelEvent());
І івент буде виглядати таким чином. Дуже корисно, якщо вам треба моніторити щось конкретне так, щоб не заважав нескінченний потік логів.
Environment
Поїхали далі. Наступна фіча — це Environment. Це характеристики вашого девайсу та застосунку на ньому.
File System
Доволі цікава можливість — перегляд вашої файлової системи застосунка. Тут ви можете побачити, які файли зберігає застосунок, зокрема базу даних, sharedPreferences
та інше. А також завантажити необхідні для вас файли.
Скриншоти
Усім нам треба робити час від часу скриншоти для багів. З AppSpector не треба перекидати ваш скриншот на пошту, або підключати шнурком та перекидати ним, або встановлювати додаткові програми для трансляції екрану. Для цього достатньо перейти у вкладку Screenshot и натиснути «Зберегти».
Команди
А оце моя улюблена фіча. Команди! Доволі крута штука, яка відкриває бекдор у наш застосунок. Через команди ви можете тригернути будь-що у вашому застосунку ззовні. Створити тост-меседж, зробити Api call, тригернути метод якогось класу — все це тепер можливо. Робиться це теж нескладно: наприклад, виведемо тост-меседж якийсь. Для цього спочатку додамо новий клас ShowToastCommand
:
@Command(value = "Show message", category = "Application") public class ShowToastCommand extends BaseCommand<Integer> { @Argument(isRequired = true) public String message; }
А далі зареєструємо вашу команду:
public class RestApplication extends Application { @Override public void onCreate() { super.onCreate(); AppSpector.shared().commands().register(ShowToastCommand.class, new CommandCallback<Integer, ShowToastCommand>() { @Override public void exec(@NonNull final ShowToastCommand command, @NonNull final Responder<Integer> responder) { new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), command.message, Toast.LENGTH_SHORT).show(); responder.ok(200); } }); } });
SQLite
Думали, це все? А ні! Ви ще можете моніторити бази даних. Для цього достатньо просто перейти у вкладку SQLite, і тут ви зможете не тільки переглядати, а ще й модифікувати дані, робити вибірки та загалом користуватись інструментарієм запитів до баз даних.
Shared Preferences
І, звісно, ви можете так само переглядати та модифікувати SharedPreferences
Location
Доволі часто наші застосунки використовують локацію. І для легкої підміни локації можна використовувати цю фічу. Вона дозволяє створити кастомні локації й імітувати ваш застосунок в них.
Performance
Не менш цікавою штукою є моніторинг продуктивності вашого застосунку. Як часто відмальовується екран, яке завантаження процесора чи оперативної памʼяті, який заряд батареії. Це дуже допомагає дебажити, коли у вас виникають якісь меморі ліки в застосунку.
На цьому в мене все. Сподіваюсь, для вас це корисно та ваш набір інструментарію для мобільного тестування поповнився на ще один.
Не забувайте ставити лайки підписуватись на мій канал або ютубчик.
До нових зустрічей 🙂
3 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів