2017-01-17 15 views
0

im работает с pytest право знать. Моя проблема в том, что мне нужно использовать тот же объект, сгенерированный в одном файле test_file1.py, в другом файле test_file2.py, который находится в двух разных каталогах и вызывается отдельно от другого.Использование одного и того же объекта из разных тестовых файлов PyTest?

Heres код:

$ testhandler.py 

# Starts the first testcases 
returnValue = pytest.main(["-x", "--alluredir=%s" % test1_path, "--junitxml=%s" % test1_path+"\\JunitOut_test1.xml", test_file1]) 

# Starts the second testcases 
pytest.main(["--alluredir=%s" % test2_path, "--junitxml=%s" % test2_path+"\\JunitOut_test2.xml", test_file2]) 

Как вы можете видеть, что первый из них является критическим, поэтому я начинаю его с -x для прерывания, если есть ошибка. И --alluredir удаляет целевой каталог перед началом новых тестов. Вот почему я решил вызвать pytest два раза в testhandler.py (moreoften в будущем возможно)

Здесь есть являются test_files:

$ test1_directory/test_file1.py 

@pytest.fixture(scope='session') 
def object(): 
    # Generate reusable object from another file 

def test_use_object(object): 
    # use the object generated above 

Обратите внимание, что объект на самом деле класс с параметрами и функциями.

$ test2_directory/test_file2.py 

def test_use_object_from_file1(): 
    # reuse the object 

Я попытался сгенерировать объект в файле testhandler.py и импортировать его в оба тестовых файла. Проблема заключалась в том, что объект не был точно таким же, как в testhandler.py или test_file1.py.

Вопрос теперь, если есть возможность использовать excatly один сгенерированный объект. Может быть, с глобальным conftest.py или что-то в этом роде.

Благодарим вас за внимание!

ответ

0

Точно так же вы имеете в виду аналогичный объект, не так ли? Единственный способ сделать это - маршалировать его в первом процессе и развязать его в другом процессе. Один из способов сделать это - использовать json или pickle в качестве маршаллера и передать имя файла, которое будет использоваться для файла json/pickle, чтобы иметь возможность прочитать объект обратно.

Вот некоторые примеры кода, непроверенных:

# conftest.py 

def pytest_addoption(parser): 
    parser.addoption("--marshalfile", help="file name to transfer files between processes") 

@pytest.fixture(scope='session') 
def object(request): 
    filename = request.getoption('marshalfile') 
    if filename is None: 
     raise pytest.UsageError('--marshalfile required') 

    # dump object 
    if not os.path.isfile(filename): 
     obj = create_expensive_object() 
     with open(filename, 'wb') as f: 
      pickle.dump(f, obj) 
    else: 
     # load object, hopefully in the other process 
     with open(filename, 'rb') as f: 
      obj = pickle.load(f) 

    return obj 

 Смежные вопросы

  • Нет связанных вопросов^_^