如何用jmeter测试CAS?

时间:2013-11-18 02:40:11

标签: xpath single-sign-on jmeter cas

  • 请求:

    我发送“get”http请求,没有参数;
    路径:http://192.168.22.139:8080/KSP

  • 回复:

    <input id="username" type="text" name="username" required/>
    <input id="password" type="password" name="password" required/>
    <input type="hidden" name="lt" value="LT-697-vbNmm6NKOZ0cd7Wg1ywzbMKLa0DnOc" />
    <input type="hidden" name="execution" value="e1s1" />
    <input type="hidden" name="_eventId" value="submit" />
    

我添加了两个XPath Extractor来获取ltexecution

  • 参考名称:lt;
    xPath查询://*[@id="login"]/input[3]
  • 参考名称:execution;
    xPath查询://*[@id="login"]/input[4]

enter image description here

然后我使用username/password/service/It/execution/_eventId发送另一个请求:

enter image description here

错误:我得到的票证和执行是空的,我通过chrome获取xpath,那么问题是什么?

4 个答案:

答案 0 :(得分:5)

从第一个回复中,可以使用正则表达式提取器来提取ticke和lt。 extract ticket

然后使用参数:

发送第二个请求
  

username/password/It/execution/_eventId/_eventId   enter image description here

顺便说一句,你应该添加 HTTP Cookie管理器enter image description here

答案 1 :(得分:3)

我没有看到第一个请求的参数。至少我没有看到 lt

第二个请求应该是GET请求,参数为:服务票证(这不是jsessionid,值由CAS生成,它是与CAS登录的第一个请求中的参数 lt 相同)。

答案 2 :(得分:3)

在第二个请求中需要更改一些内容:

  • 添加execution参数(从第一个请求中提取,例如XPath ExtractorRegular Expression Extractor),

    • XPath表达式类似于.//*[@id='fm1']//*[@name='execution']/@value
  • 添加_eventId=submit参数,

  • {@ 1}}参数(登录票证)也应该从登录表单中提取 - 它每次都会改变;请参阅ltXPath Extractor

    • XPath表达式:Regular Expression Extractor
  • 不是必需的,但会看起来更好 - 将GET更改为POST。

答案 3 :(得分:2)

如果您正在测试CAS登录本身,我可以建议使用JMeter HTTP Proxy server来记录登录过程,捕获所有正在传递的值,检测那些是动态的,并通过正则表达式提取器处理它们,XPath, Beanshell等后处理器 - 您最满意的。

如果您的应用程序位于CAS后面,我猜CAS登录只是添加了一个cookie,您的应用程序会根据它来考虑用户身份验证。在这种情况下,您只需将Cookie存储在CSV文件中,然后通过HTTP Cookie Manager使用它们来模拟经过身份验证的用户。