【问题标题】:How to change the Web Performance test execution path如何更改 Web 性能测试执行路径
【发布时间】:2015-09-07 13:03:42
【问题描述】:

我在 MS Visual Studio 2015 中创建了一个 Web 性能和负载测试项目。在该项目下,我创建了一些 Web 性能测试。

但是我们有不同的团队环境,我们想在所有服务器上运行这些测试,所以我在每个 web 性能测试下使用“上下文参数”更改了 url 地址

使用上下文参数后,URL 变为: https://{{WebServer}}/WebSite/account/signin,它按预期工作。

但是,我想知道是否有一个配置文件,我可以在其中更新服务器路径,因此无需每次都更改网络测试。 我在Local.testsettingstest.runsettings 中尝试了不同的选项。但无法使其动态化。

谢谢。

【问题讨论】:

    标签: visual-studio-2015 performance-testing configuration-files load-testing


    【解决方案1】:

    有几个选项。

    1. 可以在负载测试中设置上下文参数。在此处设置的值会覆盖在 Web 测试中设置的值。使用这种方法,您或许可以制作多份负载测试副本,每个副本用于所需的环境。

    2. 环境变量可以设置或覆盖上下文参数的值。设置名为“Test.MyWebServer”的环境变量将覆盖MyWebServer 上下文参数的值。

    【讨论】:

      【解决方案2】:

      感谢您的回复。但是我们不想重复测试用例。 目前,我们将 WebTestPlugin 类中的配置文件读取为

      public class LoginAssistPlugin : WebTestPlugin
      {
             ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
             fileMap.ExeConfigFilename = configFilePath;
             _config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
      }
      

      上面的方法写在插件类的构造函数中。 并且服务器主机名设置为静态变量。然后我们使用下面 WebTestPlugin 类中的其他可覆盖方法来替换 Web 性能测试中的 WebContext 参数。

      public override void PreRequest(object sender, PreRequestEventArgs e)
              {
                  e.Request.Url = e.Request.Url.Replace("{{WebServer}}", _webServer);
                  e.Request.Url = e.Request.Url.Replace("{{IdentityServer}}", _identityServer);
      
                  e.Request.QueryStringParameters.ToList().ForEach(param => param.Value = param.Value.Replace("{{WebServer}}", _webServer));
                  e.Request.QueryStringParameters.ToList().ForEach(param => param.Value = param.Value.Replace("{{ClientId}}", _clientId));
                  e.Request.QueryStringParameters.ToList().ForEach(param => param.Value = param.Value.Replace("{{WebClientPath}}", _webClientPath));
      
                  //if(e.WebTest.Name == "signin")
                  //    e.Request.QueryStringParameters.ToList().ForEach(param => param.Value = param.Value.Replace("{{UserName}}", userName));
      
                  e.Request.Headers.ToList().ForEach(header => header.Value = header.Value.Replace("{{WebClientPath}}", _webClientPath));
                  e.Request.Headers.ToList().ForEach(header => header.Value = header.Value.Replace("{{IdentityServer}}", _identityServer));
                  e.Request.Headers.ToList().ForEach(header => header.Value = header.Value.Replace("{{WebServer}}", _webServer));
                  e.Request.Headers.ToList().ForEach(header => header.Value = header.Value.Replace("{{ClientId}}", _clientId));
      
                  if (_token != null)
                  {
                      e.Request.Headers.Add("Authorization", "Bearer " + _token);
                  }
              }
      

      然后这个插件用于每个网络性能测试。 任何更多的帮助/提示将是 hlpfull。

      【讨论】:

      • 这不是答案。请编辑原始问题以包含此信息。但也请澄清问题中的“so the web test无需每次都更改”和上面的“我们不想重复测试用例”之间的明显矛盾.
      • 我同意,这不是确切的答案,但它满足了我的需求。 “我们不想重复测试用例意味着”——我们为各个团队以及分段和集成环境提供分支,我们希望通过命令提示符在所有这些环境中运行这些测试,而用户交互最少。所以我们需要从配置文件中读取 Web 服务器路径。 “所以不需要每次都更改 Web 测试” - 也指同一件事,不同分支上的结果应该在 MTM 中可见。我希望,我已经澄清了疑惑。
      猜你喜欢
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 2015-12-09
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多