2010-07-27 126 views
3

我需要加载测试网站。它使用Crowd Authentication来验证用户身份。Visual Studio 2010 Ultimate Web性能测试和负载测试虚拟用户帐户

我创建了一个Visual Studio 2010测试项目,并创建了一个Web性能测试,用于记录测试时使用的用户名和密码。我附加了一个访问数据库,其中包含一个名为Users的表,该表已绑定到登录表单,并且测试套件对users表中的每行数据运行测试。

这是所有工作,因为我所期望的。

现在我想用最多250个并发用户运行负载测试。如何让Visual Studio在负载测试中为每个虚拟用户使用不同的用户名和密码。

总之,我想为负载测试中的每个虚拟用户设置配置文件。

回答

4

我会创建一个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 
+0

NAT,这看起来像来解决这个问题的合理方法。我希望有一些神奇的“无证”配置可以做我想要的。 我想我会担心通过写更多的帐户特定的Web测试登录和只是加载测试这些。 – Peter 2010-07-29 03:39:18

+0

这将工作正常。 – Nat 2010-07-29 21:51:16

相关问题