Обзор фреймворков для iOS тестирования

Потребность в надежных инструментах в области iOS тестирования напрямую связана со следующими моментами:

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

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

В этом обзоре мы рассмотрим 8 фреймворков для тестирования iOS приложений.

Действительно ли нужны фреймворки для iOS тестирования?

В 2016 году компания Apple продала свой миллиардный мобильный телефон. К январю 2019 года 900 миллионов человек активно использовали iPhone в повседневной жизни. Два года спустя это число выросло до 1,65 миллиарда. Это огромная цифра! И она продолжает расти из года в год.

Вдобавок ко всему, эти цифры относятся только к iPhone. Устройства под управлением iOS также включают iPad (до появления iPadOS), а их на рынке насчитывается более 500 миллионов. Устройства могут сильно различаться техническим характеристикам и мощностью процессора. Но главное — у них разный размер экрана, что является основной проблемой при работе с приложениями iOS.

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

Эти проблемы решают фреймворки для iOS тестирования. Они разработаны, чтобы облегчить процесс.

Что такое фреймворк для iOS тестирования?

Фреймворк для тестирования — это инструмент, помогающий эффективно его проводить. 

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

Важность использования фреймворков для тестирования iOS

Давайте предположим, что нужно протестировать iOS-приложение вручную. Что может пойти не так?

  • Расходы: цены на iPhone на рынке мобильных устройств значительно выше среднего. Покупка всех необходимых устройств или их аренда выльется в “копеечку”. Если вы разрабатываете приложение самостоятельно или у вас стартап с небольшой командой, на это может уйти значительная часть средств.
  • Потеря времени: автоматизация тестирования экономит время. Фреймворки помогают с отладкой, предоставляют готовые сниппеты — это повышает скорость разработки тестов.
  • Расходы на поддержку: поддержка приложения — это то, о чем нужно думать заранее, еще до релиза. Софт необходимо обновлять, изменять, а иногда и полностью переписывать на основе новых технологий. Это потребует изменения существующих тестов и создания новых. Расходы на поддержку могут быть в значительной степени снижены, если тестировщик использует фреймворки.
  • Аналитика: использование фреймворков позволяет получить подробную аналитику в отношении проводимых тестов. Эти аналитические данные очень важны и полезны для определения качества тестирования. Например, метрика покрытия поможет понять, какой объем кода покрыт тестами. Если она слишком низкая, то и качество тестирования низкое.

Теперь, когда мы убедились в необходимости использования фреймворков для iOS тестирования, давайте рассмотрим варианты, которые есть на рынке.

Лучшие фреймворки для iOS тестирования

В этом разделе подробно описаны лучшие фреймворки для iOS тестирования, которые популярны среди тестировщиков в настоящее время:

Appium

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

Как говорится на официальном сайте, «Appium построен на идее, что тестирование нативных приложений не должно требовать установки SDK». iOS тестирование в Appium выполняется с помощью JSONWireProtocol и Selenium WebDriver.

Плюсы Appium

  • поскольку используется WebDriver, Appium поддерживает большинство языков программирования;
  • благодаря открытому исходному коду фреймворк может похвастаться большим и активным комьюнити;
  • работает с нативными приложениями на Android, iOS, а также с мобильным веб-тестированием;
  • одно и то же API для автоматизации тестирования под Android и iOS;
  • все из коробки — для работы Appium не требуется установка другого ПО;
  • Appium может работать как с эмуляторами, так и с реальными устройствами;
  • хорошо интегрируется с инструментами CI/CD.

Минусы Appium

  • нужно следить, чтобы все open-source пакеты, установленные в Appium, должны иметь совместимые версии;
  • высокий порог входа;
  • медленное выполнение тестов на iOS;

Пример кода на Appium

text_field = driver.find_element_by_id('TextField1')
 assert text_field.get_attribute('value') is None
 text_field.send_keys('Hello World!')
 assert 'Hello World!' == text_field.get_attribute('value')

Итог

