From 730f7452cd4418a2550305159afb82c97fa23f0b Mon Sep 17 00:00:00 2001 From: ronghuaxiang Date: Tue, 5 Jan 2021 14:50:55 +0800 Subject: [PATCH] Update JMeterVars.java (#981) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 解决使用JSONPath的$..xx的语法匹配多个值时,提取出来的值不应该只有一个, 解决多值匹配时候变量无法传递问题 Co-authored-by: xiangronghua --- .../io/metersphere/api/jmeter/JMeterVars.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/io/metersphere/api/jmeter/JMeterVars.java b/backend/src/main/java/io/metersphere/api/jmeter/JMeterVars.java index 84b1c089fd..5398e7e4cf 100644 --- a/backend/src/main/java/io/metersphere/api/jmeter/JMeterVars.java +++ b/backend/src/main/java/io/metersphere/api/jmeter/JMeterVars.java @@ -1,5 +1,6 @@ package io.metersphere.api.jmeter; +import com.alibaba.fastjson.JSON; import io.github.ningyu.jmeter.plugin.dubbo.sample.DubboSample; import org.apache.jmeter.extractor.JSR223PostProcessor; import org.apache.jmeter.extractor.RegexExtractor; @@ -30,12 +31,29 @@ public class JMeterVars { * @param vars * @param extract */ - public static void addVars(Integer testId, JMeterVariables vars, String extract) { + public static void addVars(Integer testId, JMeterVariables vars, String extract) { JMeterVariables vs = new JMeterVariables(); - if (!StringUtils.isEmpty(extract) && vars != null) { List extracts = Arrays.asList(extract.split(";")); Optional.ofNullable(extracts).orElse(new ArrayList<>()).forEach(item -> { + + String nrKey = item + "_matchNr"; + Object nr = vars.get(nrKey); + if (nr != null) { + int nrv = 0; + try { + nrv = Integer.valueOf(String.valueOf(nr)); + } catch (Exception e) { + } + if (nrv > 0) { + List data = new ArrayList<>(); + for (int i = 1; i < nrv + 1; i++) { + data.add(vars.get(item + "_" + i)); + } + String array = JSON.toJSONString(data); + vars.put(item, array); + } + } vs.put(item, vars.get(item) == null ? "" : vars.get(item)); }); vs.remove("TESTSTART.MS"); // 标示变量移除