待审批列表所有数据 ID 值,作为审批接口的参数值请求。
可以通过正则表达式提取出上一个接口响应的所有 ID,我需要用这些所有的 ID 作为下一个接口的请求参数,每个接口用一次这个 ID,做并发,有什么办法吗?
正则取-1 全部,会有一个变量是总数,用循环去取就行了
foreach 控制器遍历所有返回值
我是用数据库或者正则表达式把这些值全部取出来,放 csv 文件里面,再去做并发,不知道还有没有更智能的办法
你用正则表达式取出来了列表中改的所有 id,我记得在变量名的后面加上"_"+"序号",可以引用你提取出来的集合中的与序号对应的数值。
比如 ID_1,就是引用取出的 ID 中的第 1 个 (这个序号是从 0 还是从 1 开始计数的,不记得了,你可以搞个 debug 取样器,看下变量的序号,这样比较确定些)
是那样的,-1 取出全部后,变量后加_1 就是第一个,但是只能循环去利用这些变量,没有办法让他并发的时候一次利用这些值
可以的,使用V 这个函数,可以将变量名后面的序号进行参数化拼接,将序号设置为 1~ID 总数的随机数,这样你并发的时候,每次请求都是从 ID 列表中随机取一条,类似这样:${V(ID_${__Random(1,10,)})}
这样满足你的需求吗?
V 前面有双下划线的,在这回复,自动给我把下划线给过滤了~
然后如果你取出来的 id 数量不确定的话,我记得有个变量是记录了你取出来了多少个数的,你可以用 debug 取样器看下,那个后缀怎么拼写我不记得了~
但是这些方法都是直在同一线程组才生效吧?跨线程组就不好调用了,我 i 第一个接口只做一次,用正则取出数据,想让第二个接口做并发
主要是我跨线程的这个参数又是一个多值的变量,比如调用这样写 就不太行的样子 ${P(V(newprojectid_${__Random(1,20,)}),)}。。。貌似还是只能在同线程组内进行,不能做到第一个请求只做一次,第二个请求利用它的响应数据做参数并发多次
不行,foreach 里面可不能添加同步定时器。foreach 是循环,在循环里面添加定时器,他会永远等不到并发数
把第 1 个接口的请求写在 setUp 线程组里,用 beanshell 拿出所有要用的 ID 放在局部环境里;并发线程看你选择是暴力的并发还是阶梯压测,再写一个对应线程执行第 2 个接口,用 benashell 前置脚本取 ID。这样可以满足你,接口 1 只跑 1 次拿 ID,接口 2 跑并发。
第一个接口放到 Setup 线程中,把结果写入到 csv 文件中,第二个接口放到第二个线程中读取 csv 应该可以的
看你的下一步请求对 id 有没有要求,可以先分两步:
1、新增一个仅一次控制器,取出所有待审批列表所有数据 ID 值,存到一个 list 里
2、新增一个 beanshell 处理器,每次取从 list 里取一个随机值
《jmeter 性能测试入门手册》公开分享,感兴趣的只需要加 QQ 群 956186148(不需要审核),即可在群文件里面自由下载。文档不收费,不需要加好友获取,无附加条件,下载完成自由退群!!
既然你能取出所有的 id 就可以把这些 id 放到 list 里面 用 beanshell
benshell 完全能满足,是看你怎么用,本身就是轻 java 脚本,jemter 尽量不要依赖正则,多用 beanshell,你就会发现很多你要问的难题,一下子就自己能解决了。