事情的起因是最近收到的一批测试需求,要测试公司HR系统的接口性能。这个是需要测试的接口列表:

所有的接口请求,都基于登录验证成功,否则将无法获得正确的应答。

首先想到的是在浏览器上捕捉请求。打开Chrome浏览器,调出开发者工具栏,在地址栏输入登录模块的地址,访问登录页面:

输入账号和密码,录制登录过程;然后定位到开发工具的Network页面,找到登录的事务。如下图:

注意右下方的Form Data,这是登录POST方法提交的三个参数,我们需要捕捉的就是_csrf的那个动态令牌。

通过在网上的一番查找和本地实验,成功的完成脚本的调试。

以下是整个过程:

首先启动Jmeter UI,新建一个线程组;然后添加一个HTTP请求,取名UserLogin – Open,意在获得首次打开登录页面的CSRF Token。

方法使用GET,而实际的登录提交将为POST;这里并不是实际登录,不用在意。

这里一定要勾选【跟随重定向】,包括之后创建的HTTP请求,都勾选此选项。

请求参数部分,填写用户名和密码。由于现在还不能获取CSRF Token,此时登录并不会成功,但目的不在于登录,而在获得CSRF Token的内容。

完成后,创建一个【后置处理器 - 正则表达式提取器】,这里抽取登录页面响应报文中的CSRF Token。内容如下图:

Apply to选项:选中仅应用于主Sample。

这里需要注意的是“要检查的响应字段”,在网上查到的指导都是“消息头”,但在本人的测试中,从消息头中未能获取CSRF Token的信息;因此要设置在“主体”。

引用名称:可以随便写;

正则表达式:也就是希望提取的内容,格式需要从应答报文中去找。这里可以参考LoadRunner的关联的写法(左边际、右边际、正则表达式匹配的规则)。

实在没有头绪的朋友,可以从【察看结果树】的应答报文中找到,如下图:

模版:$1$,表示取第一次的值;也只有一个;

缺省值:随意,默认为空。

接下来,再创建一个HTTP请求,这次是实现真正的登录请求。

创建第二个HTTP请求,取名UserLogin – POST;因为登录的方法为POST,和前一个进行区分:

这次需要把登录提交的三个参数都填上,CSRF Token需要引用上一步从【正则表达式提取器中获取】的,写法是: ${token} 。

完成后,理论上我们就可以运行登录的脚本了;但是别急,还需要添加一个HTTP Cookie管理器。

我们先看看没有HTTP Cookie管理器的情况:

两处CSRF Token内容不一致,说明被当成两次不相关的访问。

再看看第二个HTTP请求提交的信息,此处的CSRF Token的内容已经和第一个应答报文一样了,说明我们前面的努力是正确的;可是为何还是没有登陆成功呢?

稍微想一想就能理解了,服务器端判断两次请求是否来自同一个客户端,不止一个CSRF Token,还有别的,比如会话ID。

我们翻回浏览器的开发者工具的页面看看:

Cookie中显然有三个参数,可以预料每次提交的请求,这三个参数都是动态取值;

而要保持会话过程中始终一致,我们需要在JMeter脚本里添加HTTP Cookie管理器:

添加以后也不需要设置什么项目,保持最初状态就够用了。

补充一下,为了确保HTTP Cookie管理器生效,需要修改jmeter\bin目录下的jmeter.properties。

找到选项CookieManager.save.cookies,将值修改为true,并删除句首的 # 号,让配置生效。

完成修改后,需要重启JMeter。

重启之后,我们再执行一次看看结果:

对比前一次的执行结果,UserLogin – POST的响应数据发生了变化,显示的标题是【我的工作台】,这是登录成功的重要标志;

而且两次HTTP请求获得的CSRF Token内容相同,登录操作完美成功。

后面就是添加其他业务API 的请求了,由于都是GET方式,很容易完成脚本的编写。

完成后,添加聚合报告和监控的Backend Listener就齐活了。

比如,我们查看一下这个用户的考勤记录:

执行一遍看看响应报文:

和期望的一样,登录之后,再访问其他功能的API 也能获得正确的应答。

脚本编写工作基本完成了。

