Hedis 发表于 2015-4-13 15:48:21

Jmeter正则提取的数组,如何在循环中分别请求

在测一个考试系统,系统中“请求1”返回了整场考试所有的“试题id”,假设一场考试20题,那么在“请求1”下面加入正则表达式提取器
现在已经可以通过“${试题_1}”的方式成功请求,希望可以加个“20”的循环,每次循环请求一个试题id,而不是复制黏贴20遍直到“${试题_20}”


尝试过用beanshell拼接字符串
re_answer = "${answer_"+re_num+"}";
vars.put("answer1",re_answer)
,请求的时候用参数${answer1}
但是请求的时候直接转义了answer=%24%7Banswer_1%7D:(

ntgecm 发表于 2015-4-13 17:13:06

给你个思路:可以添加“用户定义的变量”或“用户参数”组件在里面设置参数,然后循环读取,实现你要的功能。祝你好运!

Hedis 发表于 2015-4-14 09:51:12

昨天查了一下文档,单个数组可以通过foreach控制器来循环调用
但是问题来了,回答问题的请求中有2个参数,一个answer数组,一个问题id数组,一个foreach只能填写一个数组变量
如果把两个foreach嵌套起来,就变成n*n的请求了
各位大大有木有好的思路呢

难道要把每个foreach中的参数写入文本,然后从外部文件再写回参数么
:'(

Hedis 发表于 2015-4-14 14:11:11

终于搞定了,留个脚印记录下
服务返回:
[
    {
      题目ID: "36位uuid",
      一堆参数qoptions: [
            {
                答案id: "36位uuid",
                content: "答案A的描述"
            },
            {
                答案id: "36位uuid",
                content: "答案B的描述"
            },
            不定长的答案
      ]
    },
    {
      题目ID: "36位uuid",
      一堆参数qoptions: [
            {
                答案id: "36位uuid",
                content: "答案A的描述"
            },
            {
                答案id: "36位uuid",
                content: "答案B的描述"
            },
            不定长的答案
      ]
    },
    ...剩余18道题
]
在请求下面加一个正则表达式提取器,其中
引用名称设置:answer
正则设置:
\{题目ID:"({8}-{4}-{4}-{4}-{12})".*?qoptions:\[\{答案id:"({8}-{4}-{4}-{4}-{12})",content
中间的.*?很重要,表示非贪婪获取第一个匹配的答案
模板设置:$1$$2$
匹配数字设置:-1(表示数组)

然后用foreach控制器,将answer逐条取出,从0至20,输出变量名设置:answer1
这个时候取出的字符串是72位的(36位问题ID+36位答案id)
然后在回答问题的请求中,分别用substring截取字符串,就搞定了
问题id=${__substring(${answer1},0,36,wentiid)}
答案id=${__substring(${answer1},36,72,daanid)}

再也不用担心100道问题的试卷怎么测了:lol

whscfan 发表于 2015-4-15 15:42:07

你都想到用beanshell了,什么不多考虑点呢?你的beanshell本身就有问题啊。
re_answer = "${answer_"+re_num+"}";
假如re_num是1 得到的re_answer 为${answer_1}
然后你存到了answer1,为${answer_1}
最后你接着用${answer1},得到的是${${answer_1}}
${${answer_1}}这个不报错才怪呢。


应该这么写:
re_answer = "answer_"+re_num;//eg. re_answer=answer_1
vars.put("answer1",re_answer);// eg. answer1=answer_1
log.info(vars.get("answer1"));//打印出来看看是不是answer_1
页: [1]
查看完整版本: Jmeter正则提取的数组,如何在循环中分别请求