Я запускаю тесты с носом и хотел бы использовать переменную из одного из элементов теста в другом. Для этого я создаю переменную при установке класса вверх. Мне кажется, что переменная копируется для каждого элемента, поэтому тот, что в классе остается фактически нетронутым. Если вместо простой переменной я использую список, я вижу поведение, которое я ожидал.Python & nose: какова переменная scope в «классе теста»?
я написал небольшую Exemple, мы можем наблюдать, что var1
и varg
всегда показывают одинаковое значение при вводе теста:
import time
import sys
import logging
logger = logging.getLogger('008')
class Test008:
varg = None
@classmethod
def setup_class(cls):
logger.info('* setup class')
cls.var1 = None
cls.list1 = []
def setup(self):
logger.info('\r\n* setup')
logger.info('\t var1: {}, varg: {}, list: {}'.format(
self.var1, self.varg, self.list1))
def teardown(self):
logger.info('* teardown')
logger.info('\t var1: {}, varg: {}, list: {}'.format(
self.var1, self.varg, self.list1))
def test_000(self):
self.var1 = 0
self.varg = 0
self.list1.append(0)
pass
def test_001(self):
# Here I would like to access the variables but they still show 'None'
self.var1 = 1
self.varg = 1
self.list1.append(1)
pass
@classmethod
def teardown_class(self):
logger.info('* teardown class')
Результат:
nose.config: INFO: Ignoring files matching ['^\\.', '^_', '^setup\\.py$']
* setup class
008_TestVars.Test008.test_000 ...
* setup
var1: None, varg: None, list: []
* teardown
var1: 0, varg: 0, list: [0]
ok
008_TestVars.Test008.test_001 ...
* setup
var1: None, varg: None, list: [0]
* teardown
var1: 1, varg: 1, list: [0, 1]
ok
* teardown class
----------------------------------------------------------------------
Есть ли способ, чтобы иметь значения var1
и varg
могут быть перенесены из одного теста в другое?
Прежде чем ответить на этот вопрос, скажи мне, почему вы хотите это сделать - если вы делаете тесты основаны на данных предыдущих испытаний они не являются модульными тестами (которые могут быть прекрасными), вам, вероятно, придется запускать их в известном порядке (который пропускает некоторые тесты обратной связи, которые могут вам дать. Почему вы чувствуете необходимость сделать это? – doctorlove
Спасибо за быстрый ответ. команда с теми же параметрами, чтобы увидеть, что она была отвергнута второй раз. Поэтому я пишу тест второй раз с другим условием прохождения. Этот первый c ommand использует текущее время для заполнения одного из отправленных параметров. При отправке команды во втором тесте, я хочу получить тот же самый параметр. – Pierre