如何在Web测试插件中访问数据驱动值

时间:2013-05-16 13:00:46

标签: visual-studio web-testing

我在Visual Studio 2012中进行了数据驱动的Web性能测试。我想在PreRequest()PostRequest()插件中访问数据源中的值。通过{{DataSource1.PaymentAccounts#csv.USER_ID}}等绑定,已经为表单发布参数访问了这些值。

我的最终目标是将值写入Web日志注释,以便更容易识别失败测试的数据源值。因此,值将传递给e.WebTest.AddCommentToResult(string.Format(...))的调用。

2 个答案:

答案 0 :(得分:2)

值存储在文本上下文中,因此只需使用WebTestRequestPlugin代码访问该值,例如:

object contextParameterObject;
if ( e.WebTest.Context.TryGetValue("DataSource1.PaymentAccounts#csv.USER_ID",
                out contextParameterObject) ) {
    string contextParameter = contextParameterObject.ToString();
    e.WebTest.AddCommentToResult(contextParameter);
}
else {
    throw new WebTestException("'DataSource1.PaymentAccounts#csv.USER_ID' not found");
}

默认情况下,上下文仅包含Web测试文件中显式使用的数据源的那些字段(列)。要使数据源中的所有字段可用,请将数据源文件的选择列属性设置为选择所有列

答案 1 :(得分:2)

两个关键提示:

  1. 注意缺少ANSI!确保已将DS文件(csv文件)保存为ANSI this stackoverflow post。开头的那些unicode字节顺序标记将使您在编写DS字符串时难以引用列名。 “DataSource1.mycsvfile#csv.myDSColumnName”比以下更好: “DataSource1.mycsvfile#csv.myDSColumnName”
  2. 然后,除了trygetvalue(这是好的)你还应该只能写:

    string currentRowFromDS = e.WebTest.Context["DataSource1.mycsvfile#csv.myDSColumnName"].ToString();
    
    1. 将DS添加到webtest后,请务必将“选择列”属性更改为“选择所有列”(而不是“仅选择绑定列”)。如果您将其保留为默认值“仅选择绑定列”,并且您尚未实际绑定列,则Visual Studio不会将行值放入Web测试中。上下文参数根本不存在。
    2. 此行为与单元测试中的SQL数据源不同,例如,您只需分配变量。通常,用于向单元测试添加数据的API(Microsoft.VisualStudio.TestTools.UnitTesting)与用于向Web测试Microsoft.VisualStudio.TestTools.WebTesting添加数据的API略有不同。