【问题标题】:How can I access a Run Setting -> Context Parameter from code in a class inheriting from WebTest如何从继承自 WebTest 的类中的代码访问运行设置 -> 上下文参数
【发布时间】:2016-04-01 13:57:56
【问题描述】:

VS2013,我有一个负载测试。我希望能够在各种环境(即开发、登台、生产)中运行此负载测试。我希望能够在运行时传递一些特定于环境的信息,例如服务器 url、登录信息等。所以我在考虑配置或上下文参数。我可以找到大量关于如何添加上下文参数 (https://msdn.microsoft.com/en-us/library/ff406971(v=vs.120).aspx) 的信息,但没有关于如何访问所述参数的信息。有人可以指出我正确的方向吗?上下文参数是否适合这项工作?

【问题讨论】:

    标签: c# visual-studio-2013 performance-testing


    【解决方案1】:

    在 VS 负载测试中添加“配置”的最佳方法是使用上下文参数。为此,您需要:

    1. 添加上下文参数(右键单击所需的运行设置)。
    2. 然后,为了能够通过编码访问这些参数 WebTests,你需要创建一个负载测试插件类(见下面的插件类)。
    3. 最后你需要将此插件添加到负载测试中(右键单击负载测试的根节点)。

    此类将添加所有活动运行设置的上下文参数您的编码 WebTest。

    using System;
    using Microsoft.VisualStudio.TestTools.LoadTesting;
    
    namespace VerificationLoadTest
    {
        public class ContextParameterLoadTestPlugin : ILoadTestPlugin
        {
            LoadTest LoadTest;
            public void Initialize(LoadTest loadTest)
            {
                this.LoadTest = loadTest;
                this.LoadTest.TestStarting += new EventHandler<TestStartingEventArgs>(TestStarting);
            }
    
            void TestStarting(object sender, TestStartingEventArgs e)
            {
                foreach (string key in LoadTest.Context.Keys)
                {
                    e.TestContextProperties.Add(key, LoadTest.Context[key]);
                }
            }               
        }
    } 
    

    一旦项目被编译并将插件添加到负载测试(上面的第 3 步),就可以像这样访问参数:

    public class ContextParameterTest : WebTest
    {
         public override IEnumerator<WebTestRequest> GetRequestEnumerator()
         {
              var serviceUrl = this.Context[ContextParamKey].ToString();
              WebTestRequest webTestRequest = new WebTestRequest(serviceUrl);
    
              ... build your request
    
              request.PostRequest += request_PostRequest;
              yield return request;
              request = null;
         }
    }    
    

    【讨论】:

      【解决方案2】:

      在 VS 2015 中,我认为在这方面并没有太大的不同,all 负载测试上下文条目可通过 WebTest.Context 在 C# 中使用,并且不需要通过插件显式添加.在负载测试插件中,您还可以通过LoadTest.Context 仅访问负载测试上下文。

      我发现调试测试在调查这些类型的问题时非常有用。负载测试、Web 测试 (*.webtest) 和编码的 Web 测试(通过上下文菜单)都支持除运行之外的调试操作。这将尊重您的断点,并允许您遍历WebTest 实例的所有成员。如果您不使用 Coded Web Tests,则必须在某处放置 C# 代码以放置断点,例如通过自定义插件、提取器等。

      【讨论】:

        【解决方案3】:

        您提供的链接包含字词

        ...如果负载测试中的Web性能测试使用与负载测试中的上下文参数相同的上下文参数名称,则负载测试中的上下文参数将覆盖Web性能测试中使用的上下文参数

        通过将 then 括在双花括号中,可以在 Web 测试中的许多地方使用上下文参数。例如,上下文参数中的值,比如MyContextParameter,可以用在 URL 或查询字符串等中,样式为 {{MyContextParameter}}some text {{MyContextParameter}} and more text

        可以通过使用e.WebTest.Context 字段在Web 测试插件或Web 测试请求插件中读取上下文参数,其中e...EventArgs 参数。

        【讨论】:

        • 我不确定你在这里说的是否属实。如果不使用我上面描述的插件,在 loadTests RunSettings 的 UI 中设置的 ContextParameters 在编码的 WebTest 中不可用。我没有使用插件,我创建它的唯一原因是因为它是我能找到复制 ContextParameters 的唯一方法。
        • @goyo 刚刚检查了 Visual Studio 2013 Ultimate。从运行设置的上下文菜单(例如Run Settings1)中添加了一个与Web 测试中的名称相同但值不同的上下文参数。 Web 测试的参数被负载测试中的参数覆盖。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-25
        • 2012-03-03
        • 1970-01-01
        • 2017-06-21
        • 2018-10-16
        • 2020-12-10
        相关资源
        最近更新 更多