【问题标题】:how to make custom extraction rule property data driven?如何使自定义提取规则属性数据驱动?
【发布时间】:2023-04-09 20:38:01
【问题描述】:

我已经创建了自定义提取规则和属性,我需要这些属性是数据驱动的,即我想附加一个数据源(CSV 文件)。我该怎么办?

以下是描述问题的屏幕截图和代码sn-ps

自定义抽取规则类的代码sn-p

public class CustomeExtractionClass : ExtractionRule
{
    public string Name
    {
        get;
        set;
    }

    public override void Extract(object sender, ExtractionEventArgs e)
    {
          // Code to extract text/values from Response Based On NAME(i.e. Property) value 
             received from UI
    }
}

名称属性的用户界面

注意:名称属性旁边的文本框

如何使它成为数据驱动的?就像我们在插入 FormPost 参数时得到的一样......这是示例

注意右下角的下拉按钮,它会拉出附加的数据源...我希望将 Name 属性值附加到同一个数据源...我该怎么做???

【问题讨论】:

    标签: c# visual-studio-2012 load-testing webtest


    【解决方案1】:

    终于在花费了数小时后,我能够将 CSV 文件中的值放入我的自定义提取规则中。我无法将 CSV 文件列绑定到提取规则属性,但是我得到了解决。这就是我所缺少的

    [DataBinding("DataSource1", "mycsvfile#csv", "ProcessInstanceID", "MyProcessInstanceID")]
    

    这里是实现它的步骤

    第 1 步:将数据源添加到 WebTest(如果已添加则跳过)

    第 2 步:从 WebTest 生成代码(如果已经完成则跳过)

    第 3 步:通过在 webtest 类的声明上方添加以下代码行来绑定数据源(即 CSV 文件)列。

    [DataSource("DataSource1", "Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\customextractionrule\\mycsvfile.csv", Microsoft.VisualStudio.TestTools.WebTesting.DataBindingAccessMethod.Sequential, Microsoft.VisualStudio.TestTools.WebTesting.DataBindingSelectColumns.SelectOnlyBoundColumns, "mycsvfile#csv")]
    [DataBinding("DataSource1", "mycsvfile#csv", "ProcessInstanceID", "MyProcessInstanceID")]
    public class WebTest2Coded : WebTest
    {
    

    注意:在上面的代码中,“MyProcessInstanceID” 是 Visual Studio 创建的上下文参数的名称,CSV 文件列的值将分配给该上下文参数。你可以给任何你想要的名字。

    第 4 步:访问自定义提取规则中 Context 参数的值

    public override void Extract(object sender, ExtractionEventArgs e)
        {
            string ProcessIDinCSvFile =  e.WebTest.Context["MyProcessInstanceID"].ToString());
    

    【讨论】:

    • 您能否澄清一下:是网络测试数据驱动的吗?或者,您是否尝试仅对提取规则进行数据驱动。我为DataBindingAttribute 找到的 Microsoft 文档表明这是一个用于帮助创建测试的内部类,而不是用于普通代码。您是在哪里或如何发现使用此属性的?
    • @Adrian :是的,网络测试是数据驱动的。还有其他列我需要用于提取规则。我花了几个小时在 MSDN Kb 文章上查找信息,还尝试了许多排列和组合以及 ExtractionEventArgs 的所有方法和属性,但没有用。最后,当我从我的网络测试生成代码时,我发现了它。我添加了 DataBinding 属性,然后点击 Home run ....
    • @AdrianHHH :根据您的建议,我创建了一个新问题。你能帮忙吗这里是问题的链接:stackoverflow.com/questions/29605846/…
    • @MithunGanatra 你知道是否有办法循环绑定数据吗?我真的很想根据当前状态为要使用的值创建一个查找表。
    • @Brettski : 你能详细说明你的问题陈述吗?
    【解决方案2】:

    要将上下文参数设置为字段中的文本,只需在字段中输入用双花括号括起来的数据源字段的全名。正确的文本形式在问题的图片中以红色圆圈显示,即{{DataSource1.mycsvfile#csv.ProcessInstanceID}}

    也可以通过代码直接从上下文中访问数据源字段,例如

    string theText = e.WebTest.Context["DataSource1.mycsvfile#csv.ProcessInstanceID"].ToString();
    

    如果提取规则的Name 字段设置为内容参数的名称(即不是其值),则可以读出当前值并使用类似代码插入新值

    string theText = e.WebTest.Context[Name].ToString();
    e.WebTest.Context[Name] = "The new string";
    

    【讨论】:

    • 感谢您的回复....建议的解决方案如何不起作用。我尝试使用“{{DataSource1.mycsvfile#csv.ProcessInstanceID}}”将数据源字段添加到 Name 属性,这对我有用。还尝试将上下文参数添加到 webtest,并尝试通过提供“{{DataSource1.mycsvfile#csv.ProcessInstanceID}}”将上下文参数的值绑定到数据源字段,但该功能也可以。提取规则的 Context 参数和 Name 属性似乎只接受字符串值。
    • 我的意思是当我使用“{{DataSource1.mycsvfile#csv.ProcessInstanceID}}”时,我没有在 CSV 文件中获取值....我期待返回的值是什么像“Abc1234”......但运行时的值是“{{DataSource1.mycsvfile#csv.ProcessInstanceID}}”......这是更多描述......我希望自定义提取规则的名称属性是数据绑定...... .
    • 这里有一个问题说明。
    • 我的 Web 请求返回包含多行的表。每行有两列 Process Instance Id 和 LockId (即这个 lockId 是在服务器上动态生成的)。我所有的后续请求都取决于这个 lockId 和 Process Instance Id。我有流程实例 ID,并将其存储在 CSV 文件中。现在要获取 lockId 我创建了提取规则,但我需要告诉我的提取规则我需要哪个进程实例 ID 的 lockid。所以我需要将我的提取规则属性与 CSV 文件列绑定。希望这能让你清楚地了解我的问题。
    • 再次感谢您的回复,非常感谢您花费时间和精力帮助我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多