Estoy usando selenio para las pruebas de extremo a extremo y no puedo entender cómo usar setup_classy teardown_classmétodos.
Necesito configurar el navegador en el setup_classmétodo, luego realizar un montón de pruebas definidas como métodos de clase y finalmente salir del navegador en el teardown_classmétodo.
Pero lógicamente parece una mala solución, porque de hecho mis pruebas no funcionarán con class, sino con object. Paso el selfpará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_classy teardown_class?

resourceparam 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
selfpara los métodos de prueba, estoy asumiendo el último, por lo que solo necesita usarsetup_methoden su lugar:La instancia del método de prueba se pasa a
setup_methodyteardown_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_classcon 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_classvssetup_method?<setup/teardown>_classpara 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_setupse hace referencia en el accesorio, lo que permite que ese objeto seasetupytorn downpara 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
@classmethoddecoradores.Ver http://pythontesting.net/framework/pytest/pytest-xunit-style-fixtures/
fuente
selfse 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 queclsse usa para@classmethods, que están vinculados a la clase y no una instancia de la clase (es decir, un objeto).