cookie登录_Jmeter自动化先登录再获取cookie

相信做过自动化测试的朋友经常会遇到这样的场景:我想调系统的某个接口进行操作业务,但是需要先登录系统。本文主要是通过Jmeter实现该操作,先登录系统,然后通过获取登录后的Cookie,将Cookie带到后面的业务操作中。

一. 相关知识点:

  1. 使用响应断言;

  2. 使用正则表达式提取器自动获取想要的文本;

  3. 使用BeanShell断言将第一个线程组的变量设置为全局变量,并传递到其它线程组;

  4. 使用HTTP Cookie 管理器;

  5. 使用HTTP请求;

二. 思路

  1. 创建2个线程组,一个是setUp Thread Group,一个就是正常的Thread Group;

  2. 第一个线程组里面新建http请求,用于做登录接口;

  3. 在登录接口中分别创建响应断言、正则表达式提取器、BeanShell断言;

  4. 第二个线程组里面添加“HTTP Cookie 管理器”,并将第一个线程组中获取到的Cookie值使用变量方式放进去;

  5. 再使用HTTP请求进行业务操作;

三. 实际操作步骤

  1. 创建第一个线程组,setUp Thread Group线程组,并重新命名为自己觉得更有意义的名字(我这里命名为:预置条件-登录获取token)。
81302057b564ce740ecaca566dfb9382.png
img
  1. 在第一个线程组下面新建一个HTTP请求,用于调登录接口
fe3fefa75767f5dadb130409387336ee.png
img

协议:一般是http或者https

服务器名称或IP:登录接口的IP地址

端口号:登录接口的端口号

方法:一般是post或者get,当然还有其它很多,可以根据实际情况进行选择

路径:需要调用的接口,这里是登录接口,/spacex/login

  1. 新增一个查看结果树,新增完后不需要做任何操作,只等执行后查看结果就好,如下是执行后的结果
52c49a14f44395a84c89cb75b1ab277d.png
img

从上图可以看出来Cookie是存放在信息头中,且是在子接口中获取的

  1. 在登录接口下面新增一个正则表达式提取器,用于获取前面登录接口登录成功后的Cookie值
ec190eefd72ca6d47dba960725bc4c61.png
img
  1. Apply to:
  • Main sample and sub-samples:作用于主节点的取样器及对应子节点的取样器,从上面那张图中可以看出是子接口
  • Main sample only:仅作用于主节点的取样器
  • Sub-samples only:仅作用于子节点的取样器,子接口也可以选择这个
  • JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称),从指定变量值中提取需要的值。
  1. 要检查的响应字段(Field to check):
  • 主体:响应报文的主体,最常用
  • Body(unescaped):主体,是替换了所有的html转义符的响应主体内容,注意html转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用
  • Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能
  • Response Headers:响应信息头(如果你使用的是中文版的Jmeter,会看到这一项是信息头,这是中文翻译问题,应以英文为准)
  • Request Headers:请求信息头
  • URL:请求url
  • Response Code:响应状态码,比如200、404等
  • Response Message:响应信息
  1. 引用名称(Reference Name):

Jmeter变量的名称,存储提取的结果;即下个请求需要引用的值、字段、变量名,后文中引用方法是$,跨线程组不可直接使用

  1. 正则表达式(Regular Expression):

使用正则表达式解析响应结果,()括号表示提取字符串中的部分值,前后是提取的边界内容,类似于loadrunner中的左边界和右边界。

  1. 模板(Template):

正则表达式的提取模式。

如果正则表达式有多个提取结果,则结果是数组形式,模板,等等,表示把解析到的第几个值赋给变量;从1开始匹配,以此类推。

若只有一个结果,则只能是;

  1. 匹配数字(Match No):

正则表达式匹配数据的结果可以看做一个数组,表示如何取值:0代表随机取值,正数n则表示取第n个值(比如1代表取第一个值),负数则表示提取所有符合条件的值。

  1. 缺省值:

匹配失败时候的默认值;通常用于后续的逻辑判断,一般通常为特定含义的英文大写组合,比如:ERROR等。

  1. 新增一个“BeanShell断言”,用于将上面正则表达式中的变量变成全局变量
fa4e1dd50decd15de2d46af9dae507c9.png
img

新增如下内容:

${__setProperty(JSESSIONID,${JSESSIONID})}

其中第一个JSESSIONID是新定义的全局变量,后面跨线程组使用时是使用的这个变量名,第二个JSESSIONID是之前正则表达式中的变量(引用名称)

  1. 创建第二个线程组,用于存放业务接口调用

  2. 在第二个线程组中新增“HTTP Cookie 管理器”

eabfbbe89121526bb66821062f814f25.png
img

值:${__P(JSESSIONID)}

JSESSIONID是前面“BeanShell断言”中定义的全局变量名称,这样就可以获取到登录的Cookie值了。?

  1. 下面就可以开始调用业务接口了,比如这里调用一个查询接口,新增HTTP 请求(该接口必须登录才能调用,因为我们前面登录并将Cookie保存在Cookie管理器中了,所以我们这里就可以直接调用业务接口了)
f40919034e13d803d7693a7eb27adc4d.png
img
  1. 新增响应断言,用于检查调用结果是否正确,相当于新增检查点
047e939bdb5365b6aeac48582b75e4ed.png
img

这样这条用例就结束了,总体包含用户登录、通过正则表达式获取Cookie、保存Cookie到Cookie管理器、调用业务接口、检查业务接口是否正确。

四. 补充正则表达式相关知识

1.常用的匹配操作符

f79b98eabad76d5f494d0f694f59b014.png
img

2. 贪婪和非贪婪

提到正则表达式,必须要说一下匹配的两种模式:贪婪和非贪婪。

1、贪婪与非贪婪模式是两种不同的表达式匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配,即匹配第一个。

2、下面举个例子,假设有如下响应结果(只截取了其中一部分):

"code":"0","msg":"请求成功","bizSeqNo":"1804242UD01154300109392900987311" ,"result":{"bizSeqNo":"1804242UD01154300109423800987316","transactionTime":"20180424094239"

3、现在从中提取bizSeqNo的值:

"bizSeqNo":"(.*)":贪婪模式,提取结果是:1804242UD01154300109392900987311" ,"result":{"bizSeqNo":"1804242UD01154300109423800987316","transactionTime":"20180424094239

"bizSeqNo":"(.*?)":非贪婪模式,提取结果是:1804242UD01154300109392900987311

大家可以自行体会一下其中的差别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值