【问题标题】:MSTest - Run "LoadTests" and Write Results to SQL Server DatabaseMSTest - 运行“LoadTests”并将结果写入 SQL Server 数据库
【发布时间】:2019-04-09 07:11:02
【问题描述】:

如果您想配置您的 VS“负载测试”以将结果写入数据库服务器,请使用 following instructions

如果您想通过 powershell 在单独的机器上运行“负载测试”(think TFS 2018 release step),请使用 following instructions

我想在多台机器上以自动化的方式同时执行这两项操作,但是没有太多关于此的文档,我可以像这样运行我的测试:

.\mstest /testcontainer:"C:\XXX\ABC.loadtest"

但结果被踢出到“TRX”文件而不是放入数据库中(there is some discussion on this)。如何将结果放入外部数据库,就像我在本地运行时一样(按照上面的说明)?

注意:@AdrianHHH 指出“TRX”文件只是一个摘要,大部分信息都存储在本地(MDF/LDF 文件)在当前运行负载测试的用户的用户文件夹中。

更新 1

嗯,我想知道这是在哪里持续存在的:

(好奇,也点击“管理测试控制器”框中的“?”图标,什么都没有……)

它不在保存的 XML 中:

<RunConfigurations>
    <RunConfiguration Name="Run Settings1" Description="" ResultsStoreType="Database" TimingDetailsStorage="AllIndividualDetails" SaveTestLogsOnError="true" SaveTestLogsFrequency="0" MaxErrorDetails="200" MaxErrorsPerType="1000" MaxThresholdViolations="1000" MaxRequestUrlsReported="1000" UseTestIterations="false" RunDuration="10" WarmupTime="0" CoolDownTime="0" TestIterations="100" WebTestConnectionModel="ConnectionPerUser" WebTestConnectionPoolSize="50" SampleRate="5" ValidationLevel="High" SqlTracingConnectString="" SqlTracingConnectStringDisplayValue="" SqlTracingDirectory="" SqlTracingEnabled="false" SqlTracingFileCount="2" SqlTracingRolloverEnabled="true" SqlTracingMinimumDuration="500" RunUnitTestsInAppDomain="true" CoreCount="0" ResourcesRetentionTimeInMinutes="0" AgentDiagnosticsLevel="Warning">
      <CounterSetMappings>
        <CounterSetMapping ComputerName="[CONTROLLER MACHINE]">
          <CounterSetReferences>
            <CounterSetReference CounterSetName="LoadTest" />
            <CounterSetReference CounterSetName="Controller" />
          </CounterSetReferences>
        </CounterSetMapping>
        <CounterSetMapping ComputerName="[AGENT MACHINES]">
          <CounterSetReferences>
            <CounterSetReference CounterSetName="Agent" />
          </CounterSetReferences>
        </CounterSetMapping>
      </CounterSetMappings>
      <LoadGeneratorLocations>
        <GeoLocation Location="Default" Percentage="100" />
      </LoadGeneratorLocations>
    </RunConfiguration>
  </RunConfigurations>

它们也没有保存在我的默认“testsettings”文件中:

<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="Local" id="02cad612-043b-447d-993e-a9b9b0547c9d" 
     xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <Description>These are default test settings for a local test run.</Description>
  <Deployment enabled="false" />
  <Execution hostProcessPlatform="MSIL">
    <TestTypeSpecific />
    <AgentRule name="Execution Agents">
    </AgentRule>
  </Execution>
  <Properties>
    <Property name="TestSettingsUIType" value="UnitTest" />
  </Properties>
</TestSettings>

所以我需要找到这个配置信息被持久化的地方,然后也许我可以找到一种方法将它提供给 MSTest。有其他人了解这是如何工作的吗?

更新 2

我的TRX file does contains a "connection string" 但我不认为这是我的数据库,我的数据库是空的,通过 powershell 运行它完成,但我看到的只是“TRX”文件。

