web-dev-qa-db-fra.com

Impossible d'exécuter des tests en ligne de commande via xcodebuild

J'essaie de créer et d'exécuter des scénarios de test à l'aide de la ligne de commande pour les scénarios de test iOS. J'ai donné la commande suivante:

xcodebuild -target AppEngineTests -configuration Debug -sdk iphonesimulator TEST_AFTER_BUILD=YES clean build

Il construit l'application mais les tests ne sont pas exécutés.

quelqu'un pourrait-il s'il vous plaît aider? Merci

19
Sunny

J'ai trouvé que la propriété name nécessitait davantage de spécifications.

xcodebuild test -workspace #{WORKSPACE_FILE} -scheme #{TEST_SCHEME} -destination 'platform=iOS Simulator,name=iPhone Retina (4-inch),OS=7.0'

Était ce qui a finalement fonctionné pour moi. iPhone était limité et/ou imprévisible.

Comme une autre affiche (ne trouve pas la citation) mentionnée, la «plateforme» correspond vaguement au diviseur de la liste des cibles, «nom» correspond à la sous-sélection et le paramètre OS correspond au côté droit du chevron dans la même liste moins 'iOS'. 

La documentation est suggestive et semble faire autorité à première vue sans être réellement complète ou correcte, malheureusement. 

Étonnant quelle galère c'était. Et comment cela a fonctionné une fois que la bonne invocation a été réalisée. 

18
tooluser

Vous n'avez pas indiqué quelle version de Xcode vous utilisez, mais depuis que vous avez tagué votre question avec "xctest", il semble prudent de supposer que vous avez Xcode 5 ou une version ultérieure.

Xcode 5 améliore considérablement la prise en charge de l'exécution de tests dans xcodebuild, via le verbe test. Vous devrez spécifier un scheme et destination à la place d'une cible lors de l'utilisation de ce verbe, car il agit exactement comme la commande Test de l'EDI Xcode.

Ainsi, par exemple, en supposant que votre projet ou votre espace de travail, AppEngine, comporte un schéma partagé dont l'action de schéma de test est correctement configurée, vous ne pourrez utiliser que

xcodebuild test -scheme AppEngine -destination 'platform=iOS Simulator,name=iPad'

pour exécuter tous les tests unitaires configurés pour le schéma AppEngine dans le simulateur iOS configuré en tant qu'iPad exécutant la dernière version d'iOS. Plus de détails sur la syntaxe du spécificateur de destination se trouvent dans la page de manuel xcodebuild . (Vous pouvez même l'utiliser pour exécuter des tests sur des périphériques iOS connectés!)

Les scripts précédemment utilisés pour exécuter des tests unitaires ont été ajustés pour renvoyer les utilisateurs au verbe test car ces améliorations sont destinées à tous.

12
Chris Hanson

Notez que vous pouvez utiliser instruments -s devices pour obtenir une liste de tous les périphériques disponibles.

Vous devez également transmettre la chaîne sous la forme -destination 'platform=iOS Simulator,id=ID_OF_THE_SIMULATOR' car, pour une raison quelconque, il n’aime pas les espaces entre les paires clé = valeur.

1
topLayoutGuide

A atterri ici à la recherche d'une résolution d'erreur similaire à xcodebuild. En tant qu’additif, vous pouvez également transmettre une clé unique = val à -destination, par exemple -destination 'platform=iOS' et xcodebuild vous indiquera toutes les alternatives disponibles pour le schéma.

λ ~/Development/app-ios/ task/JIOS-400-Earl-Grey-Spike* xcodebuild -workspace app.xcworkspace -scheme app -destination 'platform=iOS'  -derivedDataPath "build" build-for-testing

User defaults from command line:
    IDEDerivedDataPathOverride = /Users/schoudhary/Development/app-ios/build

xcodebuild: error: Unable to find a destination matching the provided destination specifier:
        { platform:iOS }

    Missing required device specifier option.
    The device type “Generic iOS Device” requires that either “name” or “id” be specified.
    Please supply either “name” or “id”.

    Available destinations for the "App" scheme:
        { platform:iOS Simulator, id:D248DB01-A852-4360-A9C0-2D71AFE478D7, OS:10.3, name:iPad Air }
        { platform:iOS Simulator, id:CE87AF5A-141C-43DA-AE61-AF53593F37F7, OS:10.3, name:iPad Air 2 }
        { platform:iOS Simulator, id:E93B43E4-D24E-4927-B9EE-0375E15DCBD5, OS:10.3, name:iPad Pro (9.7 inch) }
        { platform:iOS Simulator, id:6D71DB17-0FE2-4D5E-BEE6-CC696445BA11, OS:10.3, name:iPad Pro (12.9 inch) }
        { platform:iOS Simulator, id:F7E37EF4-5E72-438A-A286-216C20158B47, OS:10.3, name:iPhone 5 }
        { platform:iOS Simulator, id:24653844-AE99-4B5B-8332-9FFD2208172F, OS:10.3, name:iPhone 5s }
        { platform:iOS Simulator, id:FD2089A4-BF3F-4F98-8E33-B7EFDCFE5B4D, OS:10.3, name:iPhone 6 }
        { platform:iOS Simulator, id:6EF0DFBD-E99E-4EB3-9C51-6E749F41B6E7, OS:10.3, name:iPhone 6 Plus }
        { platform:iOS Simulator, id:846E631C-6285-4B91-9BA6-1AB6E66C88DB, OS:10.3, name:iPhone 6s }
        { platform:iOS Simulator, id:A6943ADC-F6EF-42F6-9958-D966DFC419FC, OS:10.3, name:iPhone 6s Plus }
        { platform:iOS Simulator, id:B41ABED0-7554-438A-97AC-F34943ED4D79, OS:10.3, name:iPhone 7 }
        { platform:iOS Simulator, id:20F1582C-0D19-4F42-9DAD-43138FB923B9, OS:10.3, name:iPhone 7 Plus }
        { platform:iOS Simulator, id:683BB5CA-E0A8-4CE4-B0DD-AED4C4295B90, OS:10.3, name:iPhone SE }

    Ineligible destinations for the "App" scheme:
        { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
        { platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Generic iOS Simulator Device }

juste un autre moyen utile d'obtenir la bonne destination.

0
Sushant

J'ai eu un problème similaire avec la construction de Xcode. Dans mon cas, le problème était que je n'avais aucun test associé à mon schéma.

S'il vous plaît voir ma SO réponse (avec diagramme) ici

0
David Hunt