昨天被人问了一个问题:为什么我用Jmeter先创建一个登录请求,然后创建一个操作(比如计算账单)请求,运行之后结果树中却是status_code=401(即登录失败),我明明登录了啊....

emmm.....,这貌似是我回答过几次的问题,而且好像新人都容易犯这个错,我觉得我有必要写点什么。

  首先我们来了解一下这个“登录”。一个网站呢,我们一般先登录,然后登录成功进入网站执行一些操作。这看上去和上面的流程一模一样,没毛病。这是UI层的,我们在深入点,到接口层。

为什么你不登录的时候直接访问计算账单的url,系统会自动帮你跳转到登录界面呢?因为它通过一些机制判断了你不是“登录中”的状态。

而这机制中,简单的来说就是用一个值的合法性来判定,即Cookie(假设这个系统是用的cookie校验机制,当然还有什么token之类的啦,具体看系统)。

而我们使用浏览器登录-->计算账单-->付款...等一系列流程之所以这么顺畅,是因为浏览器在之后发送请求的时候自动带上了你登录所产生的Cookie(浏览器这种机制为后来的Xss和Csrf攻击提供了好环境)。

登录过程中客户端(浏览器)和服务器的交互,简单点说大概是这样的:(其实之前应当还有两步:1、用户在客户端(浏览器)上进行访问;2、服务器收到请求返回一个状态码401,告知客户端需要登录。这样才是一个比较健全的登录过程)

1、用户在浏览器中输入账号和密码,发起登录请求(requests);

2、服务器端收到请求,校验账号和密码的正确性。如果正确,返回一个“登录成功”的响应(response)给用户,这个response中会有一个字段Cookie;

3、然后用户之后发起的每个request中都会带上cookie这个字段;

4、服务器之后会通过这个cookie来识别这个用户,进而判断用户是否合法;(Session—Cookie)

  以上,写的比较简单吧,知道这个意思就行。若想了解关于“登录”过程中的交互具体细节,百度一下就OK了。

  看完了上面的这个过程,这下应该知道为什么提示status_code=401了。因为你只是请求了登录接口,然后就继续执行下面的计算账单了,计算账单这个请求的cookie(令牌)呢?没有,那么不好意思,服务器就不会认你,直接拒绝。

常见的解决方法有两种:

方法1:在登录请求后面加个后置处理器-->正则提取表达器,把登录后response中的cookie提取出来,然后当做一个参数塞进计算账单的Sampler中。

方法2:通过抓包等方式获取登录后的cookie,然后在线程组下面加个配置元件-->HTTP Cookie管理器,把Cookie写进去,这样这个线程组中的所有Sampler执行的时候都会带上这里面的参数。(注意cookie的有效期)

  具体实现细节就不说了,都是Jmeter基础中的基础,百度一下【Jmeter 正则提取】【Jmeter Cookie管理器】就行。

____雪中悍刀行

