Pepino (software)


De Wikipedia, la enciclopedia libre
  (Redirigido desde Gherkin (software) )
Saltar a navegación Saltar a búsqueda

Cucumber es una herramienta de software que apoya el desarrollo impulsado por el comportamiento (BDD). [7] [8] [9] [10] Un elemento central del enfoque de Pepino BDD es su analizador de lenguaje ordinario llamado Gherkin . Permite especificar los comportamientos esperados del software en un lenguaje lógico que los clientes puedan entender. Como tal, Cucumber permite la ejecución de documentación de funciones escrita en texto orientado a la empresa. [11] [7] [8] A menudo se utiliza para probar otro software. [12] Ejecuta pruebas de aceptación automatizadas escritas en un estilo de desarrollo impulsado por el comportamiento (BDD). [13]

Cucumber se escribió originalmente en el lenguaje de programación Ruby . [7] [14] [8] y originalmente se usó exclusivamente para las pruebas de Ruby como complemento del marco RSpec BDD. Cucumber ahora admite una variedad de diferentes lenguajes de programación a través de varias implementaciones, incluyendo Java [15] [8] y JavaScript . [16] [17] El puerto de código abierto de Cucumber en .Net se llama SpecFlow. [18] [19] [20] Por ejemplo, Cuke4php y Cuke4Lua son puentes de software que permiten probar PHPy proyectos Lua , respectivamente. Otras implementaciones pueden simplemente aprovechar el analizador Gherkin mientras implementan el resto del marco de prueba en el idioma de destino.

Lengua de pepinillo

Gherkin es el lenguaje que usa Cucumber para definir casos de prueba. Está diseñado para no ser técnico y legible por humanos, y describe colectivamente casos de uso relacionados con un sistema de software. [7] [8] [21] [22] El propósito detrás de la sintaxis de Gherkin es promover prácticas de desarrollo impulsadas por el comportamiento en todo el equipo de desarrollo, incluidos los analistas y gerentes de negocios. Busca hacer cumplir requisitos firmes e inequívocos a partir de las fases iniciales de definición de requisitos por parte de la dirección empresarial y en otras etapas del ciclo de vida del desarrollo.

Además de proporcionar un script para pruebas automatizadas, la sintaxis de lenguaje natural de Gherkin está diseñada para proporcionar documentación simple del código bajo prueba. [22] Gherkin actualmente admite palabras clave en docenas de idiomas. [22] [23] [7] [8]

Operaciones lingüísticas [22]

# Lista de idiomas disponibles
pepino --i18n ayuda# Enumere las palabras clave de un idioma
pepino --i18n $ LANG

Sintaxis

La sintaxis se centra en un diseño orientado a líneas , similar al de Python . La estructura de un archivo se define mediante espacios en blanco y otros caracteres de control. [22] # se utiliza como carácter de comentario de línea y se puede colocar en cualquier lugar de un archivo. [22] Las instrucciones son cualquier línea que no esté vacía ni contenga comentarios. Consisten en una palabra clave Gherkin reconocida seguida de una cadena. [24]

Todos los archivos Gherkin tienen la .featureextensión de archivo. Contienen una única definición de Característica para el sistema bajo prueba y son un script de prueba ejecutable. [24]

Funciones, escenarios y pasos

Las pruebas de pepino se dividen en características individuales. Estas características se subdividen en escenarios, que son secuencias de pasos.

Características

Una característica es un caso de uso que describe una función específica del software que se está probando. Hay tres partes en una función [24]

  • La Feature:palabra clave
  • El nombre de la función (en la misma línea que la palabra clave)
  • Una descripción opcional en las siguientes líneas

Ejemplo de definición de característica

Característica: Retirar dinero de un cajero automático Un usuario con una cuenta en un banco le gustaría retirar dinero de un cajero automático. Siempre que tenga una cuenta válida y una tarjeta de débito o crédito, se le debe permitir realizar la transacción. El cajero automático atenderá la cantidad de dinero solicitada, devolverá su tarjeta y restará el monto del retiro de la cuenta del usuario. Escenario: Escenario 1  Condiciones previas dadas Cuándo acciones Luego resultados   Escenario: Escenario 2  ...

Escenarios

Cada Característica está compuesta por una colección de escenarios. Un escenario único es un flujo de eventos a través de la Característica que se describe y se asigna 1: 1 con un caso de prueba ejecutable para el sistema. [24] Siguiendo con la función de retiro de cajeros automáticos de ejemplo, un escenario podría describir cómo un usuario solicita dinero y qué sucede con su cuenta.

