Тесты Пользовательского Интерфейса В Xcode С Помощью Embassy И Succulent

Всем привет! Еще одно пополнение в нашем списке курсов: «iOS-разработчик» , а это значит, что пришло время интересного, что мы нашли во время подготовки курса.

В этой заметке автор объясняет, как записывать и воспроизводить запросы API для UI-тестов.



Тесты пользовательского интерфейса в Xcode с помощью Embassy и Succulent

Идти.

Я недавно интегрировал Посольство И сочный в ваших UI-тестах.

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

Проблемы:

  • Приложение использует данные API для заполнения пользовательского интерфейса;
  • Использование заглушек может потребовать написания и поддержки большого количества файлов;
  • При использовании макетов логика приложения может отличаться от фактического сетевого вызова;
  • Использование реального API подключения - это ПОЛНОЕ БЕЗУМИЕ, слишком много переменных и глюков.



Тесты пользовательского интерфейса в Xcode с помощью Embassy и Succulent

Решение с Embassy + Succulent Решение состоит в том, чтобы создать локальный сервер, на который указывает ваше приложение (с помощью Embassy) и записывать/ответить на сетевые вызовы (с помощью Succulent).

При первом запуске теста будут выполнены стандартные сетевые вызовы, которые будут записаны в файл трассировки.

В следующий раз на те же сетевые вызовы будет дан автоматический ответ. Круто, не так ли? Не нужно писать моки, можно симулировать лаги и ошибки, и все это выполняется внутри машины сборки, внутри XCtest! Как это использовать? 1. Скачайте и установите под Succulent. На момент написания этой статьи модуль недоступен на сайте Cocoapods.com, поэтому вам необходимо скачать исходный код и добавить его в файл модуля следующим образом:

  
  
  
   

target “UI Tests” do inherit! :search_paths pod ‘Succulent’, :path => ‘Succulent/’ end

Succulent требует посольства и будет установлен автоматически.

2. Создайте новый файл теста пользовательского интерфейса и скопируйте инструкции из Сочный GitHub .

В результате должен получиться такой файл:

import Succulent @testable import TestAppUITests class SucculentTestUITest: XCTestCase { private var succulent: Succulent! var session: URLSession! var baseURL: URL! /// The name of the trace file for the current test private var traceName: String { return self.description.trimmingCharacters(in: CharacterSet(charactersIn: "-[] ")).

replacingOccurrences(of: " ", with: "_") } /// The URL to the trace file for the current test when running tests private var traceUrl: URL? { let bundle = Bundle(for: type(of: self)) return bundle.url(forResource: self.traceName, withExtension: "trace", subdirectory: "Traces") } /// The URL to the trace file for the current test when recording private var recordUrl: URL { let bundle = Bundle(for: type(of: self)) let recordPath = bundle.infoDictionary!["TraceRecordPath"] as! String return URL(fileURLWithPath: "\(recordPath)/\(self.traceName).

trace") } override func setUp() { super.setUp() continueAfterFailure = false if let traceUrl = self.traceUrl { // Replay using an existing trace file succulent = Succulent(traceUrl: traceUrl) } else { // Record to a new trace file succulent = Succulent(recordUrl: self.recordUrl, baseUrl: URL(string: "https//base-url-to-record.com/")!) } succulent.start() let app = XCUIApplication() app.launchEnvironment["succulentBaseURL"] = " http://localhost:\(succulent.actualPort)/ " app.launch() } override func tearDown() { super.tearDown() } }

При запуске Succulent есть возможность указать базовый URL-адрес, в результате чего все запросы, включающие базовый URL-адрес, будут записываться, а все остальные игнорироваться.

3. Добавьте следующую строку в Info.plist вашего целевого объекта тестирования пользовательского интерфейса:

<key>TraceRecordPath</key> <string>$(PROJECT_DIR)/Succulent/Traces</string>

4. Направьте приложение на локальный сервер.

Чтобы сделать это внутри вашего основного приложения, вам необходимо проверить, существует ли и настроена ли переменная среды «succulentBaseURL».

Он показывает URL-адрес вашего локального веб-сервера и настраивается с помощью функции setUp, которая была скопирована выше в пункте 2.

#if DEBUG if let localServerUrl = ProcessInfo.processInfo.environment[“succulentBaseURL”] { return URL(string: localServerUrl)! } #endif

Вот пожалуй и всё! Теперь, когда вы создадите простой тест и запустите его, Succulent запишет запрос API и создаст файл .

trace в папке Traces целевого каталога вашего теста пользовательского интерфейса.

В следующий раз, когда вы запустите тот же тест, он проверит, существует ли файл, и запустит его.

Вы можете открывать файлы .

trace непосредственно из Xcode, просматривать все сетевые запросы и изменять их по мере необходимости.

Надеюсь, эта статья была полезна, вот пицца:

Тесты пользовательского интерфейса в Xcode с помощью Embassy и Succulent

КОНЕЦ Как всегда, мы приветствуем комментарии, вопросы и т.п.

здесь или вы можете посмотреть День открытых дверей и задать вопрос для учителя там.

Теги: #iOS #разработка iOS #Swift #посольство #суккулент

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.