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.
¿Has comprobado refrescar, o guisante?
Pea no usa la sintaxis de cucumber, pero el autor dice que es más fácil https://github.com/gfxmonk/pea
Y Freshen está intentando clonar la sintaxis y las funcionalidades de Cucumber.
¿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
Ahora existe un puerto de Capybara a Python:
https://github.com/elliterate/capybara.py
Puedes encontrar su documentación aquí:
https://elliterate.github.io/capybara.py/
Capybara lo ayuda a probar aplicaciones web simulando cómo un usuario real interactuaría con su aplicación. Es indiferente sobre el controlador que ejecuta sus pruebas y viene con soporte de Selenium incorporado.
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.