这是Gatling记录器脚本。
val httpProtocol = http
// LaunchURL
.baseURL("https://mywebsite/instance")
.acceptHeader("*/*")
.acceptEncodingHeader("gzip, deflate")
.acceptLanguageHeader("en-US,en;q=0.5")
.connection("keep-alive")
.userAgentHeader("Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0")
// Login
.exec(http("request_6")
.post("""/cas/login;jsessionid=cN7KK9FvXzsqWjmLxL2M5xjk.undefined?service=https://mywebsite/instance/index.jsp""")
.headers(headers_6)
.param("""username""", """abc""")
.param("""password""", """abcpwd""")
.param("""lt""", """LT-828-wppjtrEoGU6gj9UVFt3soVqQ3mLMwe""")
.param("""execution""", """e1s1""")
.param("""_eventId""", """submit""")
.param("""submit""", """LOGIN"""))
.pause(10)
如果我们看到这三行:
.param("""username""", """abc""")
.param("""password""", """abcpwd""")
.param("""lt""", """LT-828-wppjtrEoGU6gj9UVFt3soVqQ3mLMwe""")
我们将对用户名和密码使用参数化。这些是我们在运行测试时可以从csv文件中获取的输入值。这里“lt”是票证的参数。当我们启动URL时,它是由CAS生成的。
以下代码是BaseURL响应的一部分。
<table width="100%">
<tr>
<td>
<label for="username" class="fl-label"><span class="accesskey">U</span>sername:</label>
<input id="username" name="username" class="required" tabindex="1" accesskey="u" type="text" value="" size="25" autocomplete="false"/>
</td>
</tr>
<tr>
<td>
<label for="password" class="fl-label"><span class="accesskey">P</span>assword:</label>
<input id="password" name="password" class="required" tabindex="2" accesskey="p" type="password" value="" size="25" autocomplete="off"/>
</td>
</tr>
<tr>
<td>
<input id="warn" name="warn" value="true" tabindex="3" accesskey="w" type="checkbox" />
<label for="warn"><span class="accesskey">W</span>arn me before logging me into other sites.</label>
<input type="hidden" name="lt" value="LT-828-wppjtrEoGU6gj9UVFt3soVqQ3mLMwe" />
<input type="hidden" name="execution" value="e1s1" />
<input type="hidden" name="_eventId" value="submit" />
</td>
</tr>
<tr>
<td>
<input class="btn-submit" name="submit" accesskey="l" value="LOGIN" tabindex="4" type="submit" />
<input class="btn-reset" name="reset" accesskey="c" value="CLEAR" tabindex="4" type="reset" />
</td>
</tr>
</table>
此处CAS在BaseURL响应中生成了票证"LT-828-wppjtrEoGU6gj9UVFt3soVqQ3mLMwe"
。在这里,我需要从BaseURL响应中提取票证,并在登录请求中使用此票证。
上一篇我使用J中的正则表达式从BaseURL Response中提取票证name="lt" value="(.*?)"
。
请帮我讲解如何在Gatling中提取门票。
你可以告诉我如何关联View状态。
谢谢&amp;此致
纳拉辛哈
答案 0 :(得分:3)
首先,您需要向服务发出第一个GET
请求:
http("getLogin")
.get(casUrl)
考虑到casUrl
val包含实际服务的路径,那么,只有这样,您才能使用css表达式检索所需的信息:
http("getLogin")
.get(casUrl)
.check(css("input[name='lt']", "value").saveAs("lt"))
Checkers用于从请求正文中提取数据。 saveAs
是重要的部分。它将允许您将数据记录到gatling的会话中。
您可以通过这种方式重复使用它:
http("postLogin")
.post(...)
...
.param("lt", "${lt}")
括号也是强制性的:它注意到Gatling尝试在会话中搜索与键lt
相关联的值。
以下是基于您的脚本的完整示例:
val casUrl = "/cas/login;jsessionid=cN7KK9FvXzsqWjmLxL2M5xjk.undefined?service=https://mywebsite/instance/index.jsp"
val httpProtocol = http
// LaunchURL
.baseURL("https://mywebsite/instance")
.acceptHeader("*/*")
.acceptEncodingHeader("gzip, deflate")
.acceptLanguageHeader("en-US,en;q=0.5")
.connection("keep-alive")
.userAgentHeader("Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0")
// Login
.exec(
http("getLogin")
.get(casUrl)
.check(css("input[name='lt']", "value").saveAs("lt")))
.exec(
http("postLogin")
.post(casUrl)
.headers(headers_6)
.param("username", "abc")
.param("password", "abcpwd")
.param("lt", "${lt}")
.param("execution", "e1s1")
.param("_eventId", "submit")
.param("submit", "LOGIN"))
我冒昧地删除了三重引号,这在本用例中是不必要的。