Jmeter实现Basic Auth方式登录

发表于:2019-5-22 13:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:温一壶清酒    来源:博客园

#
Jmeter
  背景
  在实际测试日常中,产品有两种登录方式,一种是普通登录方式,另一种则是Basic Auth方式登录。两种登录对应着产品中不同的操作,对权限进行了一个划分。
  Postman登录
  使用Postman登录,如下方式入参,即可正常登录成功
  Jmeter登录
  同样的一个登录操作,换到jmeter中实现时,倒遇到了不小的麻烦,琢磨了些时间,终究是解决了,分享出来与大家共享。
  1.遇到的问题
  切换到jmeter进行登录时,接口返回401,并报Unauthorized。401 是一个什么概念呢:“未经授权”。有两种可能,一是账户密码不对,二是请求格式或者 JMeter 相关设置存在问题。账号密码肯定是对的,那就是存在第二种问题了。
  遇到问题了,显示自己琢磨了一番,还是没有解决,所以就来网络上寻求帮助了。寻求一番下来,收获还的确不小。
  2.解决办法1
  解决思路:进行基本授权,需要添加值为 Basic base64(用户名:密码)的 Authorization 头信息。
  第一步: 添加 BeanShell PreProcessor
  (前置处理器 > BeanShell PreProcessor),如下所示,说明:BeanShell PreProcessor 或者 JSR223 PreProcessor 任一均可
  第二步:将以下脚本添加到 BeanShell PreProcessor
  
   import org.apache.commons.codec.binary.Base64;
  byte[] encodedUsernamePassword = Base64.encodeBase64("username:password".getBytes());
  vars.put("base64HeaderValue",new String(encodedUsernamePassword));
   如下图所示:
  第三步:添加 HTTP 信息头管理器
  路径:线程组>配置文件>HTTP 信息头管理器
  第四步:填写正确的 Authorization 信息
  header name 填: Authorization
  header value 填:Basic ${base64HeaderValue} (第二步创建的变量)
  如下图所示:
  第五步:添加 HTTP 请求
  输入获取token的接口,如下:
  第六步:查看结果
  当创建 http 请求时,Authorization 将以 base64 编码的字符串传递给服务器,成功发送请求后,在 Request Headers 中就可以看到 Authorization 的信息。
  自 JMeter 3.2 以后,就不需要上述的方法了,有了更优化的解决方案,那就是解决办法2。
  3.解决办法2
  第一步: 添加 HTTP 授权管理器
  (配置元件 > HTTP 授权管理器)
  说明:它提供了自动将相关 Authorization 信息添加到 HTTP 请求 header 的功能。
  第二步:添加授权信息
  基本 URL:http://XXXXXXXX
  用户名:user
  密码:passwd
  将 域 和 Realm 保留为空
  Mechanism:BASIC_DIGEST
  如下所示:
  第三步:添加 HTTP 请求
  输入获取token的接口,如下:
  第四步:查看结果
  Jmeter实现Basic Auth方式登录,使用上述两个办法可以完美解决,希望对有疑惑的人有所帮助。个人还是喜欢第二种方式,第二种相对简单一些。

      上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号