昨天被人问了一个问题:为什么我用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. div实现返回符,倒三角,椭圆+小知识收集

    收集: 1,返回符(伪类元素): .back:before {content: "";width: .3rem;height: .3rem;border-left: .04rem ...

  2. Python 底层原理知识

    1.Python是如何进行内存管理的? 答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制 一.对象的引用计数机制 Python内部使用引用计数,来保持追踪内存中的对象,所有对象都 ...

  3. android:项目迁移error:Please change caller according to com.intellij.....

    迁移到Android Studio中的项目,在运行时有时会在Event Log中报这种错: Please change caller according to com.intellij.openapi ...

  4. Object、String、数组的 toString() 方法和 equals() 方法及java.util.Arrays

    public class Test { public static void main(String[] args) { int[] a = {1, 2, 4, 6}; int[] b = a; in ...

  5. kafka介绍 - 官网

    介绍 Kafka是一个分布式的.分区的.冗余的日志提交服务.它使用了独特的设计,提供了所有消息传递系统所具有的功能. 我们先来看下几个消息传递系统的术语: Kafka维护消息类别的东西是主题(topi ...

  6. 【Java】解析xml

    xml: <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> ...

  7. ORACLE数据泵还原(IMPDP命令)

    Oracle数据库还原IMPDP命令是相对于EXPDP命令的,方向是反向的.即对于数据库备份进行还原操作.一.知晓IMPDP命令 C:\>impdp -help Import: Release ...

  8. 使用 Azure CLI 管理 Azure 虚拟网络和 Linux 虚拟机

    Azure 虚拟机使用 Azure 网络进行内部和外部网络通信. 本教程将指导读者部署两个虚拟机,并为这些 VM 配置 Azure 网络. 本教程中的示例假设 VM 将要托管包含数据库后端的 Web ...

  9. Jmeter入门--断言(检查点)

    断言是在请求的返回层面增加一层判断机制.因为请求成功,并不代表结果一定正确,因为此需要检查机制提高测试准确性. 1.响应断言 模式匹配规则: 包括:返回结果包括你指定的内容,支持正则匹配 例如: 响应 ...

  10. flask的orm操作

    django是有orm操作的  可想而知 那么flask也是有orm操作的,其实flask的orm操作的使用和djnago的是差不多的 django的orm操作进行条件筛选的时候后面跟着的是objec ...