framework python functional-testing acceptance-testing

python - framework - pytest



¿Python tiene algo como Capybara/Cucumber? (7)

Ruby tiene esta gran capa de abstracción encima de Selenium llamada Capybara, que puedes usar para realizar pruebas funcionales / de aceptación / integración. También tiene otra biblioteca llamada Cucumber que lleva esto un paso más allá y le permite escribir pruebas en inglés.

Ambas bibliotecas están construidas sobre Selenium, y pueden usarse para probar contra cualquier navegador principal, pero debido a sus capas de abstracción es muy fácil escribir pruebas con ellas (bueno, tan fácil como las pruebas funcionales obtienen al menos).

Mi pregunta es: ¿Python tiene algo así? He encontrado Pythonistas haciendo pruebas funcionales con varias herramientas pero ...

A) Splinter: no usa Selenium (y no tiene un controlador de IE)

-EDIT- Parece que Spliter ahora usa Selenium (vea las respuestas a continuación).

B) Alfajor: no ha sido actualizado en más de un año; parece muerto

C) Selenio (sin procesar): muchas personas parecen estar usando Selenium directamente, pero parece que una capa de abstracción podría hacer que sea mucho más fácil de usar

Entonces, ¿alguien sabe algo como Capybara, o mejor aún, como Pepino, para Python (no tiene que usar realmente Selenium, pero tiene que ser compatible con todos los principales navegadores)?

* EDITAR *

Para aquellos que no están familiarizados con Capybara, básicamente solo agrega una API para que en lugar de la API normal de Selenium puedas hacer algo como esto:

When /I sign in/ do within("#session") do fill_in ''Login'', :with => ''[email protected]'' fill_in ''Password'', :with => ''password'' end click_link ''Sign in'' end

Es usado por Cucumber, que te permite un resumen más (casi al inglés):

Scenario Outline: Add two numbers Given I have entered <input_1> into the calculator And I have entered <input_2> into the calculator When I press <button> Then the result should be <output> on the screen Examples: | input_1 | input_2 | button | output | | 20 | 30 | add | 50 |

Me ENCANTARÍA un equivalente de Python Cucumber, pero incluso un equivalente de Capybara sería útil.



¿Qué hay de Robot Framework. Es bastante impresionante Y con Selenium2Library funciona muy bien con SE2. http://robotframework.org/


