C# 为什么使用MSTest时数据驱动测试不再在Jenkins上运行?

C# 为什么使用MSTest时数据驱动测试不再在Jenkins上运行?,c#,jenkins,automated-tests,mstest,data-driven-tests,C#,Jenkins,Automated Tests,Mstest,Data Driven Tests,我有一套用C#编写的Webdriver测试,我使用MSTest作为运行程序。在这一点上,NUnit不是一个选项,所以我需要弄清楚如何使它与当前配置一起工作。对于CI,我使用的是Jenkins ver。1.514. 我无法控制正在安装的插件或Jenkins何时更新,如果问这样的问题可能导致不同团队的长时间等待和批准过程(讨厌birocracy) 所以。。我有几个数据驱动测试,定义如下(我将粘贴其中一个) 所以,这应该足够清楚,我使用的是UsersData.csv文件,它位于我的项目的TestDat

我有一套用C#编写的Webdriver测试,我使用MSTest作为运行程序。在这一点上,NUnit不是一个选项,所以我需要弄清楚如何使它与当前配置一起工作。对于CI,我使用的是Jenkins ver。1.514. 我无法控制正在安装的插件或Jenkins何时更新,如果问这样的问题可能导致不同团队的长时间等待和批准过程(讨厌birocracy)

所以。。我有几个数据驱动测试,定义如下(我将粘贴其中一个)

所以,这应该足够清楚,我使用的是UsersData.csv文件,它位于我的项目的TestData文件夹中。为了在Jenkins中运行此测试,我使用以下命令行

mstest /testmetadata:"%WORKSPACE%\SeleniumJenkins.vsmdi" /testlist:Jenkins /resultsfile:"%WORKSPACE%\AllTests_Jenkins.trx" /runconfig:"%WORKSPACE%\Local.testsettings" /detail:stdout
一切正常,但有一天,当我在TRX结果文件中遇到这个错误时:

The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library.Error details: The .Net Framework Data Providers require Microsoft Data Access Components(MDAC).  Please install Microsoft Data Access Components(MDAC) version 2.6 or later.Retrieving the COM class factory for component with CLSID {2206CDB2-19C1-11D1-89E0-00C04FD7A829} failed due to the following error: 8007007e The specified module could not be found. (Exception from HRESULT: 0x8007007E).
但是,如果我登录到从机运行的机器并运行相同的命令,它似乎会发现数据源文件和ir运行正常

此外,我安装了psexec,并将该命令放入一个*.bat文件中,然后从ps exec调用该文件,如下所示:

psexec \\my_IP -u "machine-name\jenkins-local" -p "password" cmd /C call "%WORKSPACE%\Selenium\msteststart.bat" 
这似乎是可行的,但我没有登录到Jenkins,如果我将其重定向到一个文件,那么每当另一个构建启动并清除工作区时,该文件就会丢失,因此我只有该文件的最新版本,无法将其与其他构建进行比较

local.testsettings文件如下所示:

<?xml version="1.0" encoding="UTF-8"? >
    <TestSettings name="Local" id="06505635-693a-4f31-b962-ecf8422b5eca" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
       <Description>These are default test settings for a local test run.</Description>
       <Deployment>
          <DeploymentItem filename="Selenium\TestData\UsersData.csv" />
       </Deployment>
   <NamingScheme baseName="Selenium_" useDefault="false"  />
   <Execution>
     <Timeouts testTimeout="10800000" />
       <TestTypeSpecific>
         <UnitTestRunConfig testTypeId="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b">
           <AssemblyResolution>
            <TestDirectory useLoadContext="true" />
           </AssemblyResolution>
        </UnitTestRunConfig>
      </TestTypeSpecific>
    <AgentRule name="Execution Agents">
    </AgentRule>
   </Execution>
</TestSettings>

这些是本地测试运行的默认测试设置。
如果有人能给我一个提示,我将不胜感激。谢谢

可能是

  • MDAC安装错误。这里有一些关于如何修理它的建议。考虑要求管理员尝试检查MDAC是否正确安装。
  • 许可问题?您是否100%确定您正在使用jenkins slave和psexec以同一用户的身份在您的slave上运行该命令
正如您所说的,您可以使用psexec使其工作,一种解决方法是在运行作业的同一台机器上生成文件,并将生成的日志文件作为工件存档。詹金斯会跟踪的

如果您希望尝试将输出放在控制台中,可能要应用控制台解析,还可以使psexec命令在生成后将文件输出到控制台(在运行后键入),或者使用类似于tee的批处理命令来管理psexec,以便将它所做的事情输出到jenkins控制台:

别忘了捕捉标准误差

<?xml version="1.0" encoding="UTF-8"? >
    <TestSettings name="Local" id="06505635-693a-4f31-b962-ecf8422b5eca" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
       <Description>These are default test settings for a local test run.</Description>
       <Deployment>
          <DeploymentItem filename="Selenium\TestData\UsersData.csv" />
       </Deployment>
   <NamingScheme baseName="Selenium_" useDefault="false"  />
   <Execution>
     <Timeouts testTimeout="10800000" />
       <TestTypeSpecific>
         <UnitTestRunConfig testTypeId="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b">
           <AssemblyResolution>
            <TestDirectory useLoadContext="true" />
           </AssemblyResolution>
        </UnitTestRunConfig>
      </TestTypeSpecific>
    <AgentRule name="Execution Agents">
    </AgentRule>
   </Execution>
</TestSettings>