2009-10-14 76 views
1

我有一个datadriven单元测试,它从一个访问数据库中读取并执行数据库中的所有行。当我将这添加到一个负载测试并使用5个并发用户执行时,所有记录在数据库中执行5次。我在这里面临的问题是,当数据库中有更多记录时,测试需要更多时间来执行。有没有办法限制测试只执行一个数据行?VSTS加载测试每个数据行一次运行

回答

1

您是否试图在数据库中每行运行一次测试,然后停止?如果是这样,你应该避免使用你的网络测试作为负载测试。

我想你有两个选择,但我没有我的工作电脑在我面前来确认。

选项1:像您已经完成的那样创建Web测试,包括将它连接到访问数据库,就像您可能已经拥有的那样。然后将测试转换为编码的网络测试。并更改代码,以便为数据源中的每个记录运行一次(换句话说,将外部循环添加到编码的webtest中)。

选项2:编辑您的本地测试运行配置运行测试N次。从主菜单转到测试/编辑测试运行配置,选择您的测试配置,从左侧窗格中选择Web测试,然后将固定运行计数更改为5.我现在无法确认,但我相信每次测试运行它将前进到下一个记录而不是停留在第一个记录。

0

我假设你只想在有一行数据可用时运行数据测试。

我会改变数据驱动测试读取与原子TRANSATION存储过程像这样的SQL代码:

BEGIN TRANSACTION 

DECLARE @Id UNIQUEIDENTIFIER 

SET @Id = (SELECT top 1 ID from #TestData WHERE TestRun = 0) 
SELECT top 1 * FROM #TestData WHERE ID = @Id 
UPDATE #TestData SET TestRun = 1 WHERE ID = @ID 

COMMIT TRANSACTION 

这将在每次运行测试时给你一个唯一的数据行,使测试用于负载测试。

您将不得不使用SQL Express而不是访问,因为我认为它不能很好地处理并发(可以在这里打开)。

如果您需要在负载测试中所发生的控制,考虑creating a load test plugin,让你实现从下面的负载测试事件代码:

  • LoadTestStarting
  • LoadTestFinished
  • LoadTestWarmupComplete
  • TestStarting
  • TestFinished
  • ThresholdExceeded
  • 心跳
  • LoadTestAborted
0

后来我想通了测试迭代在负载测试场景的属性来控制的,你想运行每个用户的测试次数。

在运行设置

,设置 使用测试迭代=真 测试迭代= XXX(你需要的迭代次数)

也让每个迭代之间的停顿, 在你的方案属性负载测试,设置下面的属性

1)Think Profile = On 2)Think Test迭代间的思考时间= 1

相关问题