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

use*_*879 6 python selenium unit-testing 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())
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

jco*_*ado 3

您可以拥有一个适用于整个模块而不是仅适用于类的设置函数,如此处所述

在你的情况下,这将是这样的:

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

def tearDownModule():
    DRIVER.quit()
Run Code Online (Sandbox Code Playgroud)

请注意,DRIVER在本例中 是一个全局变量,因此它可用于所有类的对象。

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

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

它认为这个例子应该清楚地表明每个设置方法/函数的执行时间:

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'
Run Code Online (Sandbox Code Playgroud)

其输出是:

$ 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
Run Code Online (Sandbox Code Playgroud)