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

4
我是一名 .net 开发人员,没有关于 JMeter/压力测试的先前经验。我正在尝试使用 JMeter 对我所开发的 ASP.net 网站进行负载测试。使用 JMeter 的原因是它是一款开源工具,具有很高的声誉和可信度。
我参考了 这个链接,以处理 ASP.net 的典型功能 viewstate。然而,我的要求并不像上面所述那么简单。我正在尝试通过向登录页面发送用户名和密码然后测试其他页面来对我的网站进行负载测试,但只有在登录成功后才允许浏览其他页面。
我为实现此目的采取的步骤如下所示。
  1. Create Http Proxy Server by selecting WorkBench > Add > Non-Test Elements.
  2. Changing the network settings in Firefox to the port defined in Http Proxy Server.
  3. Creating a Thread Group by selecting Test Plan > Add > Threads(Users) > Thread Group.
  4. Creating HTTP Request Defaults by selecting Thread Group > Add > Config Element > HTTP Request Defaults.
  5. (a) Entering IP for my remote server in Server Name or IP:
    (b) Entering the path to my log-in page as /MyWebApplication/login.aspx
  6. Create User Defined Variables by selecting Thread Group > Add > Config Element > User Defined Variables.
  7. My login.aspx page is very simple, it takes userid and password from two text-boxes and match them in database and if successful, redirects them to LoginSuccess.aspx page.
    My login.aspx has three server controls only, two asp:TextBox for receiving loginid and password and one asp:Button for checking them in db.
    The id of them are txtLogin, txtPassword, btnLogin respectively.

    In User Defined variables (created in step 6), I've added admin and 123admin, which are real logins in db getting checked in login.aspx page and on success is redirecting to LoginSuccess.aspx page.

    User defined variables:

    Name:          Value    Description
    login          admin    
    password       123admin 
    
  8. I'm adding two Regular Expression Extractor by selecting Thread Group > Add > Post Processors > Regular Expression Extractor.

  9. I've renamed the 1st Regular Expression Extractor as View State Extractor and adding following data to them:

    Reference Name: viewstate
    Regular Expression: name="__VIEWSTATE" id="__VIEWSTATE" value="(.+?)"
    Template:$1$
    Match No.(0 for Random): 1
    Default Value: ERROR
    
  10. Similarly I've renamed the 2nd Regular Expression Extractor as Event Validation Extractor and adding following data to them:

    Reference Name: eventValidation
    Regular Expression: name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.+?)"
    Template:$1$
    Match No.(0 for Random): 1
    Default Value: ERROR
    
  11. In step 5 I added following data

    Send Parameters With the Request:
        Name:             - Value
        txtLogin          - $(login)
        txtPassword       - $(password)
        __VIEWSTATE       - $(viewState)
        __EVENTVALIDATION - $(eventValidation)
    
  12. Now I added HTTP Cookie Manager by selecting Thread Group > Add > Config Element > HTTP Cookie Manager.

  13. Now I added Recording Controller by selecting Thread Group > Add > Logic Controller > Recording Controller.

  14. I started HTTP Proxy Server and then using firefox entered the complete URL to my login.aspx page, entered admin and 123admin in the two text boxes and pressed the Login button and got redirected successfully on LoginSuccess.aspx. I stopped the HTTP Proxy Server and closed my firefox browser.

现在我已经保存了测试计划(包含记录的步骤,这里只有2个步骤,一个是login.aspx,另一个是LoginSuccess.aspx),并在View Result Tree中运行测试并查看测试结果,结果从服务器返回500错误。
由于我无法确定我缺少哪些要素,因此无法成功使用JMeter。我只更改了这里提到的值,而对于我没有写在这里的所有内容,这些值都是默认类型,如“线程数:”。

有答案了吗? - Aliaksandr Belik
我的答案针对JMeter的类似问题可以在这里查看:http://stackoverflow.com/questions/16008413/asp-net-login-testing-with-jmeter/21403901#21403901 - Alex
4个回答

1
  1. 请至少添加更好的脚本模式。
  2. 在上面的第11步中,您有 txtLogin = $(login)txtPassword = $(password),...将变量值称为 $(VAR_NAME) 是不正确的,应该使用 ${VAR_NAME}。 您能确保这只是问题中的拼写错误 - 还是您在脚本中也有相同的错误?
  3. 例如,使用 Debug Sampler / Debug PostProcessor(在应用两个正则表达式提取器后插入)来检查从您的请求中提取了 viewstateeventValidation 的值,并且您的正则表达式查询工作正常。
  4. 查看第二个HTTP请求采样器的请求面板,以查看所有定义的参数(txtLogintxtPassword__VIEWSTATE__EVENTVALIDATION)是否以正确的值随请求一起发送。

0

我使用了CSS/JQuery Extractor,并且它对我很有用。使用正则表达式提取器提取视图状态{viewState}变量时,会出现视图状态损坏的错误消息。

CSS/JQuery提取器中需要设置的参数为:

引用名称:viewState

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

属性:value

我遵循的步骤是:

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

    名称:- 值

    txtLogin - ${login}

    txtPassword - ${password}

    __VIEWSTATE - ${viewState}

    __EVENTVALIDATION - ${eventValidation}


0
在第5步中,请按以下方式更改。
Name:             - Value
txtLogin          - ${login}
txtPassword       - ${password}
__VIEWSTATE       - ${viewState}
__EVENTVALIDATION - ${eventValidation}

请确认正则表达式提取器是否按要求工作。也就是说,请检查它是否获取了正确的值。

-2

Http 500 是一个服务器错误代码,因此不是您的脚本出现了故障。需要做的是在 .aspx 中禁用安全标记。我几个月前也遇到过这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接