Appium — отличный и очень популярный инструмент как для iOS, так и для Android тестирования. Используется уже давно и имеет хорошую поддержку. Имеет открытый исходный код и способен выполнять большинство задач, необходимых тестировщику.

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

TestProject

TestProject — фреймворк для iOS тестирования на базе Appium и Selenium. Подходит для тестирования веба, Android-приложений и API. При этом не обязательно использовать XCode. Для работы с этим модулем нужны: TestProject агент и учетная запись разработчика Apple для физических устройств или macOS и Xcode для симуляторов.

Плюсы TestProject

  • низкий порог входа; 
  • быстрое выполнение тестов;
  • поддержка устройств и симуляторов iOS;
  • для старта требуется минимум настроек, поэтому можно быстро приступить к работе;
  • включает рекордер TestProject, оснащенный локатором элементов и технологией искусственного интеллекта, что повышает эффективность тестирования;
  • может быть запущен на разных операционных системах;
  • поддерживает все популярные языки программирования. Есть SDK для Python, Java, JavaScript и C#.

Минусы TestProject

  • документация иногда выпускается с опозданием. Иногда придется самостоятельно изучать инструмент или обращаться в поддержку;
  • для разработки собственных расширений нужны навыки программирования.

Итог

TestProject — это отличный бесплатный фреймворк, пользующийся признанием многих тестировщиков. Он простой в понимании и не требует времени на базовую настройку. Преимущество TestProject в том, что он не заставляет  использовать конкретную платформу или язык. Он поддерживает все популярные языки программирования — Python, Java, JavaScript и C#. Гибкость и, одновременно, простота фреймворка делают его привлекательным для iOS тестирования.

EarlGrey

EarlGrey — open-source инструмент, разработанный компанией Google для тестирования своих собственных iOS-приложений, таких как YouTube, Google Calendar и т.д. EarlGrey 1.0 теперь официально устарел, и на данный момент рекомендуется использовать версию 2.0.

В версии EarlGrey 2.0 тестировщики могут объединить тесты EarlGrey с XCUITest, который официально рекомендуется Apple. Кроме того, как указано в презентации Google, «Цель EarlGrey 2.0 — тестирование пользовательского интерфейса, а не модульные тесты, как в EarlGrey 1.0».

Плюсы EarlGrey

  • может автоматически синхронизироваться с сетью и компонентами пользовательского интерфейса;
  • тесты можно запускать непосредственно из XCode или через командную строку;
  • открытый исходный код.

Минусы EarlGrey

  • для работы с некоторыми API может потребоваться писать код;
  • Google собирает данные о выполнении тестов и другую аналитику. Это можно отключить, но не все об этом знают;

Пример кода

var firstMatch = true
  let matches: MatchesBlock = { (element: AnyObject!) -> Bool in
    if firstMatch {
      firstMatch = false
      return true
    }
    return false
  }

Итог

EarlGrey — отличный инструмент для тестирования iOS-приложений. Он легко интегрируется с другими приложениями Google.

XCTest/XCUITest

XCTest — инструмент, созданный Apple для iOS тестирования. Он полностью совместим с XCode. XCTest универсален — c помощью него можно проводить как unit-тесты, так и тестировать производительность и пользовательский интерфейс.

Плюсы XCTest

  • комплексное решением для разных типов тестирования;
  • для разработчиков iOS-софта тестирование упрощается благодаря использованию одного и того же языка — Objective-C/Swift; 
  • выполнение тестов происходит быстрее, чем в других системах тестирования;
  • XCTest легко освоить, если тестировщик знаком с Objective-C/Swift;
  • XCUITest позволяет записывать тест-кейсы прямо с UI и автоматически создает код на их основе;
  • легко интегрируется с CI/CD.

Минусы XCTest

  • ограниченная поддержка языков программирования; 
  • высокий порог вхождения;
  • не кроссплатформенный;
  • для тестирования в XCTest понадобится опыт программирования;
  • не поддерживается Deep Linking (глубинное связывание).

Пример кода

