2016-09-26 45 views
2

我正在寻找以编程方式在C#中运行批处理文件,作为我在本地计算机上工作的测试(在MS TEST中运行)的一部分。我想运行的批处理文件位于支持文件夹中的资源库中,该文件夹中还包含源代码。在VSTS中,测试运行如下:VSTS中的文件路径

“C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TestWindow \ vstest.console.exe”“C:\ International \ InternationalAppAutomation \ International.IntegrationTests.UI \ International.IntegrationTests.UI \ bin \ Debug \ International.IntegrationTests.UI.dll“”C:\ International \ InternationalAppAutomation \ International.IntegrationTests.UI \ International.IntegrationTests.UI \ obj \ Debug \ International.IntegrationTests.UI.dll“/ TestCaseFilter:”TestCategory = Explore“/Settings:"C:\International\InternationalAppAutomation\International.IntegrationTests.UI\International.IntegrationTests.UI\QA.testsettings”/ logger:trx/TestAdapterPath:“C:\ International \ InternationalAppAutomation”

由于我使用相对路径运行批处理文件,所以失败是因为VSTS从本地机器运行的位置不同。这个问题的推荐解决方案是什么?

注 - 我无法将此批处理文件放在测试输出文件夹中,因为它非常大,我们不希望为每次新的测试运行都复制它。

+0

谢谢@jessehouwing

通过添加适当的TestContext属性为您的测试类,你可以从中检索这些目录。但是,问题不是将路径传递到批处理文件,而是获取批处理文件的路径。 VSTS应该知道批处理文件位于存储库中的哪里,但是因为VSTS在服务器上运行测试文件的方式与在我的计算机上运行相对路径中断的方式不同。 – gmoerkerken

回答

0

如果您想在测试执行中使用它,您可能需要将其设置为[DeploymentItem],使用您的测试类或方法的属性,从而确保将其放置在测试执行目录中。

如果这不是一个选项,请使用环境变量来查找您的源代码管理根目录。构建代理将自动设置变量%BUILD_SOURCESDIRECTORY%。您或您的批处理文件应该能够使用它来查找位置。或者,使用我的VSTS variables task来设置具有该文件路径的特定变量。每个变量将在后续任务中作为环境变量提供。您可以使用现有变量来解析文件的路径。

如果您仍在使用XAML构建,则可以使用类似的变量%TF_BUILD_SOURCESDIRECTORY%

参见:

取决于你如何解决文件,你可能会需要告诉您的批处理文件目前的测试输出目录或工作目录。这些很容易从C#端获取,然后可以存储在环境中,或者在执行批处理文件时作为参数传递。

TestContext.DeploymentDirectory 
TestContext.TestResultsDirectory 

参见: