我希望在C#中以编程方式运行批处理文件,作为测试的一部分(正在MS TEST中运行),该测试已在本地计算机上进行。我要运行的批处理文件位于支持文件夹中的存储库中,该文件夹也包含源代码。在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 =探索“ /设置:” C:\ International \ InternationalAppAutomation \ International.IntegrationTests.UI \ International.IntegrationTests.UI \ QA.testsettings“ / logger:trx / TestAdapterPath:” C:\ International \ InternationalAppAutomation“


而且由于我使用相对路径来运行批处理文件,因此它失败了,因为VSTS从与本地计算机不同的位置运行。建议的解决方案是什么?

注意-我无法将此批处理文件放在测试输出文件夹中,因为它很大,并且我们不想在每次新的测试运行时都将其复制。

最佳答案

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

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

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

看到:


VSTS & TFS 2015 and later
Older and XAML


然后,根据解析文件的方式,您可能需要告诉批处理文件当前的测试输出目录或工作目录。它们很容易从C#端检索,然后可以存储在环境中或在执行批处理文件时作为参数传递。

通过将适当的TestContext属性添加到测试类中,可以从以下位置检索这些目录:

TestContext.DeploymentDirectory
TestContext.TestResultsDirectory


看到:


Working with TestContext
TestContext Properties

10-08 00:05