如何使用JMeter对实现viewstate的ASP.net web应用程序进行负载测试

如何使用JMeter对实现viewstate的ASP.net web应用程序进行负载测试,asp.net,jmeter,viewstate,load-testing,Asp.net,Jmeter,Viewstate,Load Testing,我是一名.net开发人员,之前没有JMeter/压力测试方面的经验。我正在尝试对使用JMeter开发的ASP.net网站进行负载测试。使用JMeter的原因是它是一个开源工具,有很多名气和信誉。 我提到是为了处理viewstate,这是ASP.net的一个典型特性。然而,我的要求并不像上面所说的那么简单。我正在尝试通过发送用户ID和密码登录页面来加载测试我的站点,然后通过其他页面进行测试,这些页面只有在登录成功时才允许浏览 下面列出了我为实现这一目标而采取的步骤 通过选择工作台>添加>非测试元素

我是一名.net开发人员,之前没有JMeter/压力测试方面的经验。我正在尝试对使用JMeter开发的ASP.net网站进行负载测试。使用JMeter的原因是它是一个开源工具,有很多名气和信誉。
我提到是为了处理viewstate,这是ASP.net的一个典型特性。然而,我的要求并不像上面所说的那么简单。我正在尝试通过发送用户ID和密码登录页面来加载测试我的站点,然后通过其他页面进行测试,这些页面只有在登录成功时才允许浏览

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

  • 通过选择工作台>添加>非测试元素来创建Http代理服务器
  • 将Firefox中的网络设置更改为Http代理服务器中定义的端口
  • 通过选择测试计划>添加>线程(用户)>线程组,创建
    线程组
  • 通过选择线程组>添加>配置元素>HTTP请求默认值,创建
    HTTP请求默认值
  • (a) 在
    服务器名称或IP:
    中输入我的远程服务器的IP
    (b) 以
    /MyWebApplication/login.aspx
  • 通过选择线程组>添加>配置元素>用户定义变量,创建用户定义变量
  • 我的login.aspx页面非常简单,它从两个文本框中获取用户名和密码,并在数据库中匹配它们,如果成功,则将它们重定向到loginsucess.aspx页面。
    My login.aspx只有三个服务器控件,两个
    asp:TextBox
    用于接收loginid和密码,一个
    asp:Button
    用于在数据库中检查它们。
    它们的id分别是
    txtLogin
    txtPassword
    btnLogin

    在用户定义的变量(在步骤6中创建)中,我添加了admin和123admin,它们是在login.aspx页面中签入的db中的真实登录,成功后将重定向到loginsucess.aspx页面

    用户定义变量:

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

  • 我已将第一个正则表达式提取器重命名为
    查看状态提取器
    ,并向其添加了以下数据:

    Reference Name: viewstate
    Regular Expression: name="__VIEWSTATE" id="__VIEWSTATE" value="(.+?)"
    Template:$1$
    Match No.(0 for Random): 1
    Default Value: ERROR
    
    Reference Name: eventValidation
    Regular Expression: name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.+?)"
    Template:$1$
    Match No.(0 for Random): 1
    Default Value: ERROR
    
  • 类似地,我将第二个正则表达式提取器重命名为
    事件验证提取器
    ,并向其添加了以下数据:

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

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

  • 现在我通过选择线程组>添加>逻辑控制器>录制控制器来添加录制控制器

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

  • 现在我已经保存了测试计划(包含记录的步骤,这里只有两个步骤,一个用于login.aspx,另一个用于loginsucess.aspx),并运行测试并在视图结果树中查看测试结果,该树从服务器返回500个错误

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

  • 请至少为脚本添加更好的架构
  • 好的,在上面的步骤11中,您有
    txtLogin=$(login)
    txtPassword=$(password)
    ,…
    将变量值引用为
    $(VAR\u NAME)
    不正确,应使用
    ${VAR\u NAME}

    你能保证这只是你问题中的拼写错误吗?或者你的脚本中有相同的拼写错误吗
  • 使用例如/(在应用两个正则表达式提取器之后插入)检查
    viewstate
    eventValidation
    的值是否都是从您的请求中提取的,并且正则表达式查询是否正常工作
  • 在查看结果树结果时查看第二个HTTP请求采样器的请求面板,以确保所有定义的参数(
    txtLogin
    txtPassword
    \uuu VIEWSTATE
    \uu EVENTVALIDATION
    )以及正确的值都随请求一起发送

  • Http 500是。服务器错误代码,因此不是您的脚本失败。要禁用几个月前我遇到的安全性,必须在.aspx中添加一个标记。在步骤5中,更改如下

    Name:             - Value
    txtLogin          - ${login}
    txtPassword       - ${password}
    __VIEWSTATE       - ${viewState}
    __EVENTVALIDATION - ${eventValidation}
    
    还要验证正则表达式提取器是否按要求工作。我的意思是检查它是否获取了正确的值

    我用过 这对我很有效。使用视图状态{viewState}的正则表达式提取器时,传递了变量,并收到视图状态损坏错误消息

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

    参考名称:viewState

    CSS/JQuery表达式:输入[id=\uu VIEWSTATE]

    属性:值

    我遵循的步骤是:-

  • 首先做登录过程的记录
  • 拖动线程组中所需的页面
  • 在登录页面的get请求中,分别为视图状态和事件验证添加两个CSS/JQuery提取器
  • 在登录页面的post请求中,按如下所示添加正文参数并运行批处理

    名称:-值

    txtLogin-${login}

    txtPassword-${password}

    __VIEWSTATE-${VIEWSTATE}

    __EVENTVALIDATION-${EVENTVALIDATION}


  • 我对jmeter模拟问题的回答可以在这里查看: