2017-08-30 49 views
0

我有一些SpecFlow测试在VS一个“SpecFlowTests”项目运行,他们需要一些测试数据文件。我正在使用.testsettings文件来部署文件,它的工作。但是,新的MsTest代理不再支持.testsettings,所以我需要找到另一个解决方案来部署这些文件。VSTest - 为SpecFlow试验测试数据文件不会部署到TestResults

测试数据文件的“复制到输出目录”设置为“一直拷贝”。它们将被复制在输出目录中,我可以通过获取输出目录按以下方式引用它们的代码:

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发布的一部分时,它看起来对测试数据文件在TestResults目录和输出文件夹它在那里找不到它们。

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

我已经然后试图设置在测试的BeforeFeature方法DeploymentItem属性,但它看起来像它不工作,它应测试数据文件部署到TestResults输出文件夹,但它确实不。

所以我需要一个共同的解决方案,所有三种情况在工作(运行测试本地,从TFS运行它们建立,从TFS版本运行它们)。

我在这个相对较新,所以任何建议表示赞赏。

谢谢!

+0

您使用的是哪个版本的TFS?你是如何在发布中运行它们的?只需将构建定义设置为工件?在TFS 2017中,您可以尝试直接将Source(存储库)设置为Release中的Artifacts源代码,然后检查它是否有效。 –

+0

TFS 2017.Yes,发布定义有两个构建定义作为工件源。构建定义包含一个环境,其中包含一个用于在代理上运行SpecFlow测试的任务。但是,当测试运行时,它会尝试查找测试数据在'C:\ buildagent1 \ _work \ r1 \ a \ TestResults \ Deploy_SerTFSBUILD 2017-09-04 20_01_06 \ Out \ Hekpers \ TestDataFile.txt'中,但没有任何部署。我尝试添加一个“Copy Files”任务在运行测试任务之前,但我不知道如何选择目标文件夹,因为在运行测试时创建了“TestResults \ Deploy_SerTFSBUILD ..”文件夹 – cristina

+0

当我可以使用“.testsettings”文件时,我只选择了我需要部署哪些文件,并在测试运行时自动将文件部署到此“TestResults \ Deploy ... \ out”文件夹中。 – cristina

回答

0

[DeploymentItem]属性不上BeforeFeature方法工作。他们必须穿上真正的测试方法/测试类。

由于SpecFlow 2.2你可以指定你的特征文件deploymentitems获得在正确的位置生成的属性。将@MsTest:DeploymentItem:Helpers\TestDataFile.txt放入您的功能。
来自我们测试套件的示例:https://github.com/techtalk/SpecFlow/blob/master/Tests/TechTalk.SpecFlow.Specs/Features/MsTestProvider.feature

+0

它工作了!太棒了,非常感谢! – cristina