如何使用JMeter对带Sitefinity-Azure AD B2C OAuth2认证的登录做负载测试
Sitefinity + Azure AD B2C 登录负载测试可行方案
注意:不要尝试本地手动生成id token,Sitefinity会校验Azure AD B2C签发令牌的签名、受众、有效期等核心字段,自行生成的令牌无法通过校验,该思路没有落地可行性。
以下是可长期稳定使用的落地方案,按推荐优先级排序:
方案1:调用Azure AD B2C ROPC流直接获取合法令牌
ROPC(资源所有者密码凭证)是OAuth2协议专门为自动化、测试场景提供的无前端交互认证流,不需要模拟前端跳转、处理nonce/state等动态参数,直接调用接口即可拿到B2C官方签发的合法令牌:
- 首先在Azure AD B2C后台的测试应用注册配置中,开启ROPC流授权支持,同时确认使用的用户流/自定义策略开放了ROPC调用权限
- 在JMeter中新增独立HTTP请求,调用B2C的ROPC接口:
请求地址:https://<你的B2C租户名>.b2clogin.com/<你的B2C租户名>.onmicrosoft.com/<你的用户流名称>/oauth2/v2.0/token
请求方式:POST
请求体固定参数:grant_type=password、client_id=<测试应用ID>、client_secret=<测试应用密钥>、username=<测试用户名>、password=<测试用户密码>、scope=openid - 从响应结果中直接提取
id_token、access_token字段,后续按照Sitefinity的认证流程传入对应位置,即可完成登录拿到有效认证Cookie,全流程无前端依赖,性能远高于Selenium方案。
方案2:独立程序获取令牌 + JMeter调用
如果你需要封装认证逻辑避免JMeter配置过于零散,你提到的调用本地程序拿令牌的方案可以落地,不需要自己生成令牌,实现逻辑如下:
- 使用C#配合Microsoft.Identity.Client官方SDK开发控制台程序,逻辑为调用上述ROPC流接口获取合法令牌,将令牌字符串直接输出到控制台
- 在JMeter中使用OS Process Sampler调用编译好的exe程序,将控制台输出的令牌内容提取为JMeter变量,后续业务请求直接复用即可
- 该方案资源占用远低于Selenium方案,不会因为启动浏览器实例占用大量测试机资源,支持更高并发的负载测试。
方案3:测试环境专用登录接口
如果你的测试目标是登录后的业务接口性能,不需要验证登录流程本身的性能,可以和后端开发协商在测试环境开放专用测试登录接口:
- 接口逻辑为传入测试用户名,直接返回该用户登录后的有效认证Cookie和令牌
- 该接口仅在测试环境开放,生产环境关闭访问权限即可,是实现成本最低的方案。
你之前使用的两个方案确实不适合长期负载测试使用:Selenium集成方案仅适合小并发功能验证,高并发场景下浏览器实例会占用大量CPU内存,无法支撑大流量压测;硬编码Cookie的有效期通常只有几小时,需要频繁更新,维护成本极高。
内容的提问来源于stack exchange,提问作者Arjun Dev
相关产品推荐
相关产品推荐

