web-dev-qa-db-fra.com

Exécution de cas de test XCTest (UI, Unit) individuels pour les applications iOS à partir de la ligne de commande

Est-il possible d'exécuter des cas de test individuels ou des suites de tests individuels à partir d'une cible de test d'application iOS, au lieu de tous les cas de test, à partir d'une interface de ligne de commande?

Vous pouvez exécuter des tests à partir de la ligne de commande avec xcodebuild , hors de la boîte. Lorsque vous procédez ainsi, vous exécutez tous les cas de test contenus dans la cible de test que vous avez sélectionnée.

Vous pouvez également le faire avec scan de Fastlane, bien que je pense que vous êtes limité à exécuter tous les tests du schéma de construction que vous sélectionnez (comme ci-dessus), donc ce n'est pas différent de xcodebuild.

Vous pouvez exécuter des tests spécifiques avec xctool de Facebook, mais il n'utilise pas xcodebuild et est limité à l'exécution sur des simulateurs uniquement, pas sur de véritables appareils de test iOS.

J'ai trouvé une référence à l'exécution directe de l'utilitaire de ligne de commande xctest , mais cela semble être une fonctionnalité non documentée et cible DerivedData. Ceci est compliqué par le fait que les tests d'interface, ont leurs fichiers * xctest dans un bundle XCTRunner séparé .

29
Apophenia Overload

C'est désormais possible avec Xcode 8 en utilisant le -only-testing paramètre avec xcodebuild:

xcodebuild test -workspace <path>
                -scheme <name>
                -destination <specifier>
                -only-testing:TestBundle/TestSuite/TestCase

Regardez cette vidéo: https://developer.Apple.com/videos/play/wwdc2016/409/

enter image description here

77
emoleumassi

Vous pouvez modifier le schéma pour exécuter uniquement des tests spécifiques. Sélectionnez le schéma, puis modifiez le schéma. Dans la fenêtre qui apparaît, sélectionnez la phase de test et désactivez/activez les tests individuels.

enter image description here

Vous pouvez également ajouter des schémas pour exécuter des sous-ensembles de tests. Lorsque vous exécutez les tests à partir de la ligne de commande, vous pouvez spécifier le schéma à utiliser pour le test (au moins dans fastlane).

20
dasdom

J'étais dans une situation similaire à la vôtre et j'ai construit un script python qui déclenche l'ensemble de cas de test que je veux. C'est un processus un peu élaboré mais qui fonctionne pour moi et a été très utile au fil du temps dans la mise en œuvre des méthodes DataProvider, la réexécution des cas de test ayant échoué et d'autres personnalisations dont j'avais besoin.

Quelques étapes pertinentes pour ce que vous voulez réaliser.

  1. Remplacez la méthode testInvocations présente dans XCTestCase pour effectuer les étapes ci-dessous
    • Dans cette méthode, je lis la variable d'environnement XXXX.
    • Cette variable d'environnement est essentiellement un nom de méthode de cas de test séparé par des virgules.
    • Créez maintenant NSInvocations pour chaque méthode de test que vous souhaitez déclencher.
    • Retourne le tableau des invocations.
  2. Comment passer la variable d'environnement?
    • Dans le schéma, ajoutez une variable d'environnement nommée XXXX.
    • Les fichiers de schéma sont des fichiers xml standard, écrivez un script qui modifie le fichier de schéma pour qu'il contienne les valeurs séparées par des virgules dans la variable d'environnement.

Si vous avez besoin de plus d'informations, ajoutez un commentaire, j'y répondrai.

5
Naveen Kumar S R
-only-testing:<MyXCTargetForTest>/<MyTestSuite>/<MyTestMethod>
  • MyXCTargetForTest - cible
  • MyTestSuite - nom_classe
  • MyTestMethod - nom_test

Par exemple, si Test Navigator ressemble à

enter image description here

le paramètre aura le type suivant

-only-testing:SampleAppTest/SampleAppTest/testExample

Vous pouvez également ignorer un test en utilisant: -skip-testing

En savoir plus ici

3
yoAlex5

Pour exécuter un test individuel ou une classe de test, vous pouvez cliquer sur le losange à côté dans la gouttière. C'est juste à côté de l'endroit où les numéros de ligne apparaissent si vous les avez activés.

Dans cette capture d'écran, ma souris survole le diamant. Remarquez comment il a changé en une petite flèche de lecture indiquant qu'il sera exécuté.

Hovering Over the Test Diamond

Vous pouvez ensuite réexécuter les derniers tests exécutés avec ⌃⌥⌘ G.

Pour autant que je sache, cela ne peut pas être fait via le xcodebuild.

3
Joe Masilotti