Tests d'interface utilisateur dans Xcode avec Embassy et Succulent

Bonjour Ă  tous!

Autre nouveauté dans la liste de nos cours: «iOS Developer» , ce qui signifie que le temps est venu pour des piÚces intéressantes que nous avons trouvées lors de la préparation du cours. Dans cet article, l'auteur analyse comment enregistrer et lire les demandes d'API pour les tests d'interface utilisateur.



Allons-y.

J'ai récemment intégré Embassy et Succulent dans mes tests d'interface utilisateur. Si vous devez exécuter des tests d'interface utilisateur pour une application qui utilise ces API, ce guide peut offrir une alternative à mock / stub.

Les problĂšmes:

  • L'application utilise les donnĂ©es API pour remplir l'interface utilisateur;
  • L'utilisation de stubs peut nĂ©cessiter l'Ă©criture et la maintenance d'un grand nombre de fichiers;
  • Lorsque vous utilisez des simulations, la logique d'application peut diffĂ©rer de l'appel rĂ©seau rĂ©el;
  • Utilisation de cette API de connexion - EXACTEMENT EXCLUE, trop de variables et de plantages


Ambassade + Solution succulente

La solution consiste à créer un serveur local vers lequel votre application est dirigée (en utilisant Embassy) et à enregistrer / répondre aux appels réseau (en utilisant Succulent).

La premiÚre fois que vous exécutez le test, des appels réseau standard seront effectués et écrits dans le fichier de trace.

La prochaine fois, ces mĂȘmes appels rĂ©seau recevront une rĂ©ponse automatique. Cool, non? Pas besoin d'Ă©crire des simulations, vous pouvez simuler des dĂ©calages et des erreurs, et tout cela s'exĂ©cute Ă  l'intĂ©rieur de la machine de construction, Ă  l'intĂ©rieur de XCtest!

Comment l'utiliser?

1. Téléchargez et installez sous Succulent. Au moment d'écrire ces lignes, il n'y avait pas de pod sur cocoapods.com, vous devez donc télécharger la source et l'ajouter à votre sous-fichier comme suit:

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

Embassy est requis par Embassy et il sera installé automatiquement.

2. Créez un nouveau fichier d'interface utilisateur de test et copiez les instructions de Succulent GitHub . Par conséquent, vous devriez obtenir ce fichier:

 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() } } 

Lorsque vous démarrez Succulent, vous pouvez spécifier l'URL de base, grùce à laquelle toutes les demandes, y compris l'URL de base, seront enregistrées et toutes les autres seront ignorées.

3. Ajoutez la ligne suivante Ă  la cible Info.plist de votre interface utilisateur de test:

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

4. Dirigez l'application vers le serveur local.

Pour ce faire dans votre application principale, vous devez vérifier si la variable d'environnement «succulentBaseURL» existe et si elle est configurée.

Il affiche l'url de votre serveur Web local et est configuré dans la fonction setUp, qui a été copiée ci-dessus à l'étape 2.

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

C'est tout, peut-ĂȘtre!

Maintenant, lorsque vous effectuez un test simple et l'exĂ©cutez, Succulent Ă©crit la demande d'API et crĂ©e un fichier .trace dans le dossier Traces du rĂ©pertoire cible de votre test d'interface utilisateur. La prochaine fois que vous exĂ©cuterez le mĂȘme test, il vĂ©rifiera si le fichier existe et l'exĂ©cutera.

Vous pouvez ouvrir des fichiers .trace directement Ă  partir de Xcode, regarder toutes les requĂȘtes rĂ©seau et les modifier si nĂ©cessaire.

J'espÚre que l'article s'est avéré utile, voici la pizza:



LA FIN

Comme d'habitude, nous attendons des commentaires, des questions, etc. ici ou vous pouvez regarder Open Day et poser une question Ă  l' enseignant lĂ -bas.

Source: https://habr.com/ru/post/fr412955/


All Articles