Bonjour, Habr! Je vous présente la traduction de l'article
«WWDC19: Premiers pas avec le plan de test pour XCTest» de Shashikant Jagtap.

Lors de la dernière conférence de la
WWDC , Apple a présenté de nouvelles fonctionnalités intéressantes aux développeurs. Xcode 11 ajoute également des fonctionnalités impressionnantes. Vous pouvez les lire dans les
notes de version . L'un des outils les plus importants annoncés cette année est le plan de test pour les tests XCTest et Xcode UI. Dans cet article, nous examinerons en détail comment la fonctionnalité de Test Plan fonctionnera avec XCTest. Si vous souhaitez en savoir plus, regardez la vidéo de la session
«Test sur Xcode».Plan de test Xcode
Avant Xcode 11, la configuration de test faisait partie des schémas Xcode. Si les développeurs voulaient configurer différentes suites de tests pour différentes conditions, ils ont soit créé un nouveau circuit, soit édité un circuit existant pour des besoins de test spécifiques. La configuration de test était étroitement liée aux schémas Xcode, j'ai donc dû créer de nombreux schémas pour différentes tâches pendant les tests.
La nouvelle fonctionnalité de Xcode 11 permet aux développeurs et aux ingénieurs d'assurance qualité de personnaliser les tests en fonction de leurs besoins. Le plan de test vous permet de déterminer:
- quels tests exécuter dans l'assemblage;
- comment exécuter ces tests (par exemple, dans un ordre aléatoire ou alphabétique);
- Comment gérer les artefacts de test (par exemple, les pièces jointes et les captures d'écran);
- comment utiliser les outils d'exécution dans le cadre des tests.
Avec Xcode Test Plan, vous pouvez configurer des suites de tests indépendamment des schémas Xcode. Il s'agit d'une amélioration significative de la technologie de test qui peut faire passer vos tests au niveau supérieur. Jetons maintenant un coup d'œil au plan de test Xcode en action.
Le script
Supposons que nous créons un plan de test pour les tests fonctionnels avec les exigences suivantes:
- Les tests fonctionnels devraient inclure des kits pour les tests de fumée et de régression;
- Des tests de fumée devraient être effectués à Londres (Royaume-Uni) et des tests de régression à San Francisco (États-Unis);
- Les tests de fumée doivent être exécutés dans l'ordre alphabétique et les tests de régression doivent être exécutés dans un ordre aléatoire pour détecter les problèmes entre les tests.
Nous allons créer ce plan de test pour Xcode pour diverses plates-formes Apple.
Création d'un plan de test dans Xcode
Xcode 11 nous permet de définir ces exigences dans le plan de test. Xcode vous permet de créer un plan de test à partir de la configuration de schéma actuelle. Lorsque vous modifiez le circuit et passez aux étapes de test en cours, Xcode affiche une option pour créer un plan de test. Vous pouvez créer un plan de test avec les paramètres suivants:
- Plan de test vierge : crée un modèle vide et vous permet de créer votre propre plan;
- Plan de test du schéma : prend une configuration de circuit et crée un plan de test;
- Choisissez un plan de test : si vous avez déjà créé un plan de test, vous pouvez le sélectionner et l'ajouter au graphique.
Pour vous familiariser, créez un plan de test à partir de la configuration du circuit.

Vous devez nommer le plan de test et spécifier la cible de test correcte. Lorsqu'un plan de test est créé, il est attaché au circuit. Cependant, le schéma peut remplacer tout plan de test créé après avoir utilisé l'indicateur lors de l'appel de la commande Xcodebuild. Après avoir créé un plan de test, vous pouvez l'attacher à une cible spécifique. Ajoutons le plan actuel à la cible avec des tests d'interface et donnons-lui un nom.

Vous trouverez un nouveau fichier avec l'extension fonctionnelle.xctestplan. Ceci est votre plan de test. Il peut être édité si nécessaire. Vous pouvez créer un plan de test composite dans la même cible, en fonction des besoins des tests. À ce stade, nous avons un plan de test disponible pour notre cible avec des tests d'interface utilisateur.
Fichier de plan de test
Le fichier de plan de test est un simple fichier de configuration de type json qui contient des informations sur la façon de configurer vos tests pour qu'ils s'exécutent indépendamment de tout circuit. Voici les différents paramètres de configuration de test disponibles dans Plan de test. Le plan de test de base contient trois éléments clés:
- Configurations
- Objectifs de test
- Paramètres
Chaque configuration dans Test Plan contient un ensemble de tests qui lui sont associés avec des paramètres différents. Conformément aux exigences de notre plan de test, nous aurons besoin de deux configurations: une pour les tests de fumée, l'autre pour les tests de régression.
Maintenant, ouvrons le fichier Functional.xctestplan dans Xcode et renommons configuration1 en smoke-uk, puis cliquez sur le bouton «+» en haut du plan et ajoutez une autre configuration de régression-usa.
Maintenant, nous avons deux configurations dans le plan de test et le plan de test est déjà lié à une cible avec des tests d'interface utilisateur. Ajoutez des paramètres à chaque configuration. Lorsque la configuration smoke-uk est sélectionnée, nous pouvons changer l'emplacement pour Londres et apporter d'autres modifications aux paramètres. De même, changez la configuration de régression-usa. Voici à quoi ressemblera Plan de test pour déclencher une régression:

Paramètres disponibles dans le plan de test:
- Arguments - vous permet de remplacer les arguments de lancement et l'environnement de lancement pour les tests;
- Localisation - vous permet de configurer des tests pour différentes géolocalisations, paramètres régionaux et langues. C'est un cadre très cool pour tester l'internationalisation et la localisation;
- Test d'interface utilisateur / pièce jointe / exécution de test / couverture de code - options spécifiques pour les tests d'interface utilisateur et les artefacts de test. Vous pouvez décider de laisser les artefacts ou de les supprimer dès que possible. Vous pouvez également choisir l'ordre dans lequel les tests sont exécutés et le calcul de la couverture du code;
- Outils de diagnostic de code Xcode - Plusieurs outils de diagnostic de code Xcode, tels que Address Sanitizer ou Thread Sanitizer, sont disponibles pour rechercher des erreurs d'exécution. Vous pouvez également utiliser d'autres options qui vous aident à rechercher les fuites de mémoire, etc.
Création d'un plan de test à partir de zéro
Si vous ne souhaitez pas créer un plan de test à l'aide du schéma Xcode, vous pouvez toujours créer un nouveau plan de test via Xcode → Produit → Plan de test.

Après avoir créé le plan de test de cette manière, nous le rattacherons à une cible de test en lui ajoutant des tests. Dans l'exemple ci-dessous, nous avons créé un nouveau plan de test et y avons ajouté des tests.

Création d'un plan de test à partir de la source
Comme mentionné précédemment, Xcode Test Plan est juste un fichier de configuration, où nous avons installé toutes les configurations que nous avons définies. Dans notre scénario, nous avons créé Functional.xctestplan, et le code source correspondant ressemble à ceci:
{ "configurations" : [ { "name" : "smoke-uk", "options" : { "language" : "en-GB", "locationScenario" : { "identifier" : "London, England", "referenceType" : "built-in" }, "region" : "GB", "testExecutionOrdering" : "lexical" } }, { "name" : "Regression-usa", "options" : { "addressSanitizer" : { "enabled" : true }, "language" : "en", "locationScenario" : { "identifier" : "San Francisco, CA, USA", "referenceType" : "built-in" }, "region" : "US", "testExecutionOrdering" : "random" } } ], "defaultOptions" : { "codeCoverage" : false }, "testTargets" : [ { "target" : { "containerPath" : "container:XCTestPlan.xcodeproj", "identifier" : "9B0E393A22A6EB5400F666A1", "name" : "XCTestPlanUITests" } } ], "version" : 1 }
Vous pouvez créer la configuration de cette manière et l'enregistrer dans un fichier avec l'extension .xctestplan dans Xcode 11.
Lancer le plan de test
Nous comprenons maintenant le processus de création d'un fichier de plan de test dans Xcode. Voyons comment exécuter le plan de test et obtenir des rapports dans Xcode. Vous pouvez exécuter des tests via Xcode -> Product -> Test as usual, en exécutant les plans de test joints sur le schéma. Dans notre cas, cela lancera les deux configurations de test - fumée et régression.
Il existe plusieurs options de ligne de commande dans Xcodebuild pour afficher et exécuter des plans de test. Vous pouvez exécuter la commande suivante:
$ Xcodebuild -showTestPlans -scheme YOUR_SCEME
Il affichera tous les plans de test du circuit actuel. Vous pouvez également exécuter un test distinct:
$ Xcodebuild -project XCTestPlan.Xcodeproj/ -scheme XCTestPlan -destination 'platform=iOS Simulator,OS=13.0,name=iPhone XR' test -testPlan functional
Ce script exécutera le test à l'aide de la configuration du plan de test.
Rapports du plan de test
Après avoir exécuté les tests pour un plan de test spécifique, vous pouvez voir les bons rapports générés dans Xcode. Les rapports sont générés séparément pour chaque configuration.

Dans Xcode, dans la section Navigateur de test, vous pouvez filtrer les rapports par plans de test. Les rapports du plan de test Xcode peuvent être configurés sur le serveur Xcode.
Code source de démonstration disponible sur Github: XCTestPlanPlan de test Xcode: application
Brièvement sur où le plan de test Xcode peut être utilisé et comment il change en fonction de la configuration du circuit. Voici quelques exemples d'utilisation du plan de test Xcode:
- Différents types de tests, comme cela a été montré dans la démo: fumée, régression, etc.;
- Tester l'internationalisation et la localisation de l'application, par exemple, si vous souhaitez tester votre application pour plusieurs langues, vous pouvez créer différentes configurations;
- Exécution de tests lourds, tels que les performances, les tests de stress et leur séparation des tests fonctionnels. Vous pouvez configurer des tests pour travailler avec des outils de diagnostic de code ou d'autres tests non fonctionnels.
De nombreux autres scénarios sont également possibles où les plans de test Xcode peuvent aider à étendre le processus de test.
Conclusion
Avec le plan de test Xcode, XCTest peut passer au niveau supérieur avec la possibilité de gérer votre configuration et d'exécuter vos tests. Les plans de test Xcode vous permettent de mieux contrôler la plate-forme de test basée sur Apple.