方式一、使用__setProperty设置全局变量;
1.jmeter中创建一个登录请求,然后执行,察看结果树——>Response data中的Response Body 或 Response headers查看返回cookie的相关信息;
2.在登录的http请求下添加后置处理器--正则表达式提取器,提取headers中的cookie信息;
3.在登录http请求下创建一个后置处理器--BeanShell PostProcessor,把提取到的cookie值改成全部变量;
格式:${__setProperty(转换成全局变量后的引用名,${正则表达式定义的变量名},)};
4.再添加一个cookie管理器,这个cookie管理器换成全局变量后的cookie引用名;
这个cookie管理器直接在TestPlan下,不属于任何一个线程组内;
名称:cookie中的key;
值:引用BeanShell PostProcessor中定义的全局变量名;如,${__setProperty(AJSESSIONID,${JSESSIONID},)};
格式:${__P(全局变量名,)};如,${__P(AJSESSIONID,)}
域:要测试接口的域名或ip;
路径:填 / 接可以;
5.添加线程组,该线程组内不添加登录请求,可以操作需要登录后才能操作的请求;
参考:https://www.jianshu.com/p/83e677efe8c7
方式二、使用BeanShell PostProcessor保存cookie相关的数据;
2.1 jmeter添加登录请求,并添加提取器,提取响应中cookie相关的信息;
2.2 添加BeanShellPostProcessor,保存提取的JSESSIONID;
public static void execParam() { String getdata = vars.get("JSESSIONID"); String filename = "C:/Users/Administrator/Desktop/test0713/outjs.txt"; FileWriter writer; try { writer = new FileWriter(filename,true); writer.write(getdata); writer.write(" "); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); } } execParam();
2.3 添加一个线程组,添加CSV Data Set Config读取JSESSIONID参数化的信息;添加HTTP cookie管理器,填写cookie相关的信息;添加需要登录后操作的请求;
2.4 测试计划中设置独立运行每个线程组;
2.5 执行测试,查看结果。
成功。
方式三 ?也可以将登录和其它请求放在一个线程组下,不过对于压力测试而言,这样登录的请求次数过多;现实生活中,一次登录,可能会做n件事。