class TableValidationTests: XCTestCase {
    /// Tests that a new table instance has zero rows and columns.
    func testEmptyTableRowAndColumnCount() {
        let table = Table()
        XCTAssertEqual(table.rowCount, 0, "Row count was not zero.")
        XCTAssertEqual(table.columnCount, 0, "Column count was not zero.")
    }
}

Итог

XCTest/XCUITest похож на все, что создает Apple — закрытый исходный код, ограничения по поддерживаемым платформам и языкам программирования. Это большой недостаток для тех, кто привык тестировать приложения с помощью кроссплатформенных фреймворков с выбранным ими языком. Но XCTest идеально подойдет для тех, кто разрабатывает iOS-приложения и работает с XCode для отладки.

Detox

Detox — это инструмент end-to-end тестирования, который используется для тестирования методом серого ящика.

Detox обладает двумя очень сильными преимуществами. Во-первых, с его помощью можно тестировать приложения, запущенные на симуляторе; он симулирует поведение реального пользователя. Во-вторых, Detox основан на Javascript, поэтому тестировщик может запускать все, что его поддерживает.

Плюсы Detox

  • кросс-платформенность;
  • симуляция поведения реального пользователя;
  • хорошо интегрируется с CI/CD;
  • очень простые и удобные API, написанные на Javascript;
  • открытый исходный код с большим количеством дополнений.

Минусы Detox

  • тестирование на реальных устройствах iOS все еще не поддерживается.

Пример кода

describe('Login flow', () => {  
  it('should login successfully', async () => {
    await device.reloadReactNative();    
    await element(by.id('email')).typeText('john@example.com');
    await element(by.id('password')).typeText('123456');
    await element(by.text('Login')).tap();      
    await expect(element(by.text('Welcome'))).toBeVisible();
    await expect(element(by.id('email'))).toNotExist();
  });  
});

Итог

Detox предлагает метод серого ящика и end-to-end тестирование на Javascript, который является одним из самых популярных языков в мире. Это большой плюс. Единственная проблема в том, что он не поддерживает тестирование на реальных устройствах iOS, а использует симулятор.

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

Calabash

Calabash пользуется большой популярностью среди разработчиков благодаря стабильности и подходу к построению тестов. Calabash использует Cucumber, благодаря чему его могут использовать даже люди, незнакомые с программированием. Поддерживает много языков программирования, может работать как c iOS, так и c Android приложениями.

Плюсы Calabash

  • открытый исходный код; 
  • постоянно развивается;
  • поддерживает Python, C#, PHP, Ruby, Perl и многие другие языки;
  • позволяет писать тесты с использованием BDD-подхода, что очень полезно для людей, не владеющих программированием;
  • это кроссплатформенный инструмент; позволяет проводить одни и те же тесты на разных платформах;
  • поддерживает как эмуляторы iOS, так и физические устройства.
  • известен своей стабильностью.

Минусы Calabash

  • для использования Calabash за пределами BDD-функционала нужно знать программирование; 
  • для запуска приложения требуется время; 
  • небольшое комьюнити.

Пример кода

Scenario: Money Transfer Changes Balance in Wallet
Given that I have $100 in my wallet
And I add $200 to my wallet
My wallet balance increases to $300

Итог

Calabash завоевал большую популярность благодаря поддержке Behavior Driven Develpment. BDD-подход позволяет писать тесты без знания языков программирования и создания сложной логики. Но тестировщики с опытом программирования часто критикуют его по той же причине. Также Calabash не имеет большого комьюнити, как, например, Appium.

OCMock

OCMock — проект с открытым исходным кодом, который упрощает iOS-тестирование с помощью mock-объектов. OCMock расшифровывается как Objective-C Mock. С его помощью тестировщик может создавать mock-объекты, используя язык Objective-C.

OCMock активно развивается и включает в себя три типа моков — stubs (заглушки), dynamick mocks (динамические моки), patiail mocks (частичные моки). Примеры и определения можно изучить на официальном сайте.

Плюсы OCMock

  • легко освоить;
  • качественная документация; 
  • для разработки на OCMock используется Objective-C, что облегчает работу тем, кто знаком с iOS-разработкой; 
  • открытый исходный код; 
  • активно разрабатывается и улучшается.

