zoukankan      html  css  js  c++  java
  • Jmeter-接口压测

    一、概述

    JMeter是Apache下一款在国外非常流行和受欢迎的开源性能测试工具,JMeter可用于模拟大量负载来测试一台服务器,网络或者对象的健壮性或者分析不同负载下的整体性能。

    1、压测不同的协议和应用

    1) Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)

    2) SOAP / REST Webservices

    3) FTP

    4) Database via JDBC

    5) LDAP 轻量目录访问协议

    6) Message-oriented middleware (MOM) via JMS

    7) Mail - SMTP(S), POP3(S) and IMAP(S)

    8) TCP等等

    2、使用场景

    1)功能测试

    2)压力测试

    3)分布式压力测试

    3、优点

    1)纯java开发

    2)上手容易,高性能

    3)提供测试数据分析

    4)各种报表数据图形展示

    4、本地快速安装Jmeter4.x

    (1)需要安装JDK8或者JDK9,JDK10

    (2)快速下载

    (3)、配置环境变量(mac):

    > vi .bash_profile
        export JMETER_HOME=/Users/xxx/applications/apache-jmeter-5.3     
        export PATH=.:$JMETER_HOME/bin:$PATH
        >source .bash_profile
    

     

    二、Jmeter目录文件讲解

    简介:讲解jmeter解压文件里面的各个目录,文件等

    1、目录

    bin:核心可执行文件,包含配置

    jmeter.bat: windows启动文件:

    jmeter: mac或者linux启动文件:

    jmeter-server:mac或者Liunx分布式压测使用的启动文件

    jmeter-server.bat:mac或者Liunx分布式压测使用的启动文件

    jmeter.properties: 核心配置文件

    extras:插件拓展的包

    lib:核心的依赖包

    ext:核心包

    junit:单元测试包

    2、Jmeter语言切换

    Jmeter默认是英文版本的,你想改成中文版本可以在控制台:

    menu -> options -> choose language

    当然如果你闲每次都手动修改语言麻烦,那么可以通过修改配置文件,直接设置成中文,设置方式:

    bin目录 -> jmeter.properties

    默认 #language=en

    改为 language=zh_CN

    JMeter---HTTP压测

    加入我们测试交流群。642830685,领取最新软件测试资料大厂面试和Python自动化、接口、框架搭建学习资料!

    一、创建线程组

    右击-->添加-->Threads(Users)-->线程组

    下面对比较重要的几个参数,讲解下:

    名称: 就是给你这个线程组起名字。

    线程数:指压力测试时候模拟几个用户测试接口。

    Ramp-Up:这里指几秒运行完上面的模拟用户数。

    循环次数:指循环几次线程数。

    总的理解下:上面的意思是2秒内模拟5个用户请求API,循环2次。

    二、添加HTTP

    在线程组上右击-->添加-->Sampler-->HTTP请求

     在java代码中添加API接口

    @RequestMapping(value = "users", method = RequestMethod.GET) 
    @ResponseBody
    public  Object users() {
            List<String> userList = new ArrayList<>();
            userList.add("张三");
            userList.add("李四");
            userList.add("王五");
            System.out.println("获取用户接口......"); return userList;
    

    三、查看结果树

    在 线程组 上右击-->添加-->监听器-->察看结果树

    运行JMter查看结果:

     

    通过测试可以发现,已经向users接口请求10次,10次都成功,也都有返回数据。

    四、响应断言

    响应断言: 断言用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。

    增加断言: 在线程组上右击--> 添加--> 断言 --> 响应断言

    apply to(应用范围):

    Main sample only: 仅当前父取样器 进行断言,一般一个请求,如果发一个请求会触发多个,则就有sub sample(比较少用)

    常用响应字段:

    响应文本:即响应的数据,比如json等文本

    响应代码:http的响应状态码,比如200,302,404这些

    响应信息:http响应代码对应的响应信息,例如:OK, Found

    Response Header: 响应头

    模式匹配规则:

    包括:包含在里面就成功

    equals:完全匹配,区分大小写

    再次运行JMeter,查看结果:

    发现http请求报错,因为返回数据不包含断言中所设定的数据。(一般调试阶段可以设置断言,但真实压力测试情况下建议不要开启断言和查看结果树,因为会因为性能问题,使测试结果不十分准确)

    五、聚合报告

    线程组右击-->添加->监听器->聚合报告(Aggregate Report)

    lable: sampler的名称

    Samples: 一共发出去多少请求,例如5个用户,循环2次,则是 10

    Average: 平均响应时间

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

    90% Line : 90% 用户的响应不会超过该时间 (90%的样本不超过这个时间。 剩下的样本至少与此一样长)

    95% Line: 95% 用户的响应不会超过该时间

    99% Line: 99% 用户的响应不会超过该时间

    min: 最小响应时间

    max: 最大响应时间

    Error%:错误的请求的数量/请求的总数

    Throughput: 吞吐量——默认情况下表示每秒完成的请求数(Request per Second) 可类比为qps

    KB/Sec: 每秒接收数据量

    六、自定义变量

    为什么使用:很多变量在全局中都有使用,或者测试数据更改,可以在一处定义,四处使用比如服务器地址你如果每一个里面都手动输入127.0.0.1,那万一那天服务器地址变了,总不能在一个一个改服务器地址

    吧,那么这里我们可以写在全局配置文件中。

    线程组->add -> Config Element(配置原件)-> User Definde Variable(用户定义的变量)

    上面配置了两个全局变量:

    引用方式${XXX},在接口中变量中使用:

    七、CSV可变参数压测

    作用:你在API接口传入参数的时候,不可能100次请求都传一样的参数,为了更真是的模拟用户,所传的参数当然也是随机的,这样才更真实。

    线程组右击-->add -> Config Element(配置原件)--> CSV data set config (CSV数据文件设置)

    比较关键的参数:

    文件名:就是你引用的文件地址(因为大量的数据都会写在外部文件中)

    变量名称:如果有多个用逗号隔开

    分隔符:csv默认用逗号,如果是txt文件这个需要设置符号

    1、user.csv文件

    2、HTTP请求

    3、API接口

    @RequestMapping(value = "login", method = RequestMethod.POST)
    @ResponseBody
    public Object login(String name, String pwd) {
            
     List<String> userList = new ArrayList<>();
                userList.add(name);
                userList.add(pwd);
                userList.add(name.length()+""); //输出客户端传来的值
                System.out.println("name:"+name+"----pwd:"+pwd); return userList;
        }
    

    测试运行(看java控制台)  

    JMeter---MySQL压测

    一、添加MySQL驱动jar包

    在测试计划(Test Plan)页面添加jar包

    二、添加MySQL连接配置

    加线程组右击-->添加(add)-->配置元件(config element)-->JDBC connection configuration

    核心配置

    variable name for created pool(已创建池的变量名称)

    Max Number of connections: 最大连接数

    MAX wait:最大等待时间

    Auto Commit: 是否自动提交事务

    DataBase URL: 数据库连接地址 jdbc:mysql://127.0.0.1:3306/blog

    JDBC Driver Class: 数据库驱动,选择不同数据库对应的驱动

    username:数据库用户名

    password:数据库密码

    三、添加JDBC Request

    首先是添加线程组,然后右击-->添加-->Samplar-->JDBC Request

    参数讲解:(注意:上面的sql结尾不要加";")

    variable name of pool declared in JDBC connection configuration(注意:这里要和上面的variable name for created pool里面一致)

    Query Type:查询类型

    parameter values: 参数值

    parameter types:参数类型

    variable names:sql执行结果变量名

    result variable names: 所有结果当做一个对象存储

    query timeouts:  查询超时时间

    handle results:处理结果集

    执行不同语句选择不同的Query Type

    数据库信息

    四、运行结果

     

    说明数据库压测成功

    加入我们测试交流群。642830685,领取最新软件测试资料大厂面试和Python自动化、接口、框架搭建学习资料!

  • 相关阅读:
    EF CodeFirst EntityTypeConfiguration 自关联映射配置
    DDD 领域驱动设计-看我如何应对业务需求变化,领域模型调整?
    DDD 领域驱动设计-看我如何应对业务需求变化,愚蠢的应对?
    【记录】ASP.NET XSS 脚本注入攻击
    【记录】JS 获取图片原始尺寸-防止图片溢出
    让 ASP.NET vNext 在 Mac OS 中飞呀飞。。。
    Building Modern Web Apps-构建现代的 Web 应用程序(一些感想)
    【记录】ASP.NET MVC RegisterBundles
    【记录】JS 生成 URL 二维码
    关于有默认值的字段在用EF做插入操作时的思考(续)
  • 原文地址:https://www.cnblogs.com/www642830685/p/13299171.html
Copyright © 2011-2022 走看看