A. Pepino como: (Inglés como)

  • Lechuga (Enfoque De Pepinillo) O
  • Comportarse (acercarse al pepinillo) o
  • Robotframework (basado en palabras clave de enfoque) (Información adicional: RF es más grande que los criterios similares al inglés. Está basado en palabras clave y ofrece un montón de métodos de ayuda y bibliotecas incorporadas. Excelente ecosistema para bibliotecas externas. Cualquier script de Python también se puede modificar y usar a lo largo con RF)
  • Freshen (Enfoque Gherkin) o
  • Guisante (Enfoque De Pepinillo) O
  • RedwoodHQ (basado en palabras clave de enfoque) (RedwoodHQ tiene características más amplias que los criterios de "Me gusta el inglés" y encapsula las siguientes características: basado en palabras clave, marco de prueba basado en web, admite Python como uno de los idiomas y mucho más. Información adicional sobre RedwoodHQ: teóricamente es posible, todas las bibliotecas incorporadas de robot-framework existentes y todas las bibliotecas de prueba externas de robot-framework o, para el caso, cualquier biblioteca de Python, pueden llamarse o usarse desde este marco de prueba basado en web con poca modificación)

  • Indicador (enfoque de Gherkin): referencia para python: ( https://gauge-python.readthedocs.io/en/latest/index.html )

Debajo de Cucumber, uno podría tener Capybara como una capa de abstracción que oculta / agrupa muchas de las acciones de selenio

B. Capibara como: (Abstracción: esconde / grupos de acción)

Como, por ejemplo, hacer clic en un elemento, es suficiente para proporcionar un comando como clic (localizador) en lugar de trabajar con la selenium api bruto, donde se necesita encontrar un elemento y luego hacer clic. Muchas más abstracciones de este tipo existen en las bibliotecas opcionales a continuación.

  • Opción-1 (ver abajo)
  • Opción-2 (ver abajo)
  • Opción-3 (ver abajo)
  • Opción-4 (ver abajo)
  • Opción-5 (ver abajo)
  • Opción 6: Helio (de otros, respuesta / comentario)
  • Opción-7: (ver abajo)
  • Opción-8: (ver abajo)
  • Opción-9: (ver abajo)
  • Opción 10: (ver abajo)
  • Opción 11: (ver abajo)
  • Opción-12: (ver abajo)
  • Opción 13: (ver abajo)

Mi investigación: Existen casi media docena a. activo, b. Opciones maduras desarrolladas.

¡La pitón viene con variedad de baterías incluidas!

Opción-1: Selenium2Library

URL de Github: Selenium2Library

Desarrollo: activo

Propósito: una de las muchas bibliotecas de robotframework , también puede usarse como una biblioteca "independiente" para su marco (verifique, por ejemplo, a continuación, el uso).

Pensamientos

  • Proporciona una abstracción sobre el selenio.
  • la entrada de argumentos a los métodos en esta biblioteca es mucho más simple. La abstracción proporcionada por la biblioteca, por ejemplo, oculta muchos de los detalles innecesarios para encontrar elementos. Para más detalles hay que entender la biblioteca.
  • Es posible usar esta biblioteca fuera del contexto de robot-framework como tal sin ninguna modificación , aunque podría estar usando utilidades del paquete robot. (¡Es tu tarea hacer más experimentos con esta lib, en esta nota!)
  • Por lo tanto, se puede utilizar como una biblioteca independiente para su marco.

Uso:

pip instalar robotframework-selenium2library

importe en su ipython o consola inactiva y comience a jugar, por ejemplo:

>>from Selenium2Library import Selenium2Library >>start_testing= Selenium2Library() >>start_testing.create_webdriver("Firefox") >>start_testing.go_to("http://www.google.com") >>. ...so on

Opción-2: Pageobjects

URL de Github: Pageobjects

Desarrollo: InActive (sin tapones de show con la última versión)

Objeto: Una de las bibliotecas de robotframework . Proporciona una abstracción de objeto de página sobre Selenium2Library . Puede usarse como independiente para su marco (consulte, por ejemplo, el uso a continuación) o puede usarse junto con robotframe.

Pensamientos

  • Proporciona un soporte de "abstracción de objeto de página" sobre Selenium2Library
  • Es posible usar esta biblioteca fuera del contexto de robot-framework como tal sin ninguna modificación , aunque podría estar usando utilidades del paquete robot. (¡Es tu tarea hacer más experimentos en esta nota!)
  • Por lo tanto, puede ser utilizado como una biblioteca independiente

Uso:

pip instalar robotframework-pageobjects

Por ejemplo: en ipython o inactivo, haga:

>>from robotpageobjects import Page >>start_testing=Page() >>start_testing.create_webdriver("Firefox") >>start_testing.go_to("http://google.com")

Opción 3: robotframework-pageobjectlibrary

Github Url: robotframework-pageobjectlibrary

Desarrollo: activo

Esperemos que el Autor sea compatible con LTS (Soporte a largo plazo):)), ¡¡¡Dedos cruzados !!

Uso:

pip instalar robotframework-pageobjectlibrary

Pensamientos

  • NO es posible utilizar esta biblioteca fuera del contexto de robot-framework. Un cambio menor en la forma en que se maneja el contexto de la página ayudaría a esta biblioteca a ser utilizada fuera del contexto del marco de robot (¡es su tarea para descubrir cómo!)

Opción 4: Splinter

URL de Github: Splinter

Desarrollo: activo

Uso: splinter.readthedocs.org/en/latest/index.html

pip instalar astilla

En ipython o inactivo hacer:

