Visual Studio 2010 Ultimate Web性能测试和负载测试虚拟用户帐户
问题描述:
我需要加载测试网站。它使用Crowd Authentication来验证用户身份。Visual Studio 2010 Ultimate Web性能测试和负载测试虚拟用户帐户
我创建了一个Visual Studio 2010测试项目,并创建了一个Web性能测试,用于记录测试时使用的用户名和密码。我附加了一个访问数据库,其中包含一个名为Users的表,该表已绑定到登录表单,并且测试套件对users表中的每行数据运行测试。
这是所有工作,因为我所期望的。
现在我想用最多250个并发用户运行负载测试。如何让Visual Studio在负载测试中为每个虚拟用户使用不同的用户名和密码。
总之,我想为负载测试中的每个虚拟用户设置配置文件。
答
我会创建一个Web测试,每次只使用一个登录名登录。然后,您可以在webtest中创建一小段代码,以便从数据库中获取“随机”登录码以选择登录。
如果您需要每个测试的唯一登录名,您将必须估计需要多少登录名并预先填充这么多。
从数据库中选择的问题是虚拟用户共享线程,并且测试中的任何阻止代码将阻止多个虚拟用户。 可以在内存中创建一个包含所有登录细节的列表,但在高度多线程环境中管理共享对象需要小心。
对于我们来说,我们创建了一个存储过程,获取下一个登录密码和用户名,然后调用以下方法获取下一次登录。
public static bool GetNextLogin(out string userName, out string password)
{
bool result = false;
using (SqlConnection connection = new SqlConnection(loadTestLoginsConnection))
{
using (SqlCommand command = new SqlCommand("GetNextID", connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
userName = reader["UserName"].ToString().Trim();
password = reader["Password"].ToString().Trim();
result = true;
}
}
}
}
return result;
}
这对我们没有任何问题,返回的值可以添加到正确的表单发布参数。如果使用普通身份验证,则可以在负载测试构造函数中使用相同的代码来更改WebTest.UserName和WebTest.Password属性。
我们的存储过程可以登录的列表,并具有一个int字段的表叫上工作CurrentLoginID
BEGIN TRANSACTION
BEGIN TRY
DECLARE @CurrentID AS INT
UPDATE CurrentLoginID SET Number = Number+1
SELECT @CurrentID = Number FROM CurrentLoginID
SELECT [Password], UserName FROM AvailableLogins WHERE AvailableLogins.ID = @CurrentID
COMMIT
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
-- Use RAISERROR inside the CATCH block to return error
-- information about the original error that caused
-- execution to jump to the CATCH block.
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
ROLLBACK TRAN
END CATCH
NAT,这看起来像来解决这个问题的合理方法。我希望有一些神奇的“无证”配置可以做我想要的。 我想我会担心通过写更多的帐户特定的Web测试登录和只是加载测试这些。 – Peter 2010-07-29 03:39:18
这将工作正常。 – Nat 2010-07-29 21:51:16