更新 3

这很棘手,我一直在尝试各种方法来确定此“管理测试配置”数据/凭据的存储位置。我这样做的一种方法是使用微软的Process Monitor。您实际上可以看到它最初是从哪里填充的:

它来自Application Hive,当然这引出了一个问题,“Application Hive”是从哪里填充的,这就是事情变得有点模糊的地方,对许多文件有不同的调用。一个常见的趋势是经常引用“Temp\Local”文件夹。

我删除了我的用户帐户的整个“临时”文件夹(在此过程中丢失了我的所有 VS 配置),并且在重新打开我的解决方案时,它似乎有效果。当我打开我的“LoadTest”文件时,“Load test results store”行现在是空的。事实上整个“管理测试控制器”窗口已经恢复到默认状态(空)。

我知道相信此“管理测试控制器”窗口的配置已保存在临时文件夹中。但是,我还没有找到它的位置和/或如何使用 powershell 脚本更改/自动填充该信息。

【问题讨论】:

  • “结果被踢出到“TRX”文件,而不是被放入数据库中” 不。结果的简短摘要进入 TRX 文件。我已经通过mstest.exe 运行负载测试,结果保存在 SQL 数据库中。 .loadtest 文件中指定了哪些“运行设置”,Storage TypeTiming Details Storage 属性的值是什么?
  • 一台计算机上可能有多个负载测试结果数据库。当测试在不同的帐户下运行时,可能会发生这种情况。在不同的用户帐户中查找文件 LoadTest2010.mdfLoadTest2010_log.ldf。在我的计算机上,它们位于文件夹“C:\Users\AdrianHHH”中。对于“Update 2”文本,如果在 Visual Studio 中打开 TRX 文件会发生什么情况,它会显示负载测试的结果吗?
  • 我通过mstest.exe 运行了测试,结果没有保存到数据库中,当然这发生在与我最初设置负载测试不同的系统上,所以这可能是问题所在。我将使用“RunConfiguration”行的详细信息更新问题。我确实看到我的系统上存在“MDF”和“LDF”文件,但这不是最佳选择,而不是将其保存在本地,我希望它写入单独的 SQL 服务器实例。当我使用截屏配置在 VS 中运行它时,它会这样做。但不是通过 mstest 命令行在单独的机器上(想想 TFS 部署)
  • 真正的问题是:“管理测试控制器”配置存储在哪里,通过 MSTest 在不同机器上运行负载测试时如何复制该配置?我想在最初的问题中,我并没有指出范围超过了一台机器,但这是一个基本点,也是我在 VS 中的本地机器上遇到的原始行为持续存在问题的真正原因。我将在澄清该部分的情况下更新问题。

标签: powershell tfs mstest load-testing


【解决方案1】:

终于想通了。基本上我在更改连接字符串时使用了几个工具来检查正在修改哪些文件,结果很明显:

privateregistry.bin

一旦我发现这一点,很明显 VS 正在维护它自己的小型注册表配置单元。 this post里写的很清楚,于是我opened it按照文章中描述的方式找到了连接字符串:

这表明:

"The SQL Connection String is NOT stored in the loadtest files. The setting seems to be PC specific so I had to change it on the build server - in one loadtest file (address.loadtest) as shown, then all the other loadtests adopt the same connection string."

所以这基本上就是我所做的,我登录到每个构建服务器并配置它们,以便它们将所有结果写入我的数据库而不是本地。

负载测试显然不是为了简化这个过程而设计的,我认为没有多少人尝试过我所做的事情。所有的文章都只是告诉你use their cloud service。我很确定这仅涵盖网络测试。如果您对test unit tests 使用负载测试,那么您非常不走运(没有这个解决方法)。我真的希望这在未来得到官方支持,从 TFS 运行/查看所有类型的负载测试会非常好。现在,虽然我将不得不继续使用这项工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    相关资源
    最近更新 更多