Как я могу поделиться одним экземпляром webdriver в моих тестовых классах в комплекте?Я использую Selenium2 и Python - PullRequest
6 голосов
/ 02 декабря 2011

Мой код выглядит следующим образом:

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

Когда я запустил комплект, оба тестовых класса запустили новый экземпляр firefox в setup metord.Мой вопрос: возможно ли сделать так, чтобы два классифицированных теста использовали один и тот же экземпляр firefox?Я не хочу объединять их в один класс.

Есть идеи?

1 Ответ

2 голосов
/ 02 декабря 2011

У вас может быть функция настройки, которая применяется ко всему модулю, а не только к классу, как объяснено здесь .

В вашем случае это будет что-то вроде:

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

def tearDownModule():
    DRIVER.quit()

Обратите внимание, что 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'

Вывод этого:

$ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...