热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Jmeter接口测试实战-Cookies

场景:接口测试时常都需要登录,请求方式(post),登录常用的方法有通过获取token,获取session,获取cookie,等等.这几种都有一个共同的特点,有效期(exp

 

 

场景:

接口测试时常都需要登录,请求方式(post), 登录常用的方法有通过获取token, 获取session, 获取COOKIE, 等等. 这几种都有一个共同的特点, 有效期(expires).

 Session是建立连接后session有效, 断开连接session失效, token有效期是服务端控制, COOKIE是用户浏览访问时被创建的,由服务器发送给客户端使用, 有效期长短和服务器相关, 不同的web服务器默认值略有差异, 在一个临时会话周期内,COOKIE一般不会被持久化, 也就是关闭浏览器或者退出登录COOKIE失效.

如何获取token, 我们之前的推文(Jmeter接口测试-正则表达式)里已经介绍过, 今天来讲COOKIE, 使用COOKIE既然有有效期,那退出或者其他情况使COOKIE失效了, 在接口测试脚本中要一直去修改为最新的COOKIE, 不是很恼人的一件事情吗?  有没有办法一劳永逸呢, 答案是肯定的.

 

实战:

还是从实例入手, 首先我们找一个已经跑通的接口(原先COOKIE获取是在自定义变量里写死COOKIE值, 然后再传给COOKIE manager), 在结果树的请求->request Body中查找信息

 

从图中可以看出, COOKIE data有几个信息组成

  • username

  • SESSION

  • SERVERID

那这些信息去哪里获取呢?

使用chrome的开发者工具查看, 在application标签下很容易就能找到上述信息

 

 

 

有了以上这些信息,那接下来的事情就好办了, 两种方式添加

1. http COOKIE manager(推荐)

2. http 信息管理器

在COOKIE 管理中添加需要存储的COOKIE

 

然后把原先用自定义变量里的COOKIE值删除(写死的COOKIE值), 用这个方法去获取COOKIE给同域名下的其他API使用, 即可非常轻松的执行需要登录的API, 细心的同学会发现 COOKIE data里还有username和SESSION 怎么没用到, 我这个实例中这两个不用也可以正常执行, 如果有需要自行加上即可, 至此有趣的COOKIE可一劳永逸的使用, 不必再为COOKIE过期而烦恼了, 不知道你学会了没有, 在实际测试场景中,类似这样的问题时常困扰着我们, 如何巧妙的使用方法去解决(偷懒法则), 学会偷懒的技术工程师才是一个合格的工程师.

jmeter的http COOKIEs管理器使用(一)

作用:
1 发送请求,经常要校验COOKIEs信息
2 录制的时使用的COOKIE管理器,只能在指定的域下面使用,如果服务器地址切换,发现发送请求时,就会出现no COOKIEs
使用方法
1 使用badboy录制的脚本都带了COOKIE管理器
2 使用jmeter的代理录制脚本,提前设置好COOKIE管理器再进行录制
3 自己设置COOKIE管理器
前两种的COOKIE管理器都有域名的限制,有时需要自己进行修改

我一般使用代理录制脚本,自己添加COOKIE管理器的方式进行

步骤:

1 录制脚本

 


2 修改COOKIE管理器,如果没有域名切换的话,可以不用自己配置的
1)使用开发者工具,或者firefox的firebug插件获取COOKIE信息。建议使用firebug这个配置和jmeter几乎一样。据说可以直接导入到jmeter,但是我没有导入成功,就自己配置了。
下面是开发者工具所看到的COOKIE信息

并不是所有的都需要配置发送到服务器。我的只配置了sf_session就ok了
域就是服务器的ip

 


这样后面发送的所有请求都会自带上这个COOKIE信息。这里面的COOKIE可以通过正则表达式进行提起,设置成变量

 

---------------------

jmeter的http COOKIEs管理器使用(二)

