2017-03-01 1 views
1

Je tente de transmettre une valeur à mon XCUITest via la ligne de commande. Je suis conscient qu'il est possible de le faire pour un XCTest (non-UI) de la manière suivante:XCUITests - Passer des variables d'environnement via la ligne de commande

xcodebuild Test verbose -workspace MyWorkspace.xcworkspace -derivedDataPath derivedData -schéma "MyScheme" Debug -configuration SYMROOT = "$ (pwd)"/build -destination plate-forme = "iOS Simulator", nom = "iPad Air", OS = 10.2 -seulement-testing: UITest/UITest -resultBundlePath fichiers_journaux MY_SETTING = "valeur_de_motif" MY_OTHER_SETTING = " set_value_2 "

Ceci, cependant, ne semble pas fonctionner dans mon XCUITest, car le code n'entrera pas dans le bloC#ifdef MY_SETTING. Y a-t-il un autre moyen de transmettre des valeurs à mon XCUITest via une ligne de commande, ou n'est-ce pas possible?

+0

Set 'MY_SETTING' avant d'appeler 'xcodebuild ...'. – shallowThought

+0

@shallowThought cela n'a pas fonctionné. –

+0

Je me trompe. Pardon. – shallowThought

Répondre

2

Merci pour vos réponses ci-dessous, je l'ai trouvé cette réponse qui a finalement fonctionné pour moi. Le grand peuple à Applitools faire la lumière sur cette question pour moi, les étapes détaillées sont les suivantes:

L'étape la plus importante est de faire Xcode connaître les variables que nous allons passer de la ligne de commande.

Appelons notre variable TEST_VAR. Pour ce faire, procédez comme suit s'il vous plaît:

1) Ouvert à Xcode, sélectionnez TEST TARGET (cible non d'application) https://www.evernote.com/l/AR0BF8Te8_hFGYON8jKqIkv3grnwFky16tc

2) Sélectionnez « Build Settings » et ajouter dans le « préprocesseur macros » section TEST_VAR = $ (TEST_VAR)

https://www.evernote.com/l/AR1b4QRysBlDRro3sbKH1hSy6s_2s_Qkxnw

3) Ajouter nouveau paramètre définir par l'utilisateur en appuyant sur le bouton « + » et en sélectionnant « Ajouter un paramètre défini par l'utilisateur » https://www.evernote.com/l/AR0qflFqN2lIEoKVVzUUYRArM49Qb1d2TUE

4) Définir une valeur par défaut de votre nouveau paramètre personnalisé https://www.evernote.com/l/AR32JBfPDhFIN76ZlJjq1eV7v8bry9WImfE

TEST_VAR variable est maintenant prêt à l'emploi.

Ceci est un exemple de comment je le passe au test. Mon projet de test est dans un espace de travail. Donc, j'ouvre Terminal et aller au dossier de destination de mon espace de travail.

xcodebuild -workspace workspace_name \ workspace.xcworkspace/-schéma YourSchemeName -sdk iphonesimulator -destination 'plate-forme iOS = Simulator, name = iPhone 6, OS = 10.2' -seulement-test: TestTargetName/TestCaseName/TESTNAME TEST_VAR = 1988 test

A l'intérieur du test, je peux obtenir la valeur de la variable TEST_VAR comme ceci: NSLog (@ "TEST_VAR% li", (long) TEST_VAR);

Cependant, j'ai aussi besoin de définir une autre macro préprocesseur à déballer la valeur de chaîne de la valeur que je passais, comme décrit ici: Accessing the value of a Preprocessor Macro definition.

Donc, pour récupérer la valeur de chaîne, je l'ai fait quelque chose comme:

NSLog(@"TEST_VAR %s", MACRO_VALUE(TEST_VAR)) 
0

Il n'existe aucune méthode native pour transmettre des valeurs aux tests d'interface utilisateur via xcodebuild. Vous pouvez utiliser un perl one-liner pour remplacer une valeur dans votre projet avant que les tests de l'interface utilisateur en cours d'exécution:

perl -pi -e 's/valueToReplace/replacementValue/g' <path to file to modify> 

Je l'ai utilisé cette méthode dans le passé pour remplacer l'URL de base dans un projet afin d'exécuter des tests de l'interface utilisateur contre un faux serveur.

1

Cela peut être fait, oui, il vous manque deux étapes cependant.

  1. Configurer votre régime d'avoir une variable d'environnement qui a MY_SETTING ensemble comme sa valeur.
  2. if let mySetting = ProcessInfo.processInfo.environment['MY_SETTING'] { // do whatever you want because it is defined }

Une sorte de dupe de Accessing user defined variables passed in from xcodebuild command line

1

Si vous avez besoin passer les variables d'environnement de votre schéma à XCUITes, modifier le XCTestCase -> objet app.launchEnvironment, sur chaque classe de test de cette façon:

Swift 3

override func setUp(){ 
    app.launchEnvironment = ProcessInfo.processInfo.environment 
}