利用Jmeter测试CSRF令牌验证的Web API相关推荐

  1. 关于蜕变测试文献REST ful 的Web API的翻译与思考

    关于蜕变测试REST ful 的Web API文献的翻译与思考 今天读了一篇文献 Metamorphic Testing of RESTful Web APIs Sergio Segura , Jos ...

  2. Web API应用架构设计分析(2)

    在上篇随笔<Web API应用架构设计分析(1)>,我对Web API的各种应用架构进行了概括性的分析和设计,Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端 ...

  3. Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解...

    最近一直在整合WebAPI.Winform界面.手机短信.微信公众号.企业号等功能,希望把它构建成一个大的应用平台,把我所有的产品线完美连接起来,同时也在探索.攻克更多的技术问题,并抽空写写博客,把相 ...

  4. 使用ASP.NET Web API构建Restful API

    目录 介绍 这种方法有什么好处? Restful约定 构建API 测试API 一点困惑: 最佳实践: 数据传输对象(DTO) Automapper IHttpActionResult 使用Web AP ...

  5. 在 .NET 中使用 Web API 连接到 MongoDB

    在 .NET 中使用 Web API 连接到 MongoDB MongoDB是一种非常流行的NoSQL数据库,其用户基数以及功能列表同时都在迅猛增长中. MongoDB可从这里下载安装.如果你并不想为 ...

  6. 1.1.2 以Web Host方式寄宿Web API

       采用Web Host方式寄宿Web API的宿主程序WebHost是一个空的ASP.NET应用,除了让它引用定义ContactsController项目的WebApi 我们还需要引用几个必须的程 ...

  7. 【转】Web API项目中使用Area对业务进行分类管理

    在之前开发的很多Web API项目中,为了方便以及快速开发,往往把整个Web API的控制器放在基目录的Controllers目录中,但随着业务越来越复杂,这样Controllers目录中的文件就增加 ...

  8. Asp.Net中WebForm与MVC,Web API模式对比

    webform,web mvc和web api都是asp.net官方的三套框架,想对比下三者的关系,查了下资料,web api跟web mvc基本同属一脉,只是mvc多了一个视图渲染,网上有些博客介绍 ...

  9. Web API与MVC控制器的区别

    Web API属于ASP.NET核心平台的一部分,它利用MVC框架的底层功能方便我们快速的开发部署WEB服务. 我们可以在常规MVC应用通过添加API控制器来创建web api服务, 普通MVC应用程 ...

最新文章

  1. vc6.0打开工程出现程序崩了的原因
  2. 平战结合供应保障体系-国情讲坛·周荣江:谋定突发公共事件
  3. 【VS开发】C++线程安全
  4. plotly使用mapbox实现地图可视化
  5. 1.4 第一个Python程序
  6. 再有人问你volatile是什么,把这篇文章也发给他(深入分析)
  7. 关于关闭office 2010中的OSPPSVC服务的方法
  8. codeforces 339A-C语言解题报告
  9. 一道腾讯的专业面试题
  10. React个人入门总结《五》
  11. Activity的Launch mode详解 singleTask正解
  12. android自动登录_游戏社区App (三):客户端与服务端的加密处理 和 登录
  13. Python电子书教程汇总
  14. php 公众号群发消息,PHP 微信公众号 群发文本消息
  15. 雷电模拟器 手机模拟器 安装 连接
  16. ai与虚拟现实_AI医疗的神话与现实
  17. 疫情下,数字化转型成功的“光明”
  18. 打开项目时,出现“确保已安装项目类型(.wdproj)的应用程序 ”的解决办法
  19. Hibernate报错 Cannot add foreign key constraint
  20. 【报告分享】2021中国消费者洞察-埃森哲(附下载)

热门文章

  1. python 数据库查询序列化_python-将sqlalchemy类序列化为json
  2. mysql qps计算方法_mysql计算 TPS,QPS 的方式
  3. 向fedora虚拟机中复制文件_Unraid虚拟机中Dockers下搭建WebDAV共享文件服务器
  4. java 虚拟机 参数_Java虚拟机的参数
  5. python os模块详细_Python文件系统功能--os模块详解
  6. C++ :sqlite3使用:
  7. 【杂谈】购言有三签名纪念版书籍,送1~3副有三AI学习扑克牌
  8. 【AI-1000问】为什么OpenCV读取的图像格式是BGR?
  9. 中国食品检测行业市场发展策略及投资战略建议报告2022-2028年版
  10. Key usage extensions and extended key usage