VSTest — файлы тестовых данных для тестов SpecFlow не развертываются в TestResults.

У меня есть несколько тестов SpecFlow в проекте «SpecFlowTests» в VS для запуска, и им нужны файлы тестовых данных. Я использовал файл .testsettings для развертывания файлов, и это сработало. Однако новый агент MsTest больше не поддерживает .testsettings, поэтому мне нужно найти другое решение для развертывания файлов.

В файлах тестовых данных для параметра «Копировать в выходной каталог» установлено значение «Копировать всегда». Они копируются в выходной каталог, и я могу ссылаться на них в коде, получая выходной каталог следующим образом:

public static string AssemblyLocation()
        {
            var assembly = Assembly.GetExecutingAssembly();
            var codebase = new Uri(assembly.CodeBase);
            var path = codebase.LocalPath;
            return path;
        }

Этот подход работает при локальном запуске тестов или при их запуске в составе сборки из TFS, он ищет файлы в следующем расположении:

...\SpecFlowTests\bin\Debug\Helpers\TestDataFile.txt

Однако при попытке запустить их в составе релиза в TFS он ищет файлы тестовых данных в папке Out каталога TestResults и не может их там найти.

C:\buildagent1\_work\r1\a\TestResults\Out\Helpers\TestDataFile.txt

Затем я попытался установить атрибут DeploymentItem в методе BeforeFeature в тестах, но похоже, что он не работает, он должен развернуть файлы тестовых данных в папку Out в TestResults, но это не так.

Поэтому мне нужно общее решение для работы во всех трех ситуациях (запускать тесты локально, запускать их из сборки TFS, запускать их из версии TFS).

Я относительно новичок в этом, поэтому любой совет приветствуется.

Спасибо!


person cristina    schedule 30.08.2017    source источник
comment
Какую версию TFS вы используете? Как вы запускали их в релизе? Просто установите определение сборки как артефакты? В TFS 2017 вы можете попробовать установить источник (репозиторий) непосредственно в качестве источника артефактов в выпуске, а затем проверить, работает ли это.   -  person Andy Li-MSFT    schedule 31.08.2017
comment
TFS 2017. Да, в определении выпуска есть два определения сборки в качестве источника артефакта. Определение сборки содержит среду с задачей для запуска тестов SpecFlow на агенте. Однако при запуске тестов он пытается найти тестовые данные в C:\buildagent1\_work\r1\a\TestResults\Deploy_SerTFSBUILD 2017-09-04 20_01_06\Out\Hekpers\TestDataFile.txt, но там ничего не развернуто. Я пытался добавить задачу копирования файлов перед задачей запуска тестов, но я не знаю, что выбрать в качестве целевой папки, потому что папка TestResults\Deploy_SerTFSBUILD.. создается при тестировании бежать   -  person cristina    schedule 04.09.2017
comment
Когда я мог использовать файл .testsettings, я просто выбирал файлы, которые мне нужно было развернуть, и при запуске тестов файлы были автоматически развернуты в эту папку TestResults\Deploy...\out.   -  person cristina    schedule 04.09.2017


Ответы (1)


Атрибуты [DeploymentItem] не работают в методе BeforeFeature. Они должны использовать настоящий тестовый метод/тестовый класс.

Начиная с SpecFlow 2.2, вы можете указать элементы развертывания в своих файлах функций, чтобы получить атрибуты, сгенерированные в правильном месте. Поставьте @MsTest:DeploymentItem:Helpers\TestDataFile.txt своей функции.
Примеры из нашего набора тестов: https://github.com/SpecFlowOSS/SpecFlow/blob/master/Tests/TechTalk.SpecFlow.Specs/Features/UnitTestProviderSpecific/MsTest/DeploymentItem.feature

person Andreas Willich    schedule 05.09.2017
comment
Ссылка на пример больше не активна. Пожалуйста, скопируйте текст вместо ссылки. - person Rich Wagenknecht; 11.09.2020
comment
Ссылка сейчас исправлена. - person Andreas Willich; 11.09.2020