>>from splinter import Browser >>browser = Browser() >>browser.visit(''http://google.com'') >>browser.fill(''q'', ''splinter - python acceptance testing for web applications'') >>browser.find_by_name(''btnG'').click()

Opción 5: biblioteca SST

URL de Github: https://github.com/Work4Labs/selenium-simple-test

Desarrollo: Característica completa / activa

Uso: testutils.org/sst/

instalación de pip -U sst

en ipython o inactivo hacer:

>>> from sst.actions import * >>> start() Starting Firefox >>> go_to(''http://google.com'') Going to... http://google.com Waiting for get_element

Opción-6: helium No de código abierto (Comercial)

Opción-7: holmium.core

URL de Github: holmium.core

Opción-8: wtframework

URL de Github: wtframework

Opción-9: webium

URL de Github: webium

Opción-10: elementium

URL de Github: elementium

Opción 11: saunter

URL de Github: saunter

Uso: saunter

Opción-12: webdriverplus

URL de Github: webdriverplus

Uso: webdriverplus

Comentarios: repositorio no mantenido pero referencia decente

Opción-12: Simple-Pageobject

URL de Github: Simple-Pageobject

Comentarios: el contenedor de objetos de página más simple creado alrededor de selenium2library. Soy el dueño del repositorio.

Configuración de prueba:

"Todas" las bibliotecas de prueba en la Opción-1-13; puede ejecutarse utilizando cualquiera de los siguientes marcos: Lettuce, Behave, Robotframework o, para el caso, cualquier marco de prueba de unidad (por ejemplo, PyUnit , Nose ) ... etc.

Test Framework se usa en general para gestionar casos de prueba, por ejemplo,

  • Formatos en inglés como pepinillo, palabra clave, tabular, etc.
  • reportando una prueba de ejecución
  • enganchando a CI
  • Configuración / desmontaje de casos de prueba y suites de prueba
  • etiquetado de casos de prueba
  • Otras funcionalidades en las que se podría pensar acerca de cualquier marco de prueba

Lo que importa es cuán cómodo se sienta con las bibliotecas en las opciones anteriores.

Opción 5: En lo que respecta a SST , tiene características de un marco en sí mismo, por ejemplo, puede generar informes y hacer muchas más cosas.

Por lo tanto, la definición de biblioteca y marco en el caso de SST está borrosa , dependiendo de la extensión de las características que uno quisiera usar de ese paquete

Algunas matemáticas para la diversión:

Número total de formas en que uno podría tener una configuración de prueba buena , mala y fea = (marco de prueba Y biblioteca de prueba + su código personalizado intercalado entre el marco y la biblioteca):

7 * 13 = 91 maneras

¡Elija la mejor combinación (de la biblioteca de prueba y marco de prueba) que se adapte a sus necesidades!

Personalmente apostaría por Robot-framework con Selenium2Library o Robot-framework con alguna biblioteca de objetos de página

Por supuesto, me inclino y me inclino positivamente en mi publicación sobre robot-framework y Selenium2Library



El OP solicitó implementaciones en Python de Cucumber o Capybara, pero como Jim Stewart señaló en su respuesta , Cucumber y Capybara son cosas muy diferentes. Como el título de la pregunta es sobre Capibara, eso es lo que responderé.

Soy uno de los desarrolladores de un envoltorio comercial de Selenium llamado helium . Al igual que Capybara, ofrece una API de muy alto nivel para la automatización web. Por ejemplo, aquí hay un script que actualiza su estado de Facebook:

from helium.api import * start_chrome("facebook.com") write(your_fb_email, into="Email or Phone") write(your_fb_password, into="Password") click("Log In") write("Test", into="Update Status") click("Post")

Las llamadas a Helium se pueden mezclar libremente con las llamadas a Selenium. P.ej. Podríamos extender el script anterior por:

# get_driver() returns the WebDriver created by start_chrome() above. chrome = get_driver() chrome.find_element_by_id(''btnG'').click()


Mientras que el OP estaba feliz de encontrar un equivalente de Python Cucumber, lo que me llevó aquí fue el título de la pregunta: un equivalente Python de Capybara. Mientras que Cucumber usa Capybara, Cucumber en sí es una "solución" completamente diferente que está relacionada de forma incidental con Capybara.

Si buscas algo parecido a Capybara sin tener que lidiar con Cucumber, echa un vistazo a Splinter . No sé qué era verdad cuando se publicó la pregunta, pero Splinter ahora se basa en Selenium, y también admite otros motores (Webkit, PhantomJS, zope.browsertest y otros), y admite pruebas tanto visuales como sin cabeza.


Puede probar el código de Python usando Cucumber; consulte la wiki de Cucumber en github para obtener más información.

Si quieres una solución pura de Python, echa un vistazo a la lechuga . Nunca lo he usado, pero aquí hay una entrada de blog de aspecto bastante útil y splinter.