You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LoadRunner中筛选含完整三值且Tag Id以71开头的产品

LoadRunner实现批次产品筛选移除方案

一、关联获取产品属性列表

首先通过web_reg_save_param系列函数,从产品列表响应中分别抓取三个属性的数组:

  • 抓取所有Specification Id,设置ORD=ALL保存为Spec_ID数组(共4个元素)
  • 抓取所有Serial No,设置ORD=ALL保存为Serial_No数组(共4个元素)
  • 抓取所有非NA的Tag Id,设置ORD=ALL保存为Tag_ID数组(共2个元素)

示例关联代码:

// 关联Specification Id
web_reg_save_param("Spec_ID",
    "LB=<span class='spec'>",
    "RB=</span>",
    "ORD=ALL",
    LAST);

// 关联Serial No
web_reg_save_param("Serial_No",
    "LB=<span class='serial'>",
    "RB=</span>",
    "ORD=ALL",
    LAST);

// 关联Tag Id(排除NA的情况)
web_reg_save_param("Tag_ID",
    "LB=<span class='tag'>71",
    "RB=</span>",
    "ORD=ALL",
    LAST);

二、匹配属性对应关系并筛选

由于产品在UI和响应中的顺序一致,通过循环遍历产品数组,匹配每个产品的三个属性,并筛选出符合条件的产品:

  • 循环遍历4个产品的Spec和Serial
  • 对应匹配Tag数组的元素(前2个产品有Tag,后2个无)
  • 筛选规则:同时存在三个属性,且Tag Id以71开头

示例逻辑代码:

int i;
int tag_count = atoi(lr_eval_string("{Tag_ID_count}"));

for(i=1; i<=4; i++){
    char *spec = lr_paramarr_idx("Spec_ID", i);
    char *serial = lr_paramarr_idx("Serial_No", i);
    char *tag = NULL;

    // 匹配当前产品的Tag Id(仅前2个产品有值)
    if(i <= tag_count){
        tag = lr_paramarr_idx("Tag_ID", i);
        // 补全Tag的完整值(因为关联LB用了71,这里要加上前缀)
        char full_tag[20];
        sprintf(full_tag, "71%s", tag);
        tag = full_tag;
    }

    // 执行筛选并移除
    if(tag != NULL){
        lr_output_message("找到目标产品:Spec=%s, Serial=%s, Tag=%s", spec, serial, tag);
        // 调用移除接口
        web_submit_data("Remove_Target_Product",
            "Action=http://your-domain/product/remove",
            "Method=POST",
            ITEMDATA,
            "Name=batch_id", "Value=A102", ENDITEM,
            "Name=spec_id", "Value=%s", spec, ENDITEM,
            "Name=serial_no", "Value=%s", serial, ENDITEM,
            "Name=tag_id", "Value=%s", tag, ENDITEM,
            LAST);
    }
}

三、优化方案:按产品组关联

如果响应中每个产品的三个属性在同一个HTML块内,可以直接按组关联,避免顺序匹配误差:

// 关联所有产品块
web_reg_save_param_ex(
    "ParamName=Product_Block",
    "LB=<div class='product-item'>",
    "RB=</div>",
    "ORD=ALL",
    LAST);

// 遍历每个产品块提取属性
int block_count = atoi(lr_eval_string("{Product_Block_count}"));
for(i=1; i<=block_count; i++){
    char *block = lr_paramarr_idx("Product_Block", i);
    char spec[50], serial[50], tag[50];

    // 从块中截取Spec
    strncpy(spec, strstr(block, "<span class='spec'>")+18, strstr(block, "</span>") - strstr(block, "<span class='spec'>")-18);
    spec[strstr(block, "</span>") - strstr(block, "<span class='spec'>")-18] = '\0';

    // 截取Serial
    strncpy(serial, strstr(block, "<span class='serial'>")+19, strstr(block, "</span>") - strstr(block, "<span class='serial'>")-19);
    serial[strstr(block, "</span>") - strstr(block, "<span class='serial'>")-19] = '\0';

    // 截取Tag并判断
    char *tag_start = strstr(block, "<span class='tag'>");
    strncpy(tag, tag_start+17, strstr(block, "</span>") - tag_start -17);
    tag[strstr(block, "</span>") - tag_start -17] = '\0';

    if(strcmp(tag, "NA") != 0 && strstr(tag, "71") == tag){
        // 执行移除操作
        web_submit_data("Remove_Target_Product",
            "Action=http://your-domain/product/remove",
            "Method=POST",
            ITEMDATA,
            "Name=batch_id", "Value=A102", ENDITEM,
            "Name=spec_id", "Value=%s", spec, ENDITEM,
            "Name=serial_no", "Value=%s", serial, ENDITEM,
            "Name=tag_id", "Value=%s", tag, ENDITEM,
            LAST);
    }
}

注意事项

  • 关联的左右边界需根据实际响应内容调整,确保属性抓取准确
  • 移除接口的参数需与前端实际提交的参数一致,包含批次ID等必要信息
  • 循环中注意LoadRunner参数数组为1-based下标,避免越界

内容的提问来源于stack exchange,提问作者Mikey8997

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:43:29