zoukankan      html  css  js  c++  java
  • 流量回复学习记录二

       继续上次的学习记录,因为整个流量回放的过程已经开发完成,所以可以来复盘一下。

       现在各类压测平台都使用 jmeter 执行压测,jmeter 是如何判断什么时候执行什么步骤?

       在一中提到,jmeter的脚本是 hashtree,为了保证压测(回放) 能按照顺序执行请求,因此可以采用 ListedHashTree 来根据添加到先后顺序决定执行顺序,同样的,每个 node 都是一个步骤。所以对于jmeter来说,常见的执行发送http请求的场景,通过 httpsampler 完成,在 listedhashtree 里,会使用 httpsamplerproxy 来完成这件事情。

       生成的顺序是,HttpSamplerProxy init -> TestPlan init -> BackendListener init -> BackendListener added to TestPlan -> TestPlan passed to Engine

       除了最后一步,一定是一个 testplan 提交给 jmeter 引擎外,其他步骤都是可以按不同顺序操作。

       如何初始化一个 sampler? sampler 里包含什么信息?

            HTTPSamplerProxy sampler = new HTTPSamplerProxy();
    
            sampler.setEnabled(true);
            sampler.setName("请求名称");
            sampler.setProperty(TestElement.TEST_CLASS, HTTPSamplerProxy.class.getName());
            sampler.setProperty(TestElement.GUI_CLASS, "HttpTestSampleGui");
            sampler.setProperty(TestPlan.COMMENTS,"");
            sampler.setContentEncoding("UTF-8");
            sampler.setFollowRedirects(true);
            sampler.setAutoRedirects(false);
            sampler.setUseKeepAlive(true);
            sampler.setDoMultipartPost(false);
            sampler.setConnectTimeout("");
            sampler.setResponseTimeout("");
            sampler.setEmbeddedUrlRE("");
    
            sampler.setMethod(info.getJSONObject("request").getString("method"));
            String requestUrl = info.getJSONObject("request").getString("url");
            sampler.setPostBodyRaw(true);
    
            try{
                if(!StringUtils.isEmpty(info.getJSONObject("request").getString("body"))){
                    JSONObject body = JSONObject.parseObject(info.getJSONObject("request").getString("body"));
                    sampler.setArguments(addHttpArguments(body));
    
                }
            } catch (Exception e){
                log.info("Request body is not key-value pair!");
            }
            URL url = null;
            try {
                url = new URL(requestUrl);
                sampler.setDomain(URLDecoder.decode(url.getHost(),"UTF-8"));
                sampler.setPath(URLDecoder.decode(url.getPath() + "?" + url.getQuery(), "UTF-8"));
                sampler.setProtocol(URLDecoder.decode(url.getProtocol(),"UTF-8"));
                if (url.getPort() == -1 && url.getProtocol().equals("http")){
                    sampler.setPort(80);
                }else if (url.getPort() == -1 && url.getProtocol().equals("https")){
                    sampler.setPort(443);
                }else{
                    sampler.setPort(url.getPort());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

         比较坑的一点是,httpsamplerproxy没有支持设置 rawdata的方法,尽管有

    sampler.setPostBodyRaw(true);
    

      除了能设置 true/false , 其他在发送http 请求时的body部分,如果是Keyvalue pair ,需要自己转成 argument,如果是文件,需要转成二进制文件,看了好久的 jmeter官方文档,才确认了这一点,就是设置不了……

       

  • 相关阅读:
    Map(关联式容器)
    List(双向链表)
    ubuntu新建、删除用户
    rbenv安装本地ruby安装包
    pycharm显示Unresolved reference
    rails 查看项目的所有路由
    rails 表单中默认值
    rails 辅助方法
    Ubuntu18.04网易云音乐双击运行
    apm飞行模式
  • 原文地址:https://www.cnblogs.com/spillage/p/15090255.html
Copyright © 2011-2022 走看看