Я использую селен для сквозного тестирования, и я не могу понять, как его использовать setup_class
и teardown_class
методы.
Мне нужно настроить браузер в setup_class
методе, затем выполнить кучу тестов, определенных как методы класса, и, наконец, выйти из браузера в teardown_class
методе.
Но логически это кажется плохим решением, потому что на самом деле мои тесты будут работать не с классом, а с объектом. Я self
передаю параметр внутри каждого тестового метода, чтобы получить доступ к варам объектов:
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
И даже создавать экземпляр браузера для класса вроде бы некорректно ... Его надо создавать для каждого объекта отдельно, правда?
Таким образом, мне нужно использовать __init__
и __del__
методы вместо setup_class
и teardown_class
?
resource
param intest_that_depends_on_resource(self, resource)
Когда вы пишете «тесты, определенные как методы класса» , вы действительно имеете в виду методы класса (методы, которые получают свой класс в качестве первого параметра) или просто обычные методы (методы, которые получают экземпляр в качестве первого параметра)?
Поскольку ваш пример использует
self
методы тестирования, я предполагаю, что последний, поэтому вам просто нужноsetup_method
вместо этого использовать :Экземпляр тестового метода передается в
setup_method
иteardown_method
, но может быть проигнорирован, если вашему коду установки / разборки не требуется знать контекст тестирования. Более подробную информацию можно найти здесь .Я также рекомендую вам ознакомиться с py.test по светильникам , так как они более мощная концепция.
источник
setup_class
с имитацией методов и т.п., нуждался в модернизации.setup_class(self, foo, bar)
->setup_method(self,function,foo,bar)
Это может помочь http://docs.pytest.org/en/latest/xunit_setup.html
В моем наборе тестов я группирую свои тестовые примеры по классам. Для настройки и разборки, которые мне нужны для всех тестовых случаев в этом классе, я использую методы
setup_class(cls)
иteardown_class(cls)
class.И для настройки и разборки, которые мне нужны для каждого тестового примера, я использую
setup_method(method)
иteardown_method(methods)
Пример:
Теперь, когда я запускаю свои тесты, когда запускается выполнение TestClass, он регистрирует детали того, когда он начинает выполнение, когда он заканчивает выполнение и то же самое для методов.
Вы можете добавить другие шаги по настройке и демонтажу, которые могут быть у вас в соответствующих местах.
Надеюсь, поможет!
источник
setup_class
vssetup_method
?<setup/teardown>_class
всего класса. Здесь могут быть такие вещи, как установка ссылки на БД или загрузка файла данных. И затем каждый тестовый пример может иметь свою собственную настройку в виде<setup/teardown>_method
. Теперь все стало ясно. Большое спасибо!Как предложил @Bruno, использование приспособлений pytest - еще одно решение, доступное для обоих тестовых классов или даже для простых тестовых функций. Вот пример тестирования функций python2.7 :
Итак, бег
test_1...
дает:Обратите внимание на то, что
stuff_i_setup
в фикстуре есть ссылка, позволяющая этому объекту бытьsetup
иtorn down
для теста, с которым он взаимодействует. Вы можете представить, что это может быть полезно для постоянного объекта, такого как гипотетическая база данных или какое-то соединение, которое необходимо очищать перед каждым запуском теста, чтобы держать их изолированными.источник
Ваш код должен работать так, как вы ожидаете, если вы добавите
@classmethod
декораторы.См. Http://pythontesting.net/framework/pytest/pytest-xunit-style-fixtures/
источник
self
используется для методов экземпляра, где первый аргумент - это конкретный экземпляр объекта, на котором выполняется операция метода, аcls
используется для@classmethod
s, которые привязаны к класс, а не экземпляр класса (т.е. объект).