PageSourceSearch

https://serenity-bdd.github.io/es/assets/js/272074fa.b2b1a9cc.js

js serenity-bdd.github.io collected 2026-10-03 09:58:18 UTC 8,984 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkserenity_users_guide=globalThis.webpackChunkserenity_users_guide||[]).push([[3042],{7989(e,n,r){r.r(n),r.d(n,{assets:()=>u,contentTitle:()=>t,default:()=>d,frontMatter:()=>s,metadata:()=>c,toc:()=>o});const c=JSON.parse('{"id":"guide/cucumber","title":"Ejecutar escenarios de Cucumber con Serenity","description":"Para una gu\xeda completa y detallada sobre c\xf3mo usar Cucumber con Serenity BDD y JUnit 5, incluyendo opciones de configuraci\xf3n, mejores pr\xe1cticas y soluci\xf3n de problemas, consulta la secci\xf3n dedicada Cucumber con JUnit 5.","source":"@site/i18n/es/docusaurus-plugin-content-docs/current/guide/cucumber.md","sourceDirName":"guide","slug":"/guide/cucumber","permalink":"/es/docs/guide/cucumber","draft":false,"unlisted":false,"editUrl":"https://github.com/serenity-bdd/serenity-bdd.github.io/blob/master/docs/guide/cucumber.md","tags":[],"version":"current","frontMatter":{},"sidebar":"tutorialSidebar","previous":{"title":"Configurando Selenium WebDriver","permalink":"/es/docs/guide/driver_config"},"next":{"title":"JUnit 5 con Serenity BDD","permalink":"/es/docs/junit5/junit5-tests"}}');var a=r(4848),i=r(8453);const s={},t="Ejecutar escenarios de Cucumber con Serenity",u={},o=[];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"ejecutar-escenarios-de-cucumber-con-serenity",children:"Ejecutar escenarios de Cucumber con Serenity"})}),"\n",(0,a.jsx)(n.admonition,{title:"Gu\xeda completa de Cucumber disponible",type:"tip",children:(0,a.jsxs)(n.p,{children:["Para una gu\xeda completa y detallada sobre c\xf3mo usar Cucumber con Serenity BDD y JUnit 5, incluyendo opciones de configuraci\xf3n, mejores pr\xe1cticas y soluci\xf3n de problemas, consulta la secci\xf3n dedicada ",(0,a.jsx)(n.a,{href:"/docs/cucumber/cucumber-junit5",children:"Cucumber con JUnit 5"}),"."]})}),"\n",(0,a.jsx)(n.p,{children:"Para ejecutar escenarios de Cucumber con Serenity, necesitas crear una clase de test runner de JUnit 5 como esta:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-java",children:'   import org.junit.platform.suite.api.IncludeEngines;\n   import org.junit.platform.suite.api.SelectClasspathResource;\n   import org.junit.platform.suite.api.Suite;\n\n   @Suite\n   @IncludeEngines("cucumber")\n   @SelectClasspathResource("/features")\n   public class CucumberTestSuite {}\n'})}),"\n",(0,a.jsxs)(n.p,{children:["Ten en cuenta que necesitas especificar al menos el atributo ",(0,a.jsx)(n.code,{children:"features"}),", para definir el directorio que contiene tus archivos de Feature."]}),"\n",(0,a.jsx)(n.h1,{id:"jerarqu\xedas-de-feature",children:"Jerarqu\xedas de Feature"}),"\n",(0,a.jsxs)(n.p,{children:["Serenity espera encontrar archivos de Feature en la carpeta ",(0,a.jsx)(n.code,{children:"src/test/resources/features"})," por defecto. Puedes organizar tus archivos de Feature en una jerarqu\xeda de carpetas debajo de esta, como se muestra aqu\xed:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"+ src\n|-- test\n|   |-- resources\n|   |  |-- features\n|   |  |   |-- authentication\n|   |  |   |   |-- login.feature\n|   |  |   |-- cart\n|   |  |   |   |-- managing_the_cart.feature\n|   |  |   |-- catalog\n|   |  |   |   |-- browse_catalog.feature\n|   |  |   |   |-- filtering_products.feature\n|   |  |   |-- purchases\n|   |  |   |   |-- completing_a_purchase.feature\n|   |  |   |-- sales_tax\n|   |  |   |   |-- calculating_sales_tax.feature\n"})}),"\n",(0,a.jsx)(n.p,{children:"La estructura de directorios se usar\xe1 para construir la jerarqu\xeda de requisitos de Serenity, como la que se muestra aqu\xed:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{src:r(8559).A+"",width:"3198",height:"1324"})}),"\n",(0,a.jsx)(n.h1,{id:"filtrar-la-ejecuci\xf3n-de-pruebas-en-cucumber",children:"Filtrar la ejecuci\xf3n de pruebas en Cucumber"}),"\n",(0,a.jsxs)(n.p,{children:["La forma m\xe1s sencilla de controlar qu\xe9 escenarios quieres ejecutar es usar etiquetas y la opci\xf3n de l\xednea de comandos ",(0,a.jsx)(n.code,{children:"cucumber.filter.tags"}),". Por ejemplo, para ejecutar solo escenarios o Feature anotados con ",(0,a.jsx)(n.code,{children:"@smoke"}),", ejecutar\xedas el siguiente comando:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:'mvn clean verify -Dcucumber.filter.tags="@smoke"\n'})}),"\n",(0,a.jsxs)(n.p,{children:["Puedes usar ",(0,a.jsx)(n.a,{href:"https://cucumber.io/docs/cucumber/api/#tag-expressions",children:"Expresiones de Etiquetas de Cucumber"})," para determinar qu\xe9 escenarios ejecutar. Por ejemplo, para ejecutar solo Feature con las etiquetas ",(0,a.jsx)(n.code,{children:"@authentication"})," y ",(0,a.jsx)(n.code,{children:"@smoke"}),", ejecutar\xedas lo siguiente:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:' mvn clean verify -Dcucumber.filter.tags="@authentication and @smoke"\n'})}),"\n",(0,a.jsxs)(n.p,{children:["Para ejecutar escenarios con la etiqueta ",(0,a.jsx)(n.code,{children:"@cart"})," o ",(0,a.jsx)(n.code,{children:"@catalog"}),", podr\xedas ejecutar lo siguiente:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:' mvn clean verify -Dcucumber.filter.tags="@cart or @catalog"\n'})}),"\n",(0,a.jsx)(n.h1,{id:"ejecutar-escenarios-de-cucumber-con-serenity-en-paralelo",children:"Ejecutar escenarios de Cucumber con Serenity en paralelo"}
1),"\n",(0,a.jsx)(n.p,{children:"A partir de la versi\xf3n 3.6.0, es posible ejecutar los escenarios de Cucumber en paralelo."}),"\n",(0,a.jsx)(n.p,{children:"Los siguientes pasos son necesarios para activar la ejecuci\xf3n en paralelo:"}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsx)(n.li,{children:"A\xf1ade las siguientes dependencias en el pom.xml de tu aplicaci\xf3n:"}),"\n"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-xml",children:"    <dependency>\n        <groupId>io.cucumber</groupId>\n        <artifactId>cucumber-junit-platform-engine</artifactId>\n        <version>7.11.0</version>\n        <scope>test</scope>\n    </dependency>\n\n    <dependency>\n        <groupId>org.junit.platform</groupId>\n        <artifactId>junit-platform-suite</artifactId>\n        <version>1.9.2</version>\n        <scope>test</scope>\n    </dependency>\n"})}),"\n",(0,a.jsxs)(n.ol,{start:"2",children:["\n",(0,a.jsxs)(n.li,{children:["Crea un archivo llamado ",(0,a.jsx)(n.code,{children:"junit-platform.properties"})," en ",(0,a.jsx)(n.code,{children:"test/resources"})]}),"\n"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"cucumber.execution.parallel.enabled=true\ncucumber.execution.parallel.config.strategy=fixed\ncucumber.execution.parallel.config.fixed.parallelism=4\ncucumber.execution.parallel.config.fixed.max-pool-size=4\ncucumber.plugin=net.serenitybdd.cucumber.core.plugin.SerenityReporterParallel\n"})}),"\n",(0,a.jsx)(n.admonition,{title:"Cambio importante en Serenity 5.0.0",type:"note",children:(0,a.jsxs)(n.p,{children:["La ruta del plugin de Cucumber cambi\xf3 de ",(0,a.jsx)(n.code,{children:"io.cucumber.core.plugin.*"})," a ",(0,a.jsx)(n.code,{children:"net.serenitybdd.cucumber.core.plugin.*"})," en Serenity 5.0.0. Aseg\xfarate de actualizar tus archivos de configuraci\xf3n."]})}),"\n",(0,a.jsxs)(n.p,{children:["Puedes encontrar m\xe1s informaci\xf3n sobre el significado de las propiedades en la ",(0,a.jsx)(n.a,{href:"https://github.com/cucumber/cucumber-jvm/tree/main/cucumber-junit-platform-engine",children:"Documentaci\xf3n de Cucumber JUnit Platform Engine"})]}),"\n",(0,a.jsxs)(n.ol,{start:"3",children:["\n",(0,a.jsxs)(n.li,{children:["Configura la ubicaci\xf3n del classpath de los escenarios a ejecutar en una clase Java ubicada en un paquete dentro de ",(0,a.jsx)(n.code,{children:"test/java"})]}),"\n"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-java",children:'   import org.junit.platform.suite.api.IncludeEngines;\n   import org.junit.platform.suite.api.SelectClasspathResource;\n   import org.junit.platform.suite.api.Suite;\n\n   @Suite\n   @IncludeEngines("cucumber")\n   @SelectClasspathResource("/features")\n   public class CucumberTestSuite {}\n'})})]})}function d(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},8453(e,n,r){r.d(n,{R:()=>s,x:()=>t});var c=r(6540);const a={},i=c.createContext(a);function s(e){const n=c.useContext(i);return c.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),c.createElement(i.Provider,{value:n},e.children)}},8559(e,n,r){r.d(n,{A:()=>c});const c=r.p+"assets/images/cucumber-requirements-hierarchy-a21ffb057df85059e19480918c7c2d34.png"}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.