Всем привет! Еще одно пополнение в нашем списке курсов: «iOS-разработчик» , а это значит, что пришло время интересного, что мы нашли во время подготовки курса.
В этой заметке автор объясняет, как записывать и воспроизводить запросы API для UI-тестов.
Идти.
Я недавно интегрировал Посольство И сочный в ваших UI-тестах.
Если вам нужно запустить тесты пользовательского интерфейса для приложения, использующего эти API, в этом руководстве может быть предложена альтернатива макету/заглушке.
Проблемы:
- Приложение использует данные API для заполнения пользовательского интерфейса;
- Использование заглушек может потребовать написания и поддержки большого количества файлов;
- При использовании макетов логика приложения может отличаться от фактического сетевого вызова;
- Использование реального API подключения - это ПОЛНОЕ БЕЗУМИЕ, слишком много переменных и глюков.
Решение с Embassy + Succulent Решение состоит в том, чтобы создать локальный сервер, на который указывает ваше приложение (с помощью Embassy) и записывать/ответить на сетевые вызовы (с помощью Succulent).
При первом запуске теста будут выполнены стандартные сетевые вызовы, которые будут записаны в файл трассировки.
В следующий раз на те же сетевые вызовы будет дан автоматический ответ. Круто, не так ли? Не нужно писать моки, можно симулировать лаги и ошибки, и все это выполняется внутри машины сборки, внутри XCtest! Как это использовать? 1. Скачайте и установите под Succulent. На момент написания этой статьи модуль недоступен на сайте Cocoapods.com, поэтому вам необходимо скачать исходный код и добавить его в файл модуля следующим образом:
Succulent требует посольства и будет установлен автоматически.target “UI Tests” do inherit! :search_paths pod ‘Succulent’, :path => ‘Succulent/’ end
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, просматривать все сетевые запросы и изменять их по мере необходимости.
Надеюсь, эта статья была полезна, вот пицца:
КОНЕЦ
Как всегда, мы приветствуем комментарии, вопросы и т.п.
здесь или вы можете посмотреть День открытых дверей и задать вопрос для учителя там.
Теги: #iOS #разработка iOS #Swift #посольство #суккулент
-
Закалка На Практике
19 Oct, 24 -
Установка Kubernetes В Облаке Hetzner
19 Oct, 24 -
Так Кому Же Нужен Ipad?
19 Oct, 24 -
Еженедельный Геймдев: #19 — 23 Мая 2021 Г.
19 Oct, 24 -
Drtoller.com - Социальная Поисковая Система
19 Oct, 24 -
Steam, Который Иногда Не Работает
19 Oct, 24