2013年5月11日星期六

JMeter_003:压力测试指南之三:测试Form安全认证的Web应用

开发运行环境:JMeter 2.9 + Weblogic 12.1.1 开发版

上一个实验测试的是Basic安全认证的Web应用,实际使用中一般用的都是Form安全认证方式。
本文介绍如何使用JMeter测试Form安全认证的Web应用。

部署应用HelloFormAuth,其中web.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
version="2.5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <display-name>HelloFormAuth</display-name>

 <servlet>
    <display-name>index</display-name>
    <servlet-name>index</servlet-name>
    <jsp-file>/index.jsp</jsp-file>
  </servlet>
  <security-constraint>
    <display-name>SecurityConstraint</display-name>
    <web-resource-collection>
      <web-resource-name>WRCollection</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>loginUser</role-name>
    </auth-constraint>
    <user-data-constraint>
      <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
  </security-constraint>
  <login-config>
    <auth-method>FORM</auth-method>
    <realm-name>file</realm-name>
    <form-login-config>
      <form-login-page>/logon.jsp</form-login-page>
      <form-error-page>/logonError.jsp</form-error-page>
    </form-login-config>
  </login-config>
  <security-role>
    <role-name>loginUser</role-name>
  </security-role>
</web-app>

其中weblogic.xml内容如下:
<?xml version='1.0' encoding='UTF-8'?>
<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <security-role-assignment>
    <role-name>loginUser</role-name>
    <principal-name>employees</principal-name>
  </security-role-assignment>
</weblogic-web-app>

使用Live HTTP Header监测,发现请求中的j_username和j_password是明文。


使用JMeter录制测试脚本,发现其中有一个请求指向j_security_check,其中的参数就是j_username和j_password。


为了能够测试更多的用户,这里使用CSV Data Set Config:右键/HelloFormAuth/j_security_check,选择添加Config Element,选择CSV Data Set Config。
这里我的login_users.csv内容如下:
albert,welcome1
joe,welcome1
john,welcome1
mary,welcome1
ted,welcome1
注意,这里的用户都要属于employees Group,否则没有权限访问。

其余设置见下图,其中我定义了两个变量:login和password。各项说明如下:
Variable Names:文件中各列所表示的参数项;各参数项之间利用逗号分隔,一般有多少列就有多少参数项
Delimiter:如文件中使用的是逗号分隔,则填写逗号;如使用的是TAB,则填写\t。
Recycle on EOF:True,当读取文件到结尾时,再从头读取文件;False,当读取文件到结尾时,停止读取文件。因为CSV Data Set Config一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入。
Stop thread on EOF: 当Recycle on EOF为False时起效;True,当读取文件到结尾时,停止进程。

点击/HelloFormAuth/j_security_check,把j_username的值改为${login},把j_password的值改为${password}。

Project 下载:HelloFormAuth.war HelloFormAuth.jmx

参考文献:
1. http://ivetetecedor.com/how-to-use-a-csv-file-with-jmeter/
2. https://java.net/projects/javaeetutorial/downloads
3. http://blog.sina.com.cn/s/blog_671c968b0100j3qd.html
4. http://blog.chenlb.com/2009/03/jmeter-use-dynamic-params-or-csv-for-test.html
5. http://qainsights.com/how-to-change-user-agent-string-in-jmeter/

没有评论: