如何在套件中的测试类中共享一个webdriver实例?我使用Selenium2和Python

时间:2011-12-02 07:14:06

标签: python unit-testing selenium webdriver

我的代码是这样的:

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())

当我运行套件时,两个测试类都在setup methord中启动了一个新的firefox实例。 我的问题是,是否可以使两个测试分类使用相同的firefox实例? 我不想把它们放在一个班级里。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用适用于整个模块的设置功能,而不仅仅是按照here解释的类。

在你的情况下,这将是:

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

def tearDownModule():
    DRIVER.quit()

请注意,DRIVER在这种情况下是一个全局变量,因此它可用于所有类的对象。

另请注意,测试用例排序可能导致您的模块设置功能被多次调用,如文档中所述:

  

unittest测试加载器创建的测试的默认顺序是将来自相同模块和类的所有测试组合在一起。这将导致每个类和模块只调用一次setUpClass / setUpModule(etc)。如果您将订单随机化,以便来自不同模块和类的测试彼此相邻,则可以在单次测试运行中多次调用这些共享夹具函数。

它认为这个例子应该在执行每个设置方法/函数时明确:

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'

这个输出是:

$ 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
相关问题