Jmeter新手频犯错误之一(登录)的更多相关文章

  1. Python 新手常犯错误

    Python 新手常犯错误(第二部分) 转发自:http://blog.jobbole.com/43826/ 作用域 在这篇文章里,我们来关注作用域在Python被误用的地方.通常,当我们定义了一个全 ...

  2. Python 新手常犯错误(第二部分)

    转发自:http://blog.jobbole.com/43826/ 在之前几个月里,我教一些不了解Python的孩子来慢慢熟悉这门语言.渐渐地,我发现了一些几乎所有Python初学者都会犯的错误,所 ...

  3. Python 新手常犯错误(第一部分)

    转载自:http://blog.jobbole.com/42706/ 在之前几个月里,我教一些不了解Python的孩子来慢慢熟悉这门语言.渐渐地,我发现了一些几乎所有Python初学者都会犯的错误,所 ...

  4. OpenERP新手易犯错误之res.model

    接触OpenERP的人都感慨资料之少,尤其是XML中,出点错是相当郁闷的.尤其是新手.什么都别说了,有图有真相. 视图中关联模型name="model" ,而动作中name=&qu ...

  5. Python 新手常犯错误(第一部分)转载

    觉得这篇文章针对python的默认参数写的不错,翻译的也不错,故转载下. 原文链接: Amir Rachum   翻译: 伯乐在线- 伯乐在线读者译文链接: http://blog.jobbole.c ...

  6. 使用DX绘制3D物体时新手常犯错误,看不见物体时可以一一排查

    1.镜头不对: 物体不在镜头范围内,检查视图矩阵,世界矩阵,投影矩阵. 2.颜色全黑: 打开光照情况下,MATERIAL全为0, 或,在没有打开光照情况下,颜色值为0,造成全黑.检查当前Materia ...

  7. C#新手常犯的错误

    虽然这篇post的标题是新手常犯的错误,实际上很多有经验的程序员也经常犯这些错误,我整理了一下,就当是笔记.1.遍历List的错误,比如如下代码: List<String> strList ...

  8. LabVIEW新手5大错误

    虽然NI LabVIEW软件长期以来一直帮助工程师和科学家们快速开发功能测量和控制应用,但不是所有的新用户都会遵循LabVIEW编程的最佳方法. LabVIEW图形化编程比较独特,因为只需看一眼用户的 ...

  9. java代码书写易犯错误

    java代码书写易犯错误: 常见报错: 控制台报错: 找不到或无法加载主类 HelloWorld 原因: java.lang.NoClassDefFoundError: cn/itcast/day01 ...

随机推荐

  1. 关于YII中layout中的布局和view中数据的关系

    1. view中解释php脚本后显示出的内容会在layout中以<?php echo $content?>输出. 2. view是对应的controller的实例,所以可以通过$this- ...

  2. ifconfig命令无法找到,提示bash: ifconfig: command not found

    问题就是题目那样,具体解决方法截图如下: 分析问题 1.whereis ifconfig 看一下这个命令在哪个目录下 2.echo $PATH 看一下该目录是否在路经下,注意lunux下是完全区分大小 ...

  3. 移动端点击输入框,弹出键盘,底部被顶起问题(vue)

    这个问题相信做移动端开发的童鞋会有深刻体会,以前用jq开发时就很头疼这个问题,每次底部footer部分需要用position:fixed,如果页面内容不是很长,没有超出屏幕范围,那就还好,没有问题:一 ...

  4. 编译器错误消息: CS0016: 未能写入输出文件"c:\Windows\Microsoft.NET\Framework

    解决办法: 原因是由于系统目录下的Temp目录无相应的权限所致,具体操作如下: 来到C:/Windows目录,修改temp文件夹的属性. 在安全页设置IIS-IUSRS的权限,赋予修改.读取.写入等权 ...

  5. 动态修改JDBC数据源配置

    因项目需要能动态修改数据源的配置,及修改后不用重启整个应用.使用的数据源是apache的BasicDataSource,网上千篇一律的是如下实现: BasicDataSource bds=getDat ...

  6. Leetcode题解之Container With Most Water

    1.题目描述 2.题目分析 首先,这个题可以使用暴力解法,时间复杂度是O(n^2),这个显然是最容易的做法,但是效率不够高,题目提供了一种解法,使用两个指针,一个从头向尾部,另外一个从尾部向头部,每一 ...

  7. springCloud微服务入门

    目录 前言 Eureka 注册中心server 新建 配置 服务提供者service 新建 配置 服务消费者controller 新建 配置 使用 Feign负载均衡 前言 springCloud是一 ...

  8. Oracle EBS 导入日记账报错

    EM29/EM01 ED01

  9. java:通过Calendar类正确计算两日期之间的间隔

    在开发Android应用时偶然需要用到一个提示用户已用天数的功能,从实现上来看无非就是持久化存入用户第一次使用应用的时间firstTime(通过SharedPreferences .xml.sqlit ...

  10. 关于Entity Framework关系配置,提示列名XXXX_Id无效的问题

    问题描述 : 数据库中有两张表,如下: Member(会员)表有外键RoleId,对应的是Role(角色)表的主键Id,业务逻辑是Member表的RoleId必须与Role表的Id对应(但在设计数据表 ...