COOKIE管理器,会默认把服务端返回的COOKIE数据记录下来
步骤:
1 先添加http COOKIE管理器,这时jmeter就会自动记录下服务端返回的COOKIE信息
由于数据是保存在COOKIE里面,没法通过正则表达式去提取

 


2 其实这个时候,jmeter发送请求,会默认把COOKIE信息带上,能解决大部分问题

 


3 但是我们这时又想用到COOKIE里面的某一个值的时候,就需要修改jmeter的设置了
在jmeter的安装bin路径下,
修改:jmeter.properties

#COOKIEManager behaviour - should COOKIEs be stored as #variables?
#Default is false
COOKIEManager.save.COOKIEs=true //这个把前面的#去掉,

  



4 调用COOKIE里面某一个值

${COOKIE_某一个值名称}
如上面的 sf_session就可以直接用${COOKIE_sf_session}调用。和自定义变量完全一样

  



注意点:必须是请求服务端以后,COOKIE管理器里面才会有数据,一般是登陆时服务端返回会带回COOKIE。之前COOKIE会一直为空
下面是我demo的截图

 

 

提取成功图片:
前置bs没有COOKIE值
后置的bs有了COOKIE值

 

---------------------

jmeter直接用COOKIE管理器保存登录后的COOKIE信息

最近遇到的问题是,登录需要验证码,验证码每次都变且无规律,所以录制登录接口就没办法录制了。于是就想着能不能直接在COOKIE管理器中保存我登录后的信息,其他接口直接调用这个参数呢?经过试验,有的系统可以,有的不可以,不可以的还没找到原因和解决办法,先写可以使用的步骤吧。

1、打开火狐浏览器,登录要保存COOKIE信息的网页并登录成功;

2、打开调试模式,切换到存储,打开COOKIE,然后右侧红框区域内的所有数据就是COOKIE信息;

 

 

 

3、把这个表里的所有数据的名称、域名、路径、值都一一写到COOKIE管理器里,如下图jmeter的这个位置

 

 

 

4、然后,在jmeter中,添加http请求,把COOKIE管理器中的这些参数,都当成参数传过去,假如COOKIE管理器中只有一个参数JSESSIONID,写接口时,就需要把JSESSIONID当成一个参数传过去,如下图

 

 

 

5、这样就可以不需要登录,直接调用登录的COOKIE信息了
---------------------

 个人自己操作实例:

 

1、谷歌浏览器打开调试,然后提交登录,获取session

 

 

 2、添加HTTP COOKIE管理器,把session添加进去:

 

 

3、添加响应断言

 

 

 

 

 4、执行,返回custname_0表示成功,custname_2表示失败

 

 

 新增客商有规则需要校验,导致提交重复信息会失败,只有第一次才会成功

 

注意:如果是在同一个线程组,根本不需要添加两个COOKIEs的参数值,只需要添加一个无参数值的空的http COOKIE管理器,去掉下图的两个SESSIONID变量值

 

 

下面是增加权限的截图:

 

 

 


推荐阅读
  • 应用场景B接口申请参数依赖于A接口返回的数据,心愿B接口发送申请的时候能获取A接口返回的数据作为申请参数。实现思路将A接口返回的数据通过后执行脚本赋值给一个全局变量或者环境变量。具体示例咱们一个接口B须要A接口返回的参数token作为本人的申请参数。常见的场景如:拜访一个须要登陆能力浏览的接口。1、准 ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 这篇文章主要介绍PHP如何使用在全部作用域中始终可用的内置变量,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • OWASP(安全防护、漏洞验证工具)开放式Web应用程序安全项目(OWASP,OpenWebApplicationSecurityProject)是一个组织 ... [详细]
  • Cookie和Session的联系Cookie是在客户端保持状态,Session是在服务器端保持状态。由于服务器端保持状态在客户端也需要保存一个标识,所以Session需要借助于 ... [详细]
author-avatar
张三三
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有