压力测试---Jemeter的使用

一.线程组配置

线程组相当于有多个用户,同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值。

Delay Thread creation until needed: 默认情况下,测试开始的时候,所有线程就被创建完了。如果勾选了此选项,那么线程只会在合适的需要用到的时候创建。

Ramp-Up Period:
线程启动的时间,下图的线程配置,30个线程,1秒启动时间,每个线程执行两次循环。那么每秒会启动一个线程,每次循环执行一个请求。

 

取样器错误: 当线程执行取样器失败的时候,要执行的策略

选项:

  • 继续:忽略错误,是继续执行
  • Start Next Thread Loop: 忽略错误,线程当前循环终止,执行下一个循环。
  • 停止线程:当前线程停止执行,不影响其他线程正常执行。
  • 停止测试:整个测试会在所有当前正在执行的线程执行完毕后停止
  • 立即停止测试:整个测试会立即停止执行,当前正在执行的取样器如果可能会被中断。

那么这几个配置控制了,当遇到错误的时候,测试的执行策略,是否会继续执行。

调度器

如果不想立即执行,可以通过调度器控制测试执行的开始时间和结束时间。

  • 启动时间:控制测试在某个时间点启动。这个配置会被“启动延迟(秒)”配置覆盖。
  • 结束时间:控制测试执行的结束时间。这个配置会被“持续时间(秒)”配置覆盖。
  • 持续时间(秒):控制测试执行的时间。
  • 启动延迟(秒):控制测试多久后启动执行。

 

二.Http请求配置

新建Http请求,并配置IP,端口,请求超出时间

 

三.新建HttpCookie管理器

由于设置了登陆拦截,所以请求时需要携带cookie信息才能访问接口,所以需要新建一个cookie管理器

 

四.监听器配置

常用的监听器有:查看结果树和图形结果以及聚合报告

 

 

测试代码

使用Semaphore 将并发访问量为控制在10。

 

 private int i;
    private final Semaphore permit = new Semaphore(10, true);

    @RequestMapping(value="/semapi",method=RequestMethod.GET)
    @ResponseBody
    public Map<String,Object> process() {

        Map<String,Object> map = new HashMap<String, Object>();
        try {
            permit.acquire();
            // 业务逻辑处理
            //long start=System.currentTimeMillis();
            System.out.println("============================================================"+i+"调用");
            map.put("code",0);
            map.put("msg","ok");
            Thread.sleep(5000);
            return map;
        } catch (Exception e) {
            e.printStackTrace();
            map.put("code",0);
            map.put("msg","ok");
            return map;
        } finally {
            System.out.println(i+"============================================================释放");
            permit.release();
            i++;
        }
    }

 

 

测试结果展示

 由于设置了12秒的过期时间,并发量为10,每次执行时会阻塞5秒,结果是总并发为30,20个请求成功,10个请求失败

 

 聚合报告结果

 

 聚合报告参数说明:

Label:每个JMeter的element的Name值。例如HTTP Request的Name

#Samples:发出请求数量。如第三行记录,模拟20个用户,循环100次,所以显示了2000

Average:平均响应时间(单位:)。默认是单个Request的平均响应时间,当使用了Transaction Controller时,也可以以Transaction为单位显示平均响应时间

Median:中位数,也就是50%用户的响应时间

90%Line:90%用户的响应时间

95%Line:95%用户的响应时间

99%Line:99%用户的响应时间

Min:最小响应时间

Max:最大响应时间

Error%:本次测试中出现错误的请求的数量/请求的总数

Throughput:吞吐量。默认情况下标示每秒完成的请求数(具体单位如下图)

KB/sec:每秒从服务器端接收到的数据量。

posted @ 2018-07-11 15:43  薛定谔病态猫  阅读(1151)  评论(1编辑  收藏  举报