我有一个datadriven单元测试,它从访问数据库读取并执行数据库中的所有行。当我将其添加到负载测试并使用5个并发用户执行时,数据库中的所有记录都执行5次。我面临的问题是,当数据库中有更多记录时,测试需要更多时间来执行。还有一种方法可以限制测试只执行一个数据行吗?
答案 0 :(得分:1)
您是否尝试在数据库中每行运行一次测试然后停止?如果是这样,您应该避免使用Web测试作为负载测试。
我认为你有两个选择,但我没有在我面前的工作电脑确认。
选项1:像您已经完成的那样创建Web测试,包括将其连接到访问数据库,就像您可能已经拥有的那样。然后将测试转换为编码的Web测试。并更改代码,使其为数据源中的每个记录运行一次(换句话说,为编码的webtest添加外部循环)。
选项2:编辑本地测试运行配置以运行测试N次。从主菜单转到测试/编辑测试运行配置,选择您的测试配置,从左侧窗格选择Web测试,然后将固定运行计数更改为5.我现在无法确认,但我相信每次测试运行它会进入下一个记录,而不是留在第一个记录上。
答案 1 :(得分:0)
我假设您只希望在有一行数据可用时运行数据测试。
我会更改驱动测试的数据,以读取带有原子转换的存储过程,例如此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来实现以下负载测试事件中的代码:
答案 2 :(得分:0)
后来我在负载测试中找出了场景的测试迭代属性,以控制你想为每个用户运行测试的次数。
在运行设置中,设置 使用test iterations = true test iterations = xxx(你需要的迭代次数)
也要在每次迭代之间暂停, 在加载测试的方案属性中,设置以下属性
1)认为Profile = On 2)思考测试迭代之间的时间= 1