jmeter的简单使用以及跨域下Http Cookie管理器获取不到cookie的解决方法

jmeter下载地址:Apache JMeter - Download Apache JMeter

解压压缩文件,进入bin目录。双击ApacheJMeter.jar(客户端为中文)或jmeter.bat即可启动jmeter (jmeter依赖java8)

jmeter支持很多测试类型,下面只简单介绍web http的测试

打开jmeter后在测试计划下添加线程组

如下图

在线程组下添加一个http请求

如下(登陆接口)

在登陆接口下添加一个观察结果树

如下

执行(未保存时会提示先保存)

查看观察结果树

有些接口必须要登陆获取cookie中的JSESSIONID后才能访问。

jmeter可以通过Http Cookie管理器管理cookie,使其他的访问自动带上cookie而不用手动设置

在线程组下添加cookie管理器

如下

在线程组下添加一个需要登陆后才能访问的接口

注意上面的服务器名称或ip必须与登陆接口的服务器或名称相同,不能一个是localhost 一个是127.0.0.1。否则获取cookie会失败

在登陆后的接口下也添加一个观察结果树

为了测试方便我在login接口下返回一个自定义的cookie。如下

@RequestMapping("/login")
    public Result login(HttpServletRequest request , HttpServletResponse response, @Validated UserDto dto, BindingResult result) throws IOException {
        if(result.getErrorCount() >= 1){
            return Result.fail(result.getAllErrors().get(0).getDefaultMessage());
        }
        UserVo userVo = dto.toUserVo();
        UserVo queryResult = iUserMicroService.findUserByUserName(userVo.getUserName());
        if(queryResult == null){
            return Result.fail("该用户没有注册");
        }
        String password = DigestUtils.md5Hex(userVo.getPassword());
        if(!queryResult.getPassword().equals(password)){
            return Result.fail("密码不正确");
        }
        Cookie cookie = new Cookie("wl","hello");
        cookie.setMaxAge(3600);
        cookie.setPath("/");
        response.addCookie(cookie);
        sessionService.setUserSession(request,queryResult);
        return Result.success(queryResult);
    }

在次执行。查看登陆后接口的观察结果树的请求头信息

可以看到请求头上带了两个cookie

在单点登陆或跨域情况下Http Cookie管理器获取不到cookie

为了测试方便我们模拟跨域,直接将登陆接口的服务器或ip修改为:localhost。登陆后的接口的服务器或ip值依然是127.0.0.1

再次执行

登陆接口成功

但是登陆后的结果却失败了

请求头信息如下(没有cookie)

解决这个问题可以使用jemeter  BeanShell后置处理器

在登陆接口下添加 后置处理器

编写脚本(日志可以去掉)

import org.apache.jmeter.samplers.SampleResult;
log.info("=====================");
SampleResult result = ctx.getPreviousResult();
String headers = result.getResponseHeaders();
String[] array = headers.split("\n");
        for(int i=0;i<array.length;i++){
            if(array[i].startsWith("Set-Cookie")){
                String params = array[i].replace("Set-Cookie: ","");
                String[] cookieArray = params.trim().split(";");
                String[] cookieKeyValue =  cookieArray[0].split("=");
                String cookieKey = cookieKeyValue[0];
                String cookieValue = cookieKeyValue[1];
               if(cookieKey.equals("JSESSIONID")){
               	log.info(cookieValue);
               	props.put("JSESSIONID",cookieValue);
               }
            }
        }
log.info(headers);

如下图

上面的脚本获取Cookie中JSESSIONID的值并赋值给Jemeter中JSESSIONID(名字可以自定义)这个全局变量

在Http Cookie管理器中添加一条JSESSIONID的cookie 并使用${__P(JSESSIONID,)}获取上面赋值的全局变量。

如下(注意安全不要勾选)

注意域必须与需要登陆的接口的服务器或ip的值相同

再次执行

登陆接口请求头如下(域名为localhost )

登陆后请求头如下(域名为127.0.0.1  cookie有值)

jemeter目录如下

BeanShell内置对象ctx javadoc JMeterContext (Apache JMeter dist API)

                              vars javadoc JMeterVariables (Apache JMeter dist API)

                            prev - (SampleResult)  javadoc SampleResult (Apache JMeter dist API)

                            sampler javadoc Sampler (Apache JMeter dist API)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值