Jmeter通过cookie模拟登陆

基础知识:
BeanShell PostProcessor 执行脚本
vars变量是存储当前线程的数据,注意这个是Jmeter提供好的对象,仅当前线程内有效 .
vars存储vars.put(“COOKIES_TEST”, str.substring(0, str.length() - 1));
vars取值String strData=vars.get(“ckid”);
${__setProperty(newtest,${ckid})};是用来设置全局变量的方式,这个方法是可以跨线程有效。
取值方式是 ${__property(newtest,)}。
为了存储cookie需要在jmeter配置文件中设置存储cookie为允许
CookieManager.save.cookies=true

方式1.通过全局变量模拟登陆。

第一步:需要从模拟登陆的接口中获取相应的身份验证信息。
先增加一个正则表达式提取器,用于模拟登陆的接口请求成功后从接口信息中提取身份信息。

Jmeter通过cookie模拟登陆
Jmeter通过cookie模拟登陆

以上步骤就能将信息添加到了Jmeter的变量中。

第二步:添加线程内的ckid变量为全局变量
增加后置脚本
Jmeter通过cookie模拟登陆
内容为
${__setProperty(newtest,${ckid})};这时候全局变量中就有了一个名为newtest的变量。其他线程就可以从中取出之前存储的jsessionId了。${ckid}为正则表达式提取出的数据。

第三步:正式请求要测试的接口,通过用户身份信息验证。
可以单独增加一个线程也可以在当前线程中继续添加。
前提是要增加一个cookie管理器取出全局的变量当作用户登陆的信息。
Jmeter通过cookie模拟登陆
之后就正常设置接口的请求信息即可,这时已经能模拟登陆了。

方式2.通过jmeter内置的cookie存储模拟登陆。

需要找到对应的jmeter.properties配置文件增加CookieManager.save.cookies=true配置。让jmeter能自动存储cookie数据。jmeter存储cookie的形式是cookie_加上真正的cookie名称,这是默认的前缀,也可以通过jmeter.properties文件修改。

此方法相对简单,但也需要分析实际的cookie存储形式。比如模拟登陆的cookie信息是JSESSIONID=1234435.
这时候存储的就是COOKIE_JSESSIONID,Jmeter取出后就是1234435.
这种操作方法的话仅在当前线程有效,所以需要把模拟登陆和实际接口放在一个线程中。实际操作截图
Jmeter通过cookie模拟登陆