Escenario: Eric quiere retirar dinero de su cuenta bancaria en un cajero automático,  dado que Eric tiene una tarjeta de crédito o débito válida y el saldo de su cuenta es de $ 100.  Cuando inserta su tarjeta y retira $ 45  Entonces el cajero automático debería devolver $ 45 Y el saldo de su cuenta es de $ 55

En algunos casos, es posible que desee probar varios escenarios a la vez para realizar la partición de equivalencia y el análisis de valor límite . A Scenario Outlineproporciona una técnica para especificar varios ejemplos para probarlos en un escenario de plantilla mediante el uso de marcadores de posición. [24] Por ejemplo,

Esquema del escenario: Un usuario retira dinero de un cajero automático  Dado que <Name> tiene una tarjeta de crédito o débito válida y el saldo de su cuenta es <OriginalBalance>  Cuando insertan su tarjeta y retiran <WithdrawalAmount>  Entonces el cajero automático debería devolver <WithdrawalAmount> Y el saldo de su cuenta es <NewBalance> Ejemplos:  | Nombre  | OriginalBalance | WithdrawalAmount | NewBalance | | Eric  | 100  | 45  | 55  | | Gaurav | 100  | 40  | 60  | | Ed  | 1000  | 200  | 800  |

En tiempo de ejecución, el escenario se ejecuta en cada fila de la tabla. Los valores de columna se sustituyen por cada uno de los marcadores de posición nombrados en el escenario.

Pasos

El quid de un escenario se define por una secuencia de pasos que describen las condiciones previas y el flujo de eventos que tendrán lugar. La primera palabra de un paso es una palabra clave, normalmente una de [24].

  • Given - Describe las condiciones previas y el estado inicial antes del inicio de una prueba y permite cualquier configuración previa a la prueba que pueda ocurrir
  • When - Describe las acciones realizadas por un usuario durante una prueba.
  • Then - Describe el resultado resultante de las acciones tomadas en la cláusula When

Ocasionalmente, la combinación de Given-When-Then usa otras palabras clave para definir conjunciones

  • And - Lógico y
  • But- Lógicamente igual que And, pero utilizado en forma negativa [25]
Escenario: un usuario intenta retirar más dinero del que tiene en su cuenta,  dado que John tiene una tarjeta de crédito o débito válida y el saldo de su cuenta es de $ 20  Cuando inserta su tarjeta y retira $ 40  Luego, el cajero automático muestra un error y devuelve su tarjeta, pero su saldo sigue siendo de $ 20  

Etiquetas

La estructura de características de Gherkin fuerza la organización. Sin embargo, en los casos en que esta organización predeterminada sea inconveniente o insuficiente, Gherkin proporciona etiquetas. Las etiquetas son @-prefixedcadenas y se pueden colocar antes de [24]

  • Feature
  • Scenario
  • Scenario Outline
  • Examples

Un elemento puede tener varias etiquetas y hereda de los elementos principales. [22] [24]

Pepino

Definiciones de pasos

Los pasos en los .featurearchivos de Gherkin se pueden considerar una invocación de método. [26] [22] Antes de que Cucumber pueda ejecutar un paso, se debe indicar, mediante una definición de paso, cómo se debe realizar ese paso.

