2011-12-02 5 views
6

Mi código es así:¿Cómo puedo compartir una instancia de webdriver en mis clases de prueba en la suite? Yo uso Selenium2 y Python

class class1(unittest.TestCase): 
    def setUp(self): 
     self.driver = webdriver.Firefox() 

    def testListRolesTitle(self): 
     driver=self.driver 
     driver.get("www.google.com") 

    def tearDown(self): 
     self.driver.quit() 
     self.assertEqual([], self.verificationErrors) 
     asert... 


class class2(unittest.TestCase): 

    def setUp(self): 
     self.driver = webdriver.Firefox() 

    def testListRolesTitle(self): 
     driver=self.driver 
     driver.get("www.google.com") 
     assert... 

    def tearDown(self): 
     self.driver.quit() 
     self.assertEqual([], self.verificationErrors) 

def suite(): 
    s1 = unittest.TestLoader().loadTestsFromTestCase(class1) 
    s2 = unittest.TestLoader().loadTestsFromTestCase(class2) 

    return unittest.TestSuite([s1,s2]) 

if __name__ == "__main__": 

    run(suite()) 

Cuando me encontré con el conjunto de las dos clases de prueba inicia una nueva instancia de Firefox en methord configuración. Mi pregunta es si es posible hacer que las dos pruebas clasificadas utilicen la misma instancia de Firefox. No quiero juntarlos en una clase.

¿Alguna idea?

Respuesta

2

Puede tener una función de configuración que se aplique a todo el módulo en lugar de solo a la clase explicada en here.

En su caso, eso sería algo así como:

def setUpModule(): 
    DRIVER = webdriver.Firefox() 

def tearDownModule(): 
    DRIVER.quit() 

Tenga en cuenta que DRIVER es una variable global en este caso, por lo que está disponible para los objetos de todas clases.

Además, tenga en ese caso la prueba de pedido podría causar que sus funciones de configuración del módulo se llaman varias veces como se explica en la documentación:

El ordenamiento por omisión de pruebas creadas por los cargadores de prueba unittest es agrupar todas las pruebas de los mismos módulos y clases juntos. Esto conducirá a que setUpClass/setUpModule (etc) sea llamado exactamente una vez por clase y módulo. Si aleatoriza la orden, de modo que las pruebas de diferentes módulos y clases sean adyacentes entre sí, entonces estas funciones de dispositivos compartidos pueden invocarse varias veces en una sola ejecución de prueba.

Se piensa este ejemplo debería dejar claro cuando se ejecuta cada método de configuración/función:

import unittest 

def setUpModule(): 
    print 'Module setup...' 

def tearDownModule(): 
    print 'Module teardown...' 

class Test(unittest.TestCase): 
    def setUp(self): 
     print 'Class setup...' 

    def tearDown(self): 
     print 'Class teardown...' 

    def test_one(self): 
     print 'One' 

    def test_two(self): 
     print 'Two' 

La salida de este es:

$ python -m unittest my_test.py 

Module setup... 
Class setup... 
One 
Class teardown... 
.Class setup... 
Two 
Class teardown... 
.Module teardown... 

---------------------------------------------------------------------- 
Ran 2 tests in 0.000s 

OK 
+0

Gracias, pero todavía estoy confundido. – user1076879

+0

Debe tener ambos casos de prueba en la misma clase ya que comparten el código de instalación/desmontaje. La configuración/desmontaje en la clase se ejecutará para cada caso de prueba y la configuración/desmontaje en el módulo se ejecutará una vez para todo el módulo. – jcollado

+0

Hola, muchas gracias. Pero si uso setUpModule() y tearDownModule() debo poner las dos clases de prueba en un solo archivo, ¿verdad? – user1076879

Cuestiones relacionadas