手把手教会你使用jmeter,参数化、csv的使用

免费开源的接口:知乎日报(APP)API接口文档;适合初学者用来做接口测试、压力测试。

1. 右键添加线程组

2.设置线程数

        线程数:指JMeter测试计划中配置的虚拟用户(Virtual Users)数量。每个线程独立执行测试计划中定义的操作(如发送HTTP请求),模拟一个真实用户的行为。

        例如:设置线程数为100,表示模拟100个用户同时操作。

| 低并发测试 | 10 | 1 | 1 | 10个用户立即启动,执行1次 |

| 线性增加压力 | 100 | 100 | 10 | 100秒内启动100用户,每个用户执行10次 |

| 持续压力测试 | 50 | 10 | Forever | 10秒内启动50用户,持续运行直到手动停止 |

 注意:JMeter的线程数 != 绝对并发数!

 原因:JMeter线程是顺序执行测试计划中的操作(如HTTP请求),若请求之间有等待时间(如定时器),则实际并发量会低于线程数。

3. 前置处理器(JSR223预处理器),编写一个当天时间的脚本,并使用在接口中;示例代码如下:

var currentDate = new Date();
var year = currentDate.getFullYear();
var month = currentDate.getMonth() + 1; 
var day = currentDate.getDate();

function padZero(number, length) {
    var str = number.toString();
    while (str.length < length) {
        str = '0' + str;
    }
    return str;
}
var formattedMonth = padZero(month, 2);
var formattedDay = padZero(day, 2);
var formattedDate = year + formattedMonth + formattedDay;
vars.put("date", formattedDate);
log.info("这是一条信息级别的日志,前置处理器date: " + formattedDate);

4. 获取脚本中写的时间${date},并传参数据给接口

5.查看结果数

6. 添加后置处理器获取指定id并使用到下个接口中

//获取接口返回的结果
var responseData = prev.getResponseDataAsString();
var jsonResponse = JSON.parse(responseData);
log.info("storyid: " + jsonResponse.stories[0].id);
vars.put("storyid", jsonResponse.stories[0].id);  //用于指定id查询日报详情

7. 传了指定的id到接口中,并发送请求

8. csv文件的使用

        1. 接口返回的数组对象里面有多个id,把返回的id存到csv文件中,添加后置处理器,示例代码如下:

// 获取接口返回结果
var responseData = prev.getResponseDataAsString();
var jsonResponse = JSON.parse(responseData);

// 提取所有story ID到数组
var storyIds = [];
jsonResponse.stories.forEach(function(story) {
    storyIds.push(story.id);
});
log.info("提取的Story IDs: " + storyIds.join(","));

// 确保目录存在
var csvDir = new java.io.File("D:/jmeter_results");
if (!csvDir.exists()) {
    csvDir.mkdirs();
}

// 写入CSV文件
try {
    var csvPath = "D:/jmeter_results/storyIds.csv";
    var csvFile = new java.io.File(csvPath);
    
    // 创建文件(如果不存在)
    if (!csvFile.exists()) {
        csvFile.createNewFile();
        log.info("创建CSV文件: " + csvPath);
    }
    
    // 使用缓冲写入器
    var writer = new java.io.BufferedWriter(
        new java.io.FileWriter(csvFile, true) // true=追加模式
    );
    
    // 如果是新文件,写入表头
//    if (csvFile.length() === 0) {
////        writer.write("StoryID");
//        writer.newLine();
//    }
    
    // 写入所有story ID
    storyIds.forEach(function(id) {
        writer.write(id.toString());
        writer.newLine();
    });
    
    writer.close();
    log.info("成功写入 " + storyIds.length + " 个StoryID到: " + csvPath);
    
    // 将ID列表存入JMeter变量
    vars.put("allStoryIds", storyIds.join(","));
    
} catch (e) {
    log.error("CSV写入错误: " + e);
}

        2. 读取csv文件中的id

9. 添加同步定时器,同步定时器(Synchronizing Timer)是JMeter中的一个特殊定时器,用于模拟并发用户同时发起请求的场景。它的主要作用是阻塞线程,直到满足特定条件后才同时释放所有线程,使它们在同一时刻发送请求。

  • 配置:并发数=50,超时时间=0
  • 效果:只有当有50个线程到达定时器时,才会同时释放这50个线程
  1. 性能影响:同步定时器会阻塞线程,可能影响测试结果的准确性
  2. 超时设置:必须设置合理的超时时间,避免测试无限期等待
  3. 线程数配置:确保线程组的线程数 ≥ 同步定时器的并发数,否则可能永远无法满足条件
  4. 资源消耗:大量线程同时发送请求可能会对被测系统造成巨大压力
  5. 调试困难:由于线程同步,调试时可能难以观察单个请求的行为

### JMeter 使用 CSV 文件进行参数化的教程 #### 创建CSV文件 为了使JMeter能够从外部获取变量值,通常会准备一个CSV文件。此文件包含了多组测试数据,每列代表不同的参数名称,而每一行则是一次迭代所需的全部输入数据集[^1]。 例如,创建名为`testData.csv`的文件,其内容如下: | username | password | | --- | --- | | user1 | pass1 | | user2 | pass2 | #### 添加CSV Data Set Config组件 打开JMeter并新建一个线程组,在该线程组下添加`CSV Data Set Config`配置元件。设置元件属性以匹配之前创建的CSV文件路径以及各字段名,确保分隔符正确无误以便于解析CSV文件中的信息[^2]。 ```properties filename=testData.csv fileEncoding=UTF-8 variableNames=username,password delimiter=, recycle=true stopThread=false shareMode=all threads ``` #### 构建HTTP请求采样器 继续在同一级节点内增加HTTP Request Sampler或其他类型的Sampler,用于模拟向目标服务器发送带有动态变化的数据包。此时应当引用来自CSV Data Set Config定义好的变量作为实际传输的内容部分[^3]。 假设要登录某个网站,则可以在URL栏位填入相应的地址,并且在表单参数区域指定`${username}`和`${password}`这样的表达式来代替固定的账号密码组合。 #### 验证结果准确性 最后一步也是至关重要的环节——验证返回的消息体是否符合预期。这可以通过监听器(Listener)或者更进一步地借助BeanShell PostProcessor/JSR223 Post Processor编写自定义逻辑来进行校验操作。如果事先已经在CSV里记录好了期望得到的回答模式,那么就可以轻松完成这一过程了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值