how run cucumber with jenkins
Ce didacticiel fournit un aperçu complet de Cucumber avec Jenkins et une feuille Excel pour expliquer l'intégration de Cucumber Jenkins :
Dans ce tutoriel, nous discuterons de Cucumber avec Jenkins et une feuille Excel. Nous espérons que ce tutoriel vous sera utile.
Ce que vous apprendrez:
- Concombre avec Jenkins
- Configuration Jenkins
- Rapport Jenkins sur le concombre
- Concombre Excel
- Observation
- Conclusion
- lecture recommandée
Concombre avec Jenkins
Automatisation des scripts de test
La configuration suivante doit être effectuée.
Fichier de caractéristiques
Fonctionnalité:
En tant qu'utilisateur
Je veux pouvoir ajouter de nouveaux clients dans le système.
Pour que je puisse ajouter des données comptables pour ce client.
Fond:
Étant donné que je suis sur la page d'accueil de Github.
Lorsque je spécifie le nom d'utilisateur comme «xxxxxxxxxx» et le mot de passe comme «xxxxxxx».
Et cliquez sur le bouton Connexion.
@Fumée
Scénario: Modification du profil.
Étant donné que je clique sur l'option Votre profil.
Lorsque je clique sur le bouton Modifier le profil.
Et a téléchargé une nouvelle image.
Ensuite, je devrais voir une nouvelle photo de profil.
@Régression à chaque fois
Scénario: Créez un nouvel élément.
Étant donné que je clique sur l'option Your Gists.
Lorsque je fournis le nom du fichier, la description.
Et cliquez sur Create public gist method.
Alors je devrais voir le nouveau sens.
Fichier stepdef
implémentation C ++ de liste double chaînée
package com.Multi; import cucumber.api.PendingException; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; import cucumber.api.java.After; import cucumber.api.java.Before; import cucumber.api.java.en.But; import java.util.List; import cucumber.api.PendingException; import cucumber.api.java.it.Data; import cucumber.runtime.ScenarioImpl; import gherkin.formatter.model.Scenario; import gherkin.formatter.model.ScenarioOutline; import cucumber.api.DataTable; import org.junit.Assert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import cucumber.api.cli.Main; public class Step2 { static public String sb; static public String sa; static WebDriver driver = null; @Before('@Smoke,@Regression') public void beforeScenario(){ System.out.println('New scenrio begins'); } @After('@Smoke,@Regression') public void afterScenario(){ System.out.println('Scenrio ends'); } @MyAnnotation public static void myanno() { System.out.println('my annot gets executed'); } @Given('^I am on Github home page$') public void i_am_on_Github_home_page(){ String site = 'https://www.github.com/login'; System.setProperty('webdriver.chrome.driver', 'Executables\chromedriver.exe'); driver = new ChromeDriver(); driver.navigate().to(site); //driver.findElement(By.cssSelector('a(contains(@href, 'login'))').click(); // Write code here that turns the phrase above into concrete actions } @When('^I specify Username as '((^')*)' and Password as '((^')*)'$') public void i_specify_Username_as_and_Password_as(String arg1, String arg2){ driver.findElement(By.cssSelector('input#login_field')).sendKeys(arg1); driver.findElement(By.cssSelector('input#password')).sendKeys(arg2); // Write code here that turns the phrase above into concrete actions } @When('^Click on SignIn button$') public void click_on_SignIn_button(){ driver.findElement(By.cssSelector('input.btn')).click(); // Write code here that turns the phrase above into concrete actions } @Given('^I click on Your Profile option$') public void i_click_on_Your_Profile_option(){ driver.findElement(By.xpath('//*(@id='user- links')/li(3)/details/summary/img')).click(); List olist = driver.findElements(By.xpath('//*(@id='user- links')/li(3)/details/ul/li/a(@class='dropdown-item')')); for(WebElement o:olist) { if(o.getText().equals('Your profile')) { o.click(); break; } } // Write code here that turns the phrase above into concrete actions } @When('^I click on edit profile button$') public void i_click_on_edit_profile_button(){ driver.findElement(By.xpath('//*(@id='js-pjax- container')/div/div(2)/div(1)/a')).click(); // Write code here that turns the phrase above into concrete actions } @When('^Uploaded new picture$') public void uploaded_new_picture() throws InterruptedException{ WebElement s1 = driver.findElement(By.xpath('//*(@class='avatar-upload- container clearfix')/Img')); sb=s1.getAttribute('src'); System.out.println(s1.getAttribute('src')); driver.findElement(By.id('upload-profile- picture')).sendKeys('D://cucumberFinal//multiple//Files//images.jpg'); Thread.sleep(10000); String wh = driver.getWindowHandle(); driver.switchTo().window(wh); Actions actions = new Actions(driver); WebElement element = driver.findElement(By.xpath('//div(@class='facebox -content')/form/div(3)/button')); Thread.sleep(10000); actions.moveToElement(element); //Thread.sleep(10000); actions.click(); //actions.sendKeys('GIST1 Description'); actions.build().perform(); // driver.findElement(By.xpath('//div(@class='facebox- content')/form/div(3)/button')).click(); Thread.sleep(3000); // Write code here that turns the phrase above into concrete actions } @Then('^I should be seeing new profile picture$') public void i_should_be_seeing_new_profile_picture(){ WebElement s1 = driver.findElement(By.xpath('//*(@class='avatar-upload- container clearfix')/Img')); sb=s1.getAttribute('src'); System.out.println(s1.getAttribute('src')); if(!(sb.equals(sa))) { Assert.assertTrue('File Upload successful', true); } // Write code here that turns the phrase above into concrete actions } @Given('^I click on Your Gists option$') public void i_click_on_Your_Gists_option(){ driver.findElement(By.xpath('//*(@id='user- links')/li(3)/details/summary/img')).click(); List olist = driver.findElements(By.xpath('//*(@id='user- links')/li(3)/details/ul/li/a(@class='dropdown-item')')); for(WebElement o:olist) { if(o.getText().equals('Your Gists')) { o.click(); break; } } // Write code here that turns the phrase above into concrete actions } @When('^I provide filename, description$') public void i_provide_filename_description() throws InterruptedException { // Write code here that turns the phrase above into concrete actions driver.findElement(By.xpath('//div(@class='edit container')/div(@id='gists')/input')).sendKeys('Gist1'); Thread.sleep(2000); Actions actions = new Actions(driver); WebElement element = driver.findElement(By.xpath('//*(@id='gists')/div(2)/div/div(2)/div/div(5)/div(1) /div/div/div/div(5)/div/pre/span')); actions.moveToElement(element); actions.click(); actions.sendKeys('GIST1 Description'); actions.build().perform(); // driver.findElement(By.xpath('//*(@id='gists')/div(2)/div/div(2)/div/div(5)/div(1) /div/div/div/div(5)/div/pre/span')).sendKeys('GIST1 Description'); Thread.sleep(2000); } @When('^click on Create public gist method$') public void click_on_Create_public_gist_method() { driver.findElement(By.xpath('//*(@id='new_gist')/div(2)/div(2)/button(1)')).click(); // Write code here that turns the phrase above into concrete actions } @Then('^i should be seeing the new gist$') public void i_should_be_seeing_the_new_gist(){ List glist = driver.findElements(By.xpath('//div(@class='container repohead-details -container')/ul(1)/li(@class='flex-auto')/div/a')); for(WebElement o:glist) { if(o.getText().equals('Gist1')) { System.out.println('Gist created successfully'); } } // Write code here that turns the phrase above into concrete actions } }
Fichier TestNG
Fichier Runner
package runner; import org.junit.runner.RunWith; import cucumber.api.CucumberOptions; import cucumber.api.junit.Cucumber; import cucumber.api.testng.AbstractTestNGCucumberTests; import cucumber.api.SnippetType; @RunWith(Cucumber.class) @CucumberOptions( features='Features', glue='com.Multi', plugin={'html:target/cucumber-html-report', 'json:target/cucumber.json', 'pretty:target/cucumber-pretty.txt','usage:target/cucumber-usage.json', 'junit:target/cucumber-results.xml'}, dryRun = false, strict = true, tags={'@Smoke,@Regression'}, monochrome = true, snippets=SnippetType.CAMELCASE ) public class Runner extends AbstractTestNGCucumberTests{ }
Configuration Jenkins
Accéder URL Jenkins .
Aller à Gérer Jenkins> Gérer le plugin .
Installez les plugins suivants:
- Plugin de résultats de test de concombre
- Rapports sur les concombres
- Plugin de perf de concombre
Assurez-vous lors de l'installation que tous les plugins dépendants sont correctement installés, sinon les plugins de rapport risquent de ne pas fonctionner.
Naviguez maintenant vers Gérer -> Configuration globale de l'outil.
différence entre le plan de test et le cas de test
Met le chemin pour JDK.
Met le chemin pour Maven.
Créer un nouvel article en tant que projet Maven.
Une fois le job créé, cliquez sur le lien de configuration présent sur le panneau de gauche.
Défiler vers le bas la page.
Définissez le chemin complet de pom.xml, objectif comme 'test' et enregistrer la configuration.
Une fois les étapes ci-dessus terminées, cliquez sur le Construisez maintenant lien qui est présent dans le panneau de gauche du projet Maven.
La construction sera exécutée et le correspondant fichier testing.xml (qui est mentionné sur le pom.xml) sera exécuté.
Voici la sortie qui s'affiche sur la console.
Sortie de la console
(INFO) T E S T S
(INFO) -------------------
(INFO) Exécution de TestSuite
Le nouveau scénario commence
Démarrage de ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) sur le port 27348
Seules les connexions locales sont autorisées.
log4j: WARN Aucun ajout n'a été trouvé pour l'enregistreur
(org.apache.http.client.protocol.RequestAddCookies).
log4j: WARN Veuillez initialiser correctement le système log4j.
log4j: WARN Voir http://logging.apache.org/log4j/1.2/faq.html#noconfig pour plus d'informations.
25 novembre 2017 12:56:41 org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Dialecte détecté: OSS
https://avatars3.githubusercontent.com/u/31874017?s=400&u=c41bfae0fa6b9325fb4f209885b51bd02c7d897d&v=4
https://avatars3.githubusercontent.com/u/31874017?s=400&u=c41bfae0fa6b9325fb4f209885b51bd02c7d897d&v=4
Le scénario se termine
Le nouveau scénario commence
Démarrage de ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) sur le port 24866
Seules les connexions locales sont autorisées.
25 novembre 2017 12:57:45 org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Dialecte détecté: OSS
Le scénario se termine
2 scénarios (2 réussis)
14 étapes (14 réussies)
2m2.677s
fusionner tri récursif c ++
(INFO) Tests exécutés: 1, échecs: 0, erreurs: 0, ignorés: 0, temps écoulé: 128,513 s - dans TestSuite
(INFO)
(INFO) Résultats:
(INFO)
(INFO) Tests exécutés: 1, échecs: 0, erreurs: 0, ignorés: 0
(INFO)
(JENKINS) Enregistrement des résultats du test
(INFO) ------------------------
(INFO) CONSTRUISEZ LE SUCCÈS
(INFO) ------------------------
(INFO) Durée totale: 02:51 min
(INFO) Terminé le: 2017-11-25T12: 58: 45 + 05: 30
(INFO) Mémoire finale: 12M / 28M
(INFO) ------------------------
En attente de Jenkins pour terminer la collecte des données
(JENKINS) Archivage D: cucumberFinal multiple pom.xml vers com / cucumber.example / 0.0.1-SNAPSHOT / cucumber.example-0.0.1-SNAPSHOT.pom
chaîne arrêtée
Terminé: SUCCÈS
Rapport Jenkins sur le concombre
Concombre Excel
Automatisation des scripts de test
La configuration suivante doit être effectuée.
Stratégie de conception de test:
- Créez un utilitaire de lecture Excel, qui a la capacité de prendre le 'nom de colonne' d'une feuille Excel comme paramètre d'entrée et en retour, il donnera la 'valeur de colonne' de la feuille Excel pour ce 'columnanme'.
- Créez un fichier d'entités dont le nom de colonne de la feuille Excel est indiqué entre guillemets à chacune de ses étapes.
- Créez maintenant un fichier Stepdef correspondant pour le fichier de fonctionnalités et utilisez les paramètres (arg1, arg2, etc. générés si nous avons spécifié le mot entre guillemets sur le fichier de fonctionnalités) comme entrée pour le lecteur Excel (créé à l'étape 1).
- Nous avons maintenant la valeur de colonne de la feuille Excel qui peut être utilisée comme entrée dans le fichier Stepdef.
- Exécutez le fichier d'entités tel que créé à l'étape ci-dessus.
Fichier de caractéristiques
Fonctionnalité: Titre de votre long métrage
Je souhaite utiliser ce modèle pour mon fichier d'entités
Fond:
Étant donné que je suis sur Gmail et que j'accède à l'écran «écran».
Étant donné que je spécifie le nom d'utilisateur comme «nom d'utilisateur» et le mot de passe comme «mot de passe».
Étant donné Cliquez sur le bouton Connexion.
Scénario: Créer un nouveau message à partir de la table de données
Lorsque j'accède au 'popup'.
Et je spécifie comme «À» et le sujet comme «Objet» et cliquez sur le bouton Soumettre.
Alors je devrais voir le message de réussite.
fichier Excel
package com.cuexcel; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import com.google.common.collect.Maps; import gherkin.formatter.model.Row; public class Excel { private static String sheet = 'Sheet1'; private static String worksheet = 'D:\cucumberFinal\cuexcel\Files\tdata.xls'; static HashMap excelinfo = new HashMap(); public static String get(String ColName) throws IOException { FileInputStream fis; int k =0; String ColValue=null; fis = new FileInputStream(worksheet); HSSFWorkbook wb = new HSSFWorkbook(fis); HSSFSheet ws = wb.getSheet(sheet); int rows = ws.getPhysicalNumberOfRows(); HSSFRow HeaderRow = ws.getRow(0); for(Integer i=1;i Fichier stepdef
package com.cuexcel; import java.io.IOException; import java.util.ArrayList; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.interactions.Actions; import cucumber.api.Scenario; import cucumber.api.java.Before; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; import cucumber.api.Scenario; import com.cuexcel.Excel; public class CExcel { static public WebDriver driver; Excel e; @Before public static void callexcel() throws IOException, InterruptedException { System.setProperty('webdriver.chrome.driver', 'Executables/chromedriver.exe'); driver= new ChromeDriver(); driver.manage().window().maximize(); driver.navigate().to('https://www.google.com/gmail/about'); } @Given('^I am on Gmail and accessing screen '((^')*)'$') public void i_am_on_Gmail_and_accessing_screen(String arg1) throws Throwable { // Write code here that turns the phrase above into concrete actions driver.findElement(By.xpath('//nav/div/a(2)')).click(); //arg1=Excel.get().get(0).toString(); System.out.println(e.get(arg1) + ' - is clicked'); Thread.sleep(3000); } @Given('^I specify Username as '((^')*)' and Password as '((^')*)'$') public void i_specify_Username_as_and_Password_as(String arg1, String arg2) throws Throwable { //arg1=Excel.get().get(1).toString(); //arg2=Excel.get().get(2).toString(); driver.findElement(By.xpath('//input(@type='email')')).sendKeys(e.get(arg1). toString()); driver.findElement(By.xpath('//*(@id='identifierNext')/content/span')).click(); Thread.sleep(3000); driver.findElement(By.xpath('//input(@type='password')')). sendKeys (e.get(arg2). toString()); } @When('^Click on SignIn button$') public void click_on_SignIn_button() throws InterruptedException{ driver.findElement(By.xpath('//*(@id='passwordNext')/content/span')).click(); Thread.sleep(5000); } @When('^I am accessing the popup '((^')*)'$') public void i_am_accessing_the_popup(String arg1) throws Throwable { // Write code here that turns the phrase above into concrete actions //arg1=Excel.get().get(3).toString(); driver.findElement(By.xpath('//*(@id=':x4')/div/div')).click(); System.out.println(e.get(arg1) + '- being clicked'); } @When('^I specify to as '((^')*)' and subject as '((^')*)' details and click on submit button$') public void i_specify_to_as_and_subject_as_details_and_click_on_submit_button(String arg1, String arg2) throws Throwable { // Write code here that turns the phrase above into concrete actions String whandle = driver.getWindowHandle(); driver.switchTo().window(whandle); //arg1=Excel.get().get(4).toString(); //arg2=Excel.get().get(5).toString(); driver.findElement(By.xpath('//td(@class='eV')/div(1)/div/textarea')).sendKeys (e.get(arg1)); driver.findElement(By.xpath('//table(@class='aoP aoC bvf')/tbody/tr/td/form/div(3)/input')).sendKeys(e.get(arg2)); driver.findElement(By.xpath('//table(@class='IZ')/tbody/tr/td/div')).click(); Thread.sleep(3000); } @Then('^i should be seeing the success message$') public void i_should_be_seeing_the_success_message() throws Throwable { // Write code here that turns the phrase above into concrete actions WebElement sent = driver.findElement(By.xpath('//*(@id='link_vsm')')); if(sent.isDisplayed()) { System.out.println('Message sent successfully'); } } }
Fichier POM
4.0.0 com cuexcel 0.0.1-SNAPSHOT jar cuexcel http://maven.apache.org UTF-8 org.seleniumhq.selenium selenium-java 3.6.0 org.seleniumhq.selenium selenium-chrome-driver 3.6.0 info.cukes cucumber-core 1.2.5 info.cukes cucumber-java 1.2.5 test info.cukes cucumber-junit 1.2.5 test junit junit 4.11 test info.cukes cucumber-testng 1.2.0 info.cukes gherkin 2.12.2 provided log4j log4j 1.2.17 org.apache.poi poi-ooxml 3.9 org.apache.poi poi 3.11-beta3 xml-apis xml-apis 2.0.2 xerces xercesImpl 2.8.0 info.cukes cucumber-jvm-deps 1.0.5 provided net.masterthought cucumber-reporting 3.11.0 org.apache.maven.plugins maven-surefire-plugin 2.18 org.apache.maven.surefire surefire-junit47 2.18
Une fois la configuration ci-dessus terminée, exécutez simplement le fichier de fonctionnalités.
Observation
Le fichier Stepdef prend les données de la feuille Excel et exécute les étapes de test mentionnées dans le fichier de fonctionnalités.
Voici le résultat de l'exécution du scénario de test mentionné sur la console Eclipse.

Conclusion
BDD est l'avenir de l'automatisation des tests car il permet à toutes les parties prenantes de participer à la création du script de test, en particulier pour fournir leurs entrées via le fichier Feature.
Cucumber est un outil BDD largement utilisé et il comporte de nombreuses intégrations et fonctionnalités qui doivent encore être implémentées dans l'automatisation des tests. Il existe plusieurs groupes / communautés qui travaillent activement sur le concombre.
Si vous connaissez bien Cucumber, vous pouvez travailler sur n'importe quel outil BDD disponible sur le marché, car la plupart des outils fonctionnent de la même manière que Cucumber.
Nous espérons que vous avez entendu parler de Cucumber avec Jenkins grâce à ce didacticiel détaillé.
lecture recommandée
- Tutoriel Python DateTime avec des exemples
- Tutoriel Cucumber Selenium: Intégration Cucumber Java Selenium WebDriver
- Tutoriel de script Unix Shell avec exemples
- Tutoriel de recherche d'élément par texte Selenium avec des exemples
- Mot-clé Java 'this': Tutoriel avec des exemples de code
- Tutoriel BDD et concombre avec des exemples
- Tutoriel sur la gestion des exceptions C # avec des exemples de code
- Test d'automatisation à l'aide de l'outil Cucumber et du sélénium - Tutoriel Selenium # 30