Estoy usando selenio para las pruebas de extremo a extremo y no puedo entender cómo usar setup_class
y teardown_class
métodos.
Necesito configurar el navegador en el setup_class
método, luego realizar un montón de pruebas definidas como métodos de clase y finalmente salir del navegador en el teardown_class
método.
Pero lógicamente parece una mala solución, porque de hecho mis pruebas no funcionarán con class, sino con object. Paso el self
parámetro dentro de cada método de prueba, para poder acceder a las variables de los objetos:
class TestClass:
def setup_class(cls):
pass
def test_buttons(self, data):
# self.$attribute can be used, but not cls.$attribute?
pass
def test_buttons2(self, data):
# self.$attribute can be used, but not cls.$attribute?
pass
def teardown_class(cls):
pass
E incluso parece no ser correcto crear una instancia de navegador para una clase. Debería crearse para cada objeto por separado, ¿verdad?
Entonces, necesito usar los métodos __init__
y en __del__
lugar de setup_class
y teardown_class
?
resource
param entest_that_depends_on_resource(self, resource)
Cuando escribe "pruebas definidas como métodos de clase" , ¿realmente se refiere a métodos de clase (métodos que reciben su clase como primer parámetro) o simplemente métodos regulares (métodos que reciben una instancia como primer parámetro)?
Dado que su ejemplo se usa
self
para los métodos de prueba, estoy asumiendo el último, por lo que solo necesita usarsetup_method
en su lugar:La instancia del método de prueba se pasa a
setup_method
yteardown_method
, pero se puede ignorar si su código de configuración / desmontaje no necesita conocer el contexto de prueba. Puede encontrar más información aquí .También le recomiendo que se familiarice con los accesorios de py.test , ya que son un concepto más poderoso.
fuente
setup_class
con métodos simulados y similares que debían modernizarse.setup_class(self, foo, bar)
->setup_method(self,function,foo,bar)
Esto podría ayudar a http://docs.pytest.org/en/latest/xunit_setup.html
En mi suite de pruebas, agrupo mis casos de prueba en clases. Para la configuración y el desmontaje que necesito para todos los casos de prueba en esa clase, utilizo los métodos
setup_class(cls)
yteardown_class(cls)
clases.Y para la configuración y el desmontaje que necesito para cada uno de los casos de prueba, utilizo
setup_method(method)
yteardown_method(methods)
Ejemplo:
Ahora, cuando ejecuto mis pruebas, cuando comienza la ejecución de TestClass, registra los detalles de cuándo comienza la ejecución, cuándo finaliza la ejecución y lo mismo para los métodos.
Puede agregar otros pasos de configuración y desmontaje que pueda tener en las ubicaciones respectivas.
¡Espero eso ayude!
fuente
setup_class
vssetup_method
?<setup/teardown>_class
para toda la clase. Aquí, pueden ser cosas como establecer el enlace a la base de datos o cargar el archivo de datos. Y luego, cada caso de prueba puede tener su propia configuración en forma de<setup/teardown>_method
. Las cosas están mucho más claras ahora. ¡Muchas gracias!Como sugirió @Bruno, el uso de accesorios de pytest es otra solución a la que se puede acceder tanto para clases de prueba como para funciones de prueba simples. Aquí hay un ejemplo de prueba de funciones de python2.7 :
Entonces, correr
test_1...
produce:Observe que
stuff_i_setup
se hace referencia en el accesorio, lo que permite que ese objeto seasetup
ytorn down
para la prueba con la que está interactuando. Puede imaginar que esto podría ser útil para un objeto persistente, como una base de datos hipotética o alguna conexión, que debe borrarse antes de que se ejecute cada prueba para mantenerlos aislados.fuente
Su código debería funcionar tal como lo espera si agrega
@classmethod
decoradores.Ver http://pythontesting.net/framework/pytest/pytest-xunit-style-fixtures/
fuente
self
se usa para métodos de instancia, donde el primer argumento es la instancia de objeto específico en el que se lleva a cabo la operación del método, mientras quecls
se usa para@classmethod
s, que están vinculados a la clase y no una instancia de la clase (es decir, un objeto).