【问题标题】:How to use JMeter for load testing ASP.net web applications implementing viewstate如何使用 JMeter 对实现视图状态的 ASP.net Web 应用程序进行负载测试
【发布时间】:2013-03-06 13:31:18
【问题描述】:

我是一名 .net 开发人员,之前没有 JMeter/压力测试方面的经验。我正在尝试对我使用 JMeter 开发的 ASP.net 网站进行负载测试。使用 JMeter 的原因是它是一个开源工具,具有很高的知名度和可信度。
我参考了this link 来处理视图状态,这是 ASP.net 的一个典型特性。但是,我的要求并不像那里所说的那么简单。我正在尝试通过将用户名和密码发送到登录页面来加载测试我的网站,然后通过仅在登录成功时才允许浏览的其他页面进行测试。

下面列出了我为实现这一目标而采取的步骤。

  1. 通过选择 WorkBench > Add > Non-Test Elements 创建 Http 代理服务器。
  2. 将 Firefox 中的网络设置更改为 Http 代理服务器中定义的端口。
  3. 通过选择“测试计划”>“添加”>“线程(用户)”>“线程组”来创建 Thread Group
  4. 通过选择线程组 > 添加 > 配置元素 > HTTP 请求默认值来创建 HTTP Request Defaults
  5. (a) 在Server Name or IP: 中输入我的远程服务器的 IP
    (b) 输入我的登录页面路径为/MyWebApplication/login.aspx
  6. 通过选择线程组 > 添加 > 配置元素 > 用户定义的变量来创建 User Defined Variables
  7. 我的 login.aspx 页面非常简单,它从两个文本框中获取用户名和密码,并在数据库中匹配它们,如果成功,将它们重定向到 LoginSuccess.aspx 页面。
    我的 login.aspx 只有三个服务器控件,两个 asp:TextBox 用于接收登录 ID 和密码,一个 asp:Button 用于在 db 中检查它们。
    它们的id分别为txtLogintxtPasswordbtnLogin

    在用户定义的变量(在第 6 步中创建)中,我添加了 admin 和 123admin,它们是 db 中的真实登录名,在 login.aspx 页面中进行检查,成功后重定向到 LoginSuccess.aspx 页面。

    用户定义变量:

    Name:          Value    Description
    login          admin    
    password       123admin 
    
  8. 我通过选择线程组 > 添加 > 后处理器 > 正则表达式提取器来添加两个正则表达式提取器。

  9. 我已将第一个正则表达式提取器重命名为 View State Extractor 并向其中添加以下数据:

    Reference Name: viewstate
    Regular Expression: name="__VIEWSTATE" id="__VIEWSTATE" value="(.+?)"
    Template:$1$
    Match No.(0 for Random): 1
    Default Value: ERROR
    
  10. 同样,我已将第二个正则表达式提取器重命名为 Event Validation Extractor 并向其中添加以下数据:

    Reference Name: eventValidation
    Regular Expression: name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.+?)"
    Template:$1$
    Match No.(0 for Random): 1
    Default Value: ERROR
    
  11. 在第 5 步中,我添加了以下数据

    Send Parameters With the Request:
        Name:             - Value
        txtLogin          - $(login)
        txtPassword       - $(password)
        __VIEWSTATE       - $(viewState)
        __EVENTVALIDATION - $(eventValidation)
    
  12. 现在我通过选择线程组 > 添加 > 配置元素 > HTTP Cookie 管理器添加了 HTTP Cookie 管理器。

  13. 现在我通过选择 Thread Group > Add > Logic Controller > Recording Controller 添加了 Recording Controller。

  14. 我启动了 HTTP 代理服务器,然后使用 firefox 输入了我的 login.aspx 页面的完整 URL,在两个文本框中输入了 admin 和 123admin,然后按下了 Login 按钮并在 LoginSuccess.aspx 上成功重定向。我停止了 HTTP 代理服务器并关闭了我的 firefox 浏览器。

现在我已经保存了测试计划(包含记录的步骤,这里只有 2 个步骤,1 个用于 login.aspx,另一个用于 LoginSuccess.aspx)并运行测试并在返回的 View Result Tree 中查看测试结果来自服务器的 500 错误。

我无法确定我在这里缺少什么成分,因此我无法成功使用 JMeter。我只更改了这里提到的那些值,对于我没有在这里写的所有内容,这些值都是默认类型,例如 No of thread:

【问题讨论】:

标签: asp.net jmeter viewstate load-testing


【解决方案1】:
  1. 请至少添加更好的脚本架构。
  2. 好吧,在上面的第 11 步中,您有 txtLogin = $(login)txtPassword = $(password)、...
    将变量值引用为$(VAR_NAME) 不正确,应使用${VAR_NAME}
    您能否确保您的问题只是拼写错误 - 或者您在脚本中有相同的拼写错误?
  3. 使用例如Debug Sampler / Debug PostProcessor(在两个 RegEx 提取器应用后插入)检查是否从您的请求中提取了 viewstateeventValidation 的值,并且您的正则表达式查询正常工作。
  4. 在查看结果树结果中查看第二个 HTTP 请求采样器的请求面板,以确保所有已定义的参数(txtLogintxtPassword__VIEWSTATE__EVENTVALIDATION)与正确的值一起发送请求。

【讨论】:

    【解决方案2】:

    在第5步中,更改如下

    Name:             - Value
    txtLogin          - ${login}
    txtPassword       - ${password}
    __VIEWSTATE       - ${viewState}
    __EVENTVALIDATION - ${eventValidation}
    

    同时验证正则表达式提取器是否按要求工作。我的意思是检查它是否获取正确的值。

    【讨论】:

      【解决方案3】:

      我用CSS/JQuery Extractor 它对我有用。使用视图状态 {viewState} 变量的正则表达式提取器被传递并得到视图状态损坏错误消息。

      要在 CSS/JQuery 提取器中设置的参数是:-

      参考名称:viewState

      CSS/JQuery 表达式:输入[id=__VIEWSTATE]

      属性:值

      我遵循的步骤是:-

      1. 首先记录登录过程。
      2. 在线程组中拖动所需的页面。
      3. 在登录页面的获取请求中添加两个 CSS/JQuery 提取器,分别用于视图状态和事件验证。
      4. 在登录页面的post请求中添加body参数如下并运行批处理。

        名称:- 值

        txtLogin - ${login}

        txtPassword - ${密码}

        __VIEWSTATE - ${viewState}

        __EVENTVALIDATION - ${eventValidation}

      【讨论】:

        【解决方案4】:

        Http 500 是。服务器错误代码,所以不是你的脚本失败了必须做的是.aspx中的一个标签来禁用我几个月前遇到的安全性

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多