Las definiciones están escritas en Ruby y convencionalmente archivadas bajo features/step_definitions/*_steps.rb. [22] Las definiciones comienzan con las mismas palabras clave que su invocación (incluida la compatibilidad con todos los idiomas de Gherkin). [22] Cada definición tiene dos argumentos [22]

  • Ya sea una expresión regular o una cadena con $ variables
  • Un bloque que contiene código ruby ​​para ejecutar

Ejemplo usando expresiones regulares

Dado  /(.*) tiene una tarjeta de crédito o débito válida /  hacer  | nombre |  # Final del código Ruby

Ejemplo usando cadenas y $ variables. Tenga en cuenta que, en tiempo de ejecución, la cadena se convierte en una expresión regular y cualquier variable $ se convierte para que coincida (.*). [22]

Dado  "$ name tiene una tarjeta de crédito o débito válida",  haga  | nombre |  # Final del código Ruby

Manos

Los ganchos son la forma de Cucumber de permitir que la configuración se realice antes de ejecutar las pruebas y el desmontaje se ejecute después. Se definen como bloques Ruby ejecutables, similares a los métodos JUnit marcados con @Before, @Afteranotaciones. Convencionalmente se colocan debajo support/y se aplican globalmente. [22] Existen tres tipos básicos de anzuelos [22]

  • Before - Corre antes de un escenario
  • After - Corre tras un escenario
  • Around - Asume el control y corre alrededor de un escenario

Los ganchos adicionales incluyen [22]

  • BeforeStep
  • AfterStep
  • AfterConfiguration - Se ejecuta después de la configuración de Cucumber y se le pasa una instancia de la configuración.

Before, After, and AroundLos ganchos toman opcionalmente una lista de escenarios de filtrado de etiquetas a los que se aplican. Una lista de etiquetas en la misma cadena se trata como OR, mientras que los argumentos individuales se tratan como AND; Las etiquetas se pueden negar opcionalmente si van precedidas de ~. [22]

Ejemplo de un gancho etiquetado antes

Antes ( '@ATM' )  hacer  | escenario |  # Final del código Ruby

Los enganches se utilizan a menudo para mantener el estado de la base de datos, normalmente mediante la limpieza antes de ejecutar un escenario. También es posible iniciar y revertir una transacción usando Beforey Afterhooks, y muchas extensiones de Pepino proporcionan una @txnetiqueta para tal propósito. [24]

Integraciones e implementaciones

Existen implementaciones de Cucumber que no son Ruby para lenguajes populares, incluidos Java , JavaScript y Python . [24] También existe soporte para marcos de prueba de integración. Se puede encontrar una lista completa de implementaciones en Cucumber. Cucumber tiene herramientas de prueba integradas que funcionan bien con muchas configuraciones de integración continua . Hay complementos de pepino para herramientas de CI populares como Jenkins y TeamCity y también para IDE como Eclipse y RubyMine .

A continuación se muestra un ejemplo de una definición de paso escrita para Java con Cucumber-JVM. [27]

@Given ( "(. *) Tiene una tarjeta de crédito o débito válida" ) public  void  has_card ( String  name )  {  // código Java }

Complementos del formateador

Cucumber utiliza complementos de formateador para proporcionar resultados. Se proporcionan varios formatos comunes de forma predeterminada, incluido [24]

  • JSON
  • HTML
  • JUnit

Los formatos disponibles no están estandarizados en las diferentes implementaciones de Cucumber, por lo que las ofertas pueden diferir. [24] Cucumber también admite formatos de salida enriquecidos como imágenes y videos.

Automatización del navegador

Cucumber no proporciona automatización de navegador incorporada. Sin embargo, funciona bien con programas existentes como Selenium y WATiR-WebDriver . [28] Admite la ejecución de pruebas con transacciones aprovechando otros programas como ActiveRecord . [29]

Línea de comandos de pepino

Cucumber viene con una interfaz de línea de comandos incorporada que cubre una lista completa de instrucciones. Como la mayoría de las herramientas de línea de comandos, pepino ofrece la --helpopción que proporciona un resumen de los argumentos que acepta el comando. [30]

$ cucumber --help  -r, --require LIBRARY | DIR Requiere archivos antes de ejecutar las funciones.  --i18n LANG Muestra las palabras clave de un idioma en particular.  Ejecute con "--i18n help" para ver todos los idiomas.  -f, --format FORMAT Cómo formatear funciones (predeterminado: bonito).  -o, --out [FILE | DIR] Escribe la salida en un archivo / directorio en lugar de  ...

La línea de comando de pepino se puede utilizar para ejecutar rápidamente pruebas definidas. También admite la ejecución de un subconjunto de escenarios mediante el filtrado de etiquetas.

$ pepino --tags @ tag-name

El comando anterior ayuda a ejecutar solo aquellos escenarios que tienen el @tag-name. [30] Los argumentos se pueden proporcionar como una operación lógica ORo ANDde etiquetas. Además de las etiquetas, los escenarios se pueden filtrar por nombres de escenarios. [30]

$ pepino --nombre cerrar sesión

El comando anterior ejecutará solo aquellos escenarios que contengan la palabra 'cerrar sesión'.

También es útil saber qué salió mal cuando falla una prueba. Cucumber facilita la detección de errores en el código con la --backtraceopción. [30]

Cucumber también se puede configurar para ignorar ciertos escenarios que no se han completado marcándolos con la etiqueta Work In Progress @wip. Cuando a Cucumber se le pasa el --wipargumento, Cucumber ignora los escenarios con la @wipetiqueta.

Referencias

  1. ^ "Aslak Hellesøy" . Aslakhellesoy.com . Consultado el 24 de enero de 2012 .
  2. ^ "Joseph Wilk | sobre inteligencia artificial, la Web, usabilidad, pruebas y proceso de software" . Blog.josephwilk.net . Consultado el 24 de enero de 2012 .
  3. ^ "Desarrollo impulsado por el té" . Blog.mattwynne.net . Consultado el 24 de enero de 2012 .
  4. ^ "Perfil de ghnatiuk" . GitHub . Consultado el 24 de enero de 2012 .
  5. ^ "Perfil de msassak" . GitHub . Consultado el 24 de enero de 2012 .
  6. ^ "Lanzamientos - pepino / pepino-rubí" . Consultado el 9 de agosto de 2018 , a través de GitHub .
  7. ^ a b c d e "La estantería pragmática | El libro del pepino" . Pragprog.com. Archivado desde el original el 21 de enero de 2012 . Consultado el 24 de enero de 2012 .
  8. ^ a b c d e f Rose, Seb; Wynne, Matt; Hellesøy, Aslak (15 de febrero de 2015). La estantería pragmática | El pepino para el libro de Java . Pragprog.com . Consultado el 28 de abril de 2019 .
  9. ^ "¿Qué es el pepino?" . pepino . Consultado el 8 de junio de 2019 .
  10. ^ Aslak Hellesøy. "La herramienta de colaboración más incomprendida del mundo" . pepino .
  11. ^ Fox, Armando; Patterson, David (2016). Software de ingeniería como servicio . Cañón de la fresa. págs. 218-255. ISBN 978-0-9848812-4-6.
  12. ^ "Pruebas automatizadas con selenio y pepino" . www.ibm.com . 2013-08-06 . Consultado el 9 de febrero de 2017 .
  13. ^ Soeken, Mathias; Wille, Robert; Drechsler, Rolf (29 de mayo de 2012). Furia, Carlo A .; Nanz, Sebastian (eds.). Objetos, modelos, componentes, patrones . Apuntes de conferencias en Ciencias de la Computación. Springer Berlín Heidelberg. págs. 269-287. doi : 10.1007 / 978-3-642-30561-0_19 . ISBN 9783642305603.
  14. ^ "La estantería pragmática | El libro RSpec" . Pragprog.com. 2010-12-02. Archivado desde el original el 21 de enero de 2012 . Consultado el 24 de enero de 2012 .
  15. ^ "Pepino-jvm" . pepino . Consultado el 8 de marzo de 2018 .
  16. ^ "Pepino-js" . pepino . Consultado el 8 de marzo de 2018 .
  17. ^ Naidele Manjunath; Olivier de Meulder (1 de febrero de 2019). "¿No hay código? No hay problema: pruebas de redacción en inglés sencillo" . Horarios abiertos . Consultado el 29 de abril de 2019 .
  18. ^ "Requisitos comerciales vinculantes al código .NET" . SpecFlow . Consultado el 29 de abril de 2019 .
  19. ^ "SpecFlow" . GitHub . Consultado el 29 de abril de 2019 .
  20. ^ Richard Lawrence; Paul Rayner (2018). Desarrollo impulsado por el comportamiento con pepino . Addison Wesley.
  21. ^ "pepino / pepinillo" . GitHub . Consultado el 9 de febrero de 2017 .
  22. ^ a b c d e f g h i j k l m n o p "Sintaxis del pepinillo" . pepino . Consultado el 9 de julio de 2019 .
  23. ^ "Idiomas compatibles con pepinillo" . Pepinillo. pepino / pepino: Pepino monorepo - bloques de construcción para pepino en varios idiomas . Consultado el 21 de marzo de 2021 , a través de GitHub .
  24. ^ a b c d e f g h i j k l "Referencia" . pepino . Archivado desde el original el 25 de octubre de 2015 . Consultado el 17 de enero de 2016 .
  25. ^ "Lengua de pepinillo" . behat . Consultado el 17 de enero de 2016 .
  26. ^ "Documentación de pepino" . GitHub . 2019-01-23.
  27. ^ "Pepino-JVM" . GitHub . Consultado el 10 de febrero de 2016 .
  28. ^ "GitHub - watir / watir-webdriver: el código Watir-webdriver se ha movido" . 2018-06-09.
  29. ^ "GitHub - rieles / rieles: Ruby on Rails" . 2019-01-24.
  30. ^ a b c d Wynne, Matt; Hellesoy, Aslak. "El libro del pepino" . SafariBooksOnline . Consultado el 22 de enero de 2016 .

enlaces externos

  • Software de ingeniería como servicio: un enfoque ágil que utiliza la computación en la nube por Armando Fox y David Patterson
  • Proyecto pepino
  • Documentación del proyecto de pepino
  • En la fragua - Pepino , por Reuven M. Lerner en el Linux Journal
  • Agile 2009 - Aslak Hellesoy - Marco de prueba de pepino , podcast de Bob Payne con Aslak Hellesøy
  • Pepino: lo último en pruebas de Ruby , por Mike Gunderloy
  • Specflow, pepino en .NET
Obtenido de " https://en.wikipedia.org/w/index.php?title=Cucumber_(software)&oldid=1013450227#Gherkin_language "