我正在尝试开发一个 JMeter 脚本,用于使用 Azure (Oauth2) 身份验证对应用程序进行性能测试。现在我被登录过程的自动化困住了。
这些是我在脚本中的相关要求:
从这个请求中,我捕获了以下参数以供稍后使用:
此请求有一个正确的响应,一个包含有关用户和要打开的会话的信息的 JSON。
这个请求应该返回这样的响应:
<!-- Copyright (C) Microsoft Corporation. All rights reserved. -->
<!DOCTYPE html>
<html dir="ltr" class="" lang="es">
<head>
<title>**Sign into the account**</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=yes">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">
<link rel="preconnect" href="https://aadcdn.msftauth.net" crossorigin>
<meta http-equiv="x-dns-prefetch-control" content="on">
<link rel="dns-prefetch" href="//aadcdn.msftauth.net">
<link rel="dns-prefetch" href="//aadcdn.msauth.net">
<meta name="PageID" content="**ConvergedTFA**" />
...
并且此请求还应返回脚本使用的持久性 cookie,以保持会话打开。
然而,它正在返回:
<!-- Copyright (C) Microsoft Corporation. All rights reserved. -->
<!DOCTYPE html>
<html dir="ltr" class="" lang="es">
<head>
<title>**Redirecting**</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=yes">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">
<meta name="PageID" content="**BssoInterrupt**" />
...
并且没有返回任何 cookie。所以脚本在下一步失败,因为没有有效地执行登录。 我也在使用 Cookie 管理器。实际上,其余的 cookie 正在按预期生成,直到最后一步。
你能告诉我我可能做错了什么吗? 提前致谢。
如果您绝对确定您的最后一个请求是正确的并且您正确关联了每个动态值,因为最后一个请求是重定向,那么使用 Location 标头中的 URL 重复它可能就足够了。
或者很可能你的最后一个请求格式不正确,将它与真实浏览器发送的请求进行交叉检查,并确保它看起来完全一样(除了需要关联的动态值)。最好使用像 Fiddler 或 Wireshark 这样的第 3 方嗅探器工具,这样您就可以并排比较请求。
最可疑的部分是
NewUser=1
,如果您使用现有用户登录,我希望它是0
.
我也不认为您需要在上次请求时发送
ctx
和 canary
参数的值(但是您的应用程序可能配置不同)。
您可以查看如何使用 JMeter 文章在 OAuth 安全应用程序上运行性能测试,特别是 atlassian-microsoft-oauth.jmx 示例测试计划。