2017-02-23 2 views
2

Est-il possible d'exécuter des tests ou un flux logique avant l'exécution d'une suite dans Protractor? Par exemple, je veux décomposer mes tests Protractor en une série de suites pour tester différents aspects de mon application. Disons que Jenkins va exécuter toute la suite de tests avant le déploiement, mais les développeurs individuels exécuteront uniquement les suites pertinentes pour le travail qu'ils font. Mais je veux que la plupart de mes suites puissent se connecter à l'application, et je préfère ne pas répéter cette logique de connexion dans chaque suite. Y a-t-il un moyen d'avoir un test de pré-suite qui fonctionne comme se connecter avant que tous les tests soient exécutés?Exécuter certaines fonctionnalités avant toutes les suites de tests dans Protractor

Je pensais à la liste juste ce où je définir mes suites dans ma config comme Protractor

suites: { 
    'my-profile': [ 
    './e2e/login/login-as-customer.e2e-spec.js', 
    './e2e/my-profile/my-profile-change-password.e2e-spec.js', 
    './e2e/my-profile/my-profile-change-username.e2e-spec.js' 
    ], 
    'my-contacts': [ 
    './e2e/login/login-as-customer.e2e-spec.js', 
    './e2e/my-contacts/add-contact.e2e-spec.js', 
    './e2e/my-contacts/remove-contact.e2e-spec.js' 
    ] 
} 

Mais le problème est que je ne veux pas avoir à se reconnecter à chaque fois que nous courons l'ensemble ensemble de tests, ou si un développeur souhaite exécuter plusieurs suites ensemble. Ce dont j'ai besoin est une étape de pré-suite en quelque sorte.

Est-ce possible avec Protractor?

+0

Vous ne pouvez pas utiliser 'beforeAll()' dans vos spécifications pour vous connecter? – Gunderson

+1

Je pense que cela entraînerait toujours l'ouverture de session avant chaque suite de tests, même lorsqu'ils sont exécutés ensemble. Je parle de faire cela avant toutes les suites de tests, pas avant toutes les spécifications. –

Répondre

3

Vous recherchez la fonction onPrepare() dans votre fichier conf. La fonction est exécutée avant les suites de tests. Voici un exemple tiré de https://github.com/angular/protractor/blob/master/spec/withLoginConf.js

onPrepare: function() { 
    browser.driver.get(env.baseUrl + '/ng1/login.html'); 

    browser.driver.findElement(by.id('username')).sendKeys('Jane'); 
    browser.driver.findElement(by.id('password')).sendKeys('1234'); 
    browser.driver.findElement(by.id('clickme')).click(); 

    // Login takes some time, so wait until it's done. 
    // For the test app's login, we know it's done when it redirects to 
    // index.html. 
    return browser.driver.wait(function() { 
     return browser.driver.getCurrentUrl().then(function(url) { 
     return /index/.test(url); 
     }); 
    }, 10000); 
    } 
+0

Existe-t-il un moyen de spécifier un 'onPrepare' pour certaines suites de tests et un autre' onPrepare' pour d'autres? Par exemple, si certains tests doivent se connecter avec un type de compte, d'autres doivent se connecter avec un autre? –

+2

Pas vraiment, non. Pour cela, je recommande d'avoir un fichier conf séparé pour chaque suite de tests. – finspin

+1

Vous pouvez utiliser l'objet params dans conf.js pour fournir des données spécifiques à l'exécution du test, telles que le login ou le mot de passe, etc. Accéder à ces paramètres en utilisant - browser.params.login.email - pour l'objet param défini comme - params: { { email: 'default', mot de passe: 'default' }} https://github.com/angular/protractor/blob/master/lib/config.ts https://moduscreate.com/protractor_parameters_adding_flexibility_automation_tests/ – Grasshopper