admin管理员组文章数量:1437318
MeterSphere 随手记
MeterSphere随手记
实践环境
版本: MeterSphere v2.10.12-lts
实现全局前置准备方法
需求场景1:执行所有场景用例前,先执行全局前置准备操作
实现方法:
1、将所有前置准备操作以场景用例的形式创建
2、建立一个名为 前置准备套件 的场景,引用上述所有前置操作场景用例--将前置准备操作场景用例引用为步骤。同时勾选 失败继续 场景设置复选框,避免某个步骤失败,后续前置准备操作都不执行的情况。
3、调整上述步骤的顺序,解决部分前置准备操作场景之间的顺序依赖问题
4、登录MeterSphere数据库,默认登录账号/密码:root/Password123@mysql,添加一下定时任务
代码语言:javascript代码运行次数:0运行复制SET GLOBAL event_scheduler = 1;
DROP EVENT IF EXISTS e_update_preparation_suite_order;
-- 默认每5分钟执行一次更新操作。
CREATE EVENT IF NOT EXISTS e_update_preparation_suite_order
ON SCHEDULE EVERY 300 second
DO UPDATE metersphere.test_plan_api_scenario tpas JOIN (
SELECT test_plan_id, MAX(`order`) AS max_order FROM metersphere.test_plan_api_scenario
WHERE api_scenario_id NOT IN (SELECT id FROM metersphere.api_scenario WHERE `name` = '前置准备套件')
GROUP BY test_plan_id) t ON tpas.test_plan_id = t.test_plan_id
SET tpas.`order` = t.max_order + 1
WHERE tpas.api_scenario_id in (SELECT id FROM metersphere.api_scenario WHERE `name` = '前置准备套件')
说明:
- metersphere中测试计划最新关联的场景,最先被执行。
- metersphere中,执行测试计划时,不同场景之间的执行顺序管控是通过
metersphere.test_plan_api_scenario.order
字段控制的,字段值越大,越优先被执行。所以,可以通过上述定时任务,以适当频率将 前置准备套件 的order
更新为最大值(每个计划对应一个最大值)。
全局环境变量设置
代码语言:javascript代码运行次数:0运行复制vars.put(${__metersphere_env_id}+'GLOBAL_VAR_NAME', 'var_value')
vars.put('GLOBAL_VAR_NAME', 'var_value') # 让环境变量立即生效
说明:执行上述语句后,将会在 项目设置-项目环境-新建环境/编辑-通用配置
生成名为GLOBAL_VAR_NAME
,值为var_value
的常量全局环境变量。
获取前一个请求的响应体
代码语言:javascript代码运行次数:0运行复制prev.getResponseData() # 适合非文本类数据读取
prev.getResponseDataAsString()
注意:实践发现,不能在 自定义脚本 步骤组件的 断言规则 脚本中使用,获取不到值
脚本断言
代码语言:javascript代码运行次数:0运行复制场景设置 优先使用原场景变量,没有则使用当前场景变量 优先使用当前场景变量,没有则使用原场景变量
后置操作-提取参数-JSONPath提取-匹配多条
采用JSONPath提取参数,如果JSONPath匹配到多个结果时,默认只会取一个结果,存储到指定变量(假设变量名为 varName
),如果勾选了 匹配多条,则会存储所有匹配结果:每个结果值存储到变量,变量名格式形如:varName_1,varName_2,...,varName_N
,其中N
从1开始,最大值为匹配结果数,此时,如果希望用ForEach
循环控制器来遍历结果,变量前缀填写varName
。此外,也可以直接通过vars.get(varName_N
)的方式获取变量
ForEach
循环控制器变量前缀参数化
问题:希望通过用ForEach
循环控制器来遍历自定义脚本生成的一组支持ForEach
遍历的变量值,但是变量数量不定,如何处理?
答案:
将变量前缀参数化,形如以下
代码语言:javascript代码运行次数:0运行复制import time
var_name = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
vars.put('prefix', var_name)
var_num = 10
for i in range(var_num):
vars.put(var_name + '_%s' % str(i + 1), 'value%d' % i)
ForEach
组件中填写变量前缀时填写参数化后的变量${prefix}
,而非常量变量前缀字符串
备注:如果不参数化,将变量前缀写死,那遍历时,可能遍历之前设置的变量,如果上一轮的变量值比较多的话。
注意事项
- MeterSphere中,脚本默认开启JMeter的代码缓存功能
- MeterSphere中,
项目设置-项目环境-新建环境/编辑-HTTP配置
全局cookie和场景cookie和单个请求中cookie使用是互补的,不会替换 - 等待控制器用于全局--对每个采样器生效 metershpere中,等待控制器 估计用的JMeter的固定定时器,没法放在其它采样器下(步骤组件),所以会作用于全局--针对每个采样器执行固定等待
- 一般情况下,用例场景不要够取失败继续--即步骤执行失败则停止继续运行。
- 场景变量 会被用例步骤中的同名变量覆盖
- 场景变量
Cookie
请求头的值不能通过vars.put('Cookie')
的方式修改,但是可以通过修改Cookie
请求头引用的变量值修改(假设已在场景变量中将Cookie
请求头的值设置为某个变量)
本文标签: MeterSphere 随手记
版权声明:本文标题:MeterSphere 随手记 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1747486322a2699599.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论