为了账号安全,请及时绑定邮箱和手机立即绑定

JMeter初识项目实战:从零开始构建高效性能测试流程

标签:
杂七杂八

JMeter简介与安装

--- 了解JMeter的基本概念:

JMeter是一款开源的桌面应用,用于进行负载测试、压力测试、性能测试、响应时间测试以及功能测试。它支持HTTP、HTTPS、SOAP、JMS等多种协议,允许用户模拟大量并发用户对Web应用进行负载压力测试。

--- 安装JMeter:

  • 在Windows上

    1. 访问JMeter官网下载适合版本的JMeter安装包。
    2. 解压下载的文件到本地文件夹。
    3. JMeter.exe设置到系统环境变量的PATH中,确保可以在命令行直接运行JMeter。
  • 在Linux或Mac上
    1. 从JMeter GitHub页面或官网下载源码。
    2. 使用./configure配置编译选项(根据自定义需求选择是否下载所有扩展)。
    3. 执行make编译。
    4. 安装JMeter(使用sudo make install)。

项目实战基础

--- 创建第一个测试计划:

打开JMeter,创建一个新的测试计划(Test Plan)。在测试计划中,你可以添加线程组、采样器、监视器和监听器。

import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.testelement.TestPlan;

public class FirstJMeterTestPlan {
    public static void main(String[] args) {
        TestPlan testPlan = new TestPlan();
        SaveService.saveToFile(testPlan, "FirstJMeterTestPlan.jmx");
    }
}

--- 设置线程组与采样器:

在测试计划中添加线程组(Thread Group),设置线程数和循环次数,然后在采样器(Sampler)中输入HTTP请求。

public class HTTPRequestSampler {
    public static void main(String[] args) {
        ThreadGroup threadGroup = new ThreadGroup("HTTPRequest");
        threadGroup.setNumThreads(10);
        threadGroup.setRampUp(30);
        threadGroup.setConcurrentThreads(10);
        threadGroup.setDuration(60);

        BasicController basicController = new BasicController();
        basicController.setTestPlan(new TestPlan());

        HTTPSamplerProxy httpSampler = new HTTPSamplerProxy();
        httpSampler.setURL("http://www.example.com/");
        httpSampler.setMethod(HTTPConstants.METHOD_GET);

        httpSampler.sample(basicController);
        basicController.sample(threadGroup);
    }
}

添加监视器与监听器

--- 监视器的类型与用途:

监视器(Monitor)用于收集和监控测试结果,比如响应时间、吞吐量等。常见的监视器有View Results Tree、Aggregate Report等。

--- 安装与配置监听器:

监听器(Listener)用于接收并显示测试结果。例如,配置View Results Tree监听器。

import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jmeter.testelement.ListenerBase;
import org.apache.jmeter.reporters.ResultCollector;

public class ConfigureListeners {
    public static void main(String[] args) {
        TestPlan testPlan = new TestPlan();
        SaveService.saveToFile(testPlan, "ListenConfigured.jmx");

        // 添加监听器
        ListenerBase listener = new ResultCollector();
        listener.setFileName("result.csv");
        listener.setLogToFile(true);
        testPlan.addListener(listener);
    }
}

脚本编写与优化

--- 基本脚本编写模板

使用HTTPRequestSampler类作为基本模板,添加必要的请求信息。

public class MyCustomSampler {
    public static void main(String[] args) {
        ThreadGroup threadGroup = new ThreadGroup("CustomRequest");
        threadGroup.setNumThreads(5);
        threadGroup.setRampUp(10);
        threadGroup.setConcurrentThreads(5);
        threadGroup.setDuration(60);

        BasicController basicController = new BasicController();
        basicController.setTestPlan(new TestPlan());

        HTTPSamplerProxy httpSampler = new HTTPSamplerProxy();
        httpSampler.setURL("http://www.example.com/api/data");
        httpSampler.setMethod(HTTPConstants.METHOD_POST);
        // 添加请求参数、头部信息等
        httpSampler.setHeader("Content-Type", "application/json");
        httpSampler.setHeader("Authorization", "Bearer token123");

        httpSampler.sample(basicController);
        basicController.sample(threadGroup);
    }
}

--- 通过正则表达式与函数增强脚本功能

使用正则表达式匹配和函数处理返回值。

import org.apache.regexp.RE;
import org.apache.regexp.Matcher;

public class RegexAndFunctionEnhancement {
    public static void main(String[] args) {
        // 示例:使用正则表达式匹配返回值
        HTTPSamplerProxy httpSampler = new HTTPSamplerProxy();
        httpSampler.setURL("http://www.example.com/api/data");
        httpSampler.setMethod(HTTPConstants.METHOD_POST);
        httpSampler.setHeader("Content-Type", "application/json");

        String response = "User ID: 12345";
        Matcher matcher = new RE("User ID: (\\d+)").matcher(response);
        if (matcher.matches()) {
            int userId = Integer.parseInt(matcher.group(1));
            // 使用函数处理userId
            processUserId(userId);
        }
        // 其他脚本操作...
    }
}

执行测试与结果分析

--- 如何启动并执行测试

通过命令行或JMeter GUI执行测试。

jmeter -n -t FirstJMeterTestPlan.jmx -l report.csv

--- 生成报告与结果解释

使用HTML或CSV格式生成测试报告。

jmeter -n -t FirstJMeterTestPlan.jmx -l report.csv -e -o results/

--- 基于结果的性能优化策略

分析报告,识别瓶颈,优化资源使用和代码。

实战案例:模拟真实场景

--- 设计一个实际的性能测试案例

假设需要测试一个电商网站的购物车功能。

public class ShoppingCartTest {
    public static void main(String[] args) {
        // 创建测试计划,添加线程组、请求等
        ThreadGroup threadGroup = new ThreadGroup("ShoppingCartTest");
        threadGroup.setNumThreads(100);
        threadGroup.setRampUp(30);
        threadGroup.setConcurrentThreads(100);
        threadGroup.setDuration(180);

        BasicController basicController = new BasicController();
        basicController.setTestPlan(new TestPlan());

        // 添加HTTP请求,模拟用户添加商品到购物车、结算等操作
        HTTPSamplerProxy addProduct = new HTTPSamplerProxy();
        addProduct.setURL("http://www.example.com/api/cart/add");
        addProduct.setHeader("Content-Type", "application/json");

        HTTPSamplerProxy checkout = new HTTPSamplerProxy();
        checkout.setURL("http://www.example.com/api/cart/checkout");

        // 调整请求参数、头信息等,模拟实际操作场景
        addProduct.sample(basicController);
        checkout.sample(basicController);

        basicController.sample(threadGroup);
    }
}

--- 结果分析与后续改进计划

分析测试结果,识别性能瓶颈,如高延迟、低吞吐量等,并针对性优化服务器配置、代码效率等。

通过本实战流程,初学者可以逐步掌握JMeter在性能测试中的应用,从创建测试计划、编写脚本到执行测试,到最后的性能优化,形成一个完整的测试流程。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消