Минусы OCMock

  • подходит только для создания mock-объектов; 
  • подходит как дополнительный инструмент для iOS тестирования.

Пример кода

id userDefaultsMock = OCMClassMock([NSUserDefaults class]);
// set it up to return a specific value when stringForKey: is called
OCMStub([userDefaultsMock stringForKey:@"MyAppURLKey"]).andReturn(@"http://testurl");
// set it up to return the specified value no matter how the method is invoked
OCMStub([userDefaultsMock stringForKey:[OCMArg any]]).andReturn(@"http://testurl");

Итог

OCMock не является «комплексным решением для тестирования». Но он работает со многими фреймворками и хорошо дополняет их. Например, расширяет возможности XCTest и других подобных инструментов, которые его поддерживают.

Если вы уже знакомы с фреймворком для iOS тестирования и хотите усовершенствовать его, добавив OCMock, то это действительно отличный выбор: он очень помогает в создании mock-объектов. Но если вы ожидаете от OCMock комплексного решения для тестирования, то будете разочарованы.

KIF

KIF — это фреймворк для интеграционного тестирования iOS-приложений. KIF расшифровывается как «keep it functional» и используется для тестирования пользовательского интерфейса, как и XCTest. При этом он использует недокументированные API, поэтому его не стоит использовать при разработке.

Плюсы KIF

  • поддержка Objective-C упрощает работу разработчикам;
  • имитирует действия пользователя;
  • KIF не требует дополнительной настройки конфигурации;
  • легко интегрируется с инструментами XCode;
  • тесты KIF работают быстро.

Минусы KIF

  • поддерживает только Objective C;
  • небольшое комьюнити и слабая поддержка;
  • KIF не поддерживает популярные фреймворки, такие как Cucumber.

Пример кода

@implementation LoginTests
- (void)beforeEach
{
    [tester navigateToLoginPage];
}
- (void)afterEach
{
    [tester returnToLoggedOutHomeScreen];
}
- (void)testSuccessfulLogin
{
    [tester enterText:@"user@example.com" intoViewWithAccessibilityLabel:@"Login User Name"];
    [tester enterText:@"thisismypassword" intoViewWithAccessibilityLabel:@"Login Password"];
    [tester tapViewWithAccessibilityLabel:@"Log In"];
    // Verify that the login succeeded
    [tester waitForTappableViewWithAccessibilityLabel:@"Welcome"];
}
@end

Сравнительная таблица фреймворков для iOS тестирования

Чтобы обобщить все, что было в статье, мы собрали перечисленные фреймворки в сравнительной таблице:

ФреймворкКросс-платфоменоостьOpen-sourceПоддержка языков программированияПлатформыСложность настройки
AppiumДаДаОчень высокаяW,M,LСложная
EarlGreyНетДатолько Objective-CW,M,LСредняя
XCTestНетНеттолько Objective-CW,M,LЛегкая
TestProjectДаЧастичноОчень высокаяW,M,LОчень легкая
DetoxДаДаВысокаяW,M,LСредняя
CalabashДаДаОчень высокаяW,M,LСредняя
OCMockНетДатолько Objective-CW,M,LЛегкая
KIFНетДатолько Objective-CW,M,LЛегкая
в колонке «Платформы»: W — Windows, M — MacOS, L — Linux

Заключение

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

Мы считаем, что «плюсы» и «минусы» программного обеспечения могут быть разными — они зависят от конкретных пользователей. Если тестировщик хорошо владеет Objective-C, он удовольствием выберет фреймворк для iOS тестирования с поддержкой Objective-C (даже если это единственный поддерживаемый язык).

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

Надеемся, что эта статья внесет ясность в особенности перечисленных фреймворков.

Удачного тестирования!

Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

1 КОММЕНТАРИЙ

Подписаться
Уведомить о
guest

1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Эндрю
Эндрю
1 год назад

этой статье на англ 10 лет? Какой только obj-c для xctest и kif

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас