嘿,宝子们!本日咱们就来聊聊 JMeter 里超等厉害的 If Controller,它就像是一把神奇的钥匙,能帮我们打开机动测试的大门,让你的测试筹划变得更加智能和高效。
一、If Controller 初印象
想象一下,你正在指挥一场精彩的演出,每个演员(测试元件)都在等待你的指令。If Controller 呢,就是那个聪明的舞台调度员,它会根据你设定的条件,决定哪些演员该上台表演(实验测试操作),哪些演员要在后台待命(跳过测试操作)。这是不是很厉害呢?接下来,咱们就一步步看看怎么用好这个神奇的调度员。
二、添加 If Controller 三步走
- 当你打开 JMeter,就像是来到了一个空旷的大舞台,起主要做的就是创建一个测试筹划,这就是我们演出的大纲啦。
- 然后,在测试筹划里添加一个线程组,这可以看作是一群充满活力的小演员,他们会按照我们的安排举行各种表演。
- 最后,在线程组下面,右键点击,选择 “添加” - > “逻辑控制器” - > “If Controller”,瞧,我们的智能调度员 If Controller 就闪亮登场啦!
三、配置 If Controller 大揭秘
(一)给它取个好名字和写个注释
就像我们每个人都有自己的名字一样,If Controller 也需要一个独特的名字,这样在复杂的测试筹划中,你一眼就能认出它。好比说,你在测试一个电商网站的购物流程,用 If Controller 来判断用户是否登录乐成后才气举行购物车操作,那你可以给它取名叫 “购物车的登录门禁”。
注释呢,就像是给它写个小传记,简单阐明一下它的作用。好比 “这个 If Controller 负责把关,只有效户登录乐成,才让购物车操作的请求通过哦”。这样,不但你自己清晰,以后其他小伙伴看你的测试筹划,也能马上明白。
(二)条件表达式 —— 核心魔法咒语
这可是 If Controller 最厉害的地方,就像一个魔法咒语,决定着测试流程的走向。
- 简单咒语示例:
- 假设我们有一个变量${isLoggedIn},当用户登录乐成后,这个变量的值会变成 “true”。那我们在条件表达式里写上${isLoggedIn} == "true",就像对 If Controller 说:“嘿,如果用户登录了,就实验下面的操作吧。”
- 再好比,用${__groovy(2 > 1)}这个咒语,这是在考验 If Controller 的数学知识,当然 2 大于 1 是常识啦,所以这个条件总是成立,适合在一些简单的测试场景中用来确保某个操作一定会实验,就像一个保底的小魔法。
- 复杂咒语组合技巧:
- 在一个社交媒体平台的测试中,我们可能有变量${userHasFriends}表示用户是否有挚友,${userIsActive}表示用户是否活泼。那我们可以写一个复杂一点的咒语:${__groovy(${userHasFriends} == "true" && ${userIsActive} == "true")}。这就像是告诉 If Controller:“只有当用户既有挚友,又很活泼的时间,才实验特定的操作,好比推荐热门话题。” 这里的 “&&” 就像一个连接两个条件的魔法胶水,只有两边的条件都满足,整个咒语才收效。
- 另有一种环境,好比在一个在线游戏的测试中,我们想判断用户是不是 VIP 大概是不是到达了一定的品级,就可以用 “||”(或)这个魔法符号,像这样:${__groovy(${userIsVIP} == "true" || ${userLevel} > 10)}。这意味着只要用户是 VIP 大概品级大于 10,就能享受到一些特别报酬,好比进入隐藏关卡,If Controller 就会实验相应的操作。
- 多层嵌套魔法阵:
- 想象一下在一个大型在线学习平台的测试中,我们要根据不同的课程类型、用户的学习进度和是否付费来决定给用户展示什么样的学习资源。我们可以构建这样一个多层嵌套的魔法阵:${__groovy(((${courseType} == "Science" && ${userProgress} > 50) || (${courseType} == "Art" && ${userIsPaid} == "true")))}。这就像是一个复杂的迷宫,If Controller 要根据这些条件找到正确的路径,只有满足此中一组嵌套条件,才会实验如推荐高级课程、解锁额外学习资料等操作。是不是很神奇呢?
- 调试魔法咒语的小法门:
- 当我们写了一个复杂的魔法咒语,有时间可能会出现意想不到的环境,这时间就需要调试啦。我们可以请出 “调试采样器” 这个小助手。在测试筹划里,在线程组下右键点击 - > 添加 - > 取样器 - > 调试取样器,然后运行测试。之后在 “查察效果树” 中,我们就能看到调试信息,就像拿到了魔法咒语的剖析阐明书,里面会显示条件表达式中各个变量的值以及整个表达式的求值效果。好比说,如果我们在上面的社交媒体平台测试中,发现推荐热门话题的操作没有按照预期实验,通过调试采样器,我们可能会发现原来是${userHasFriends}变量的值获取错了,大概是逻辑运算符用得不对,这样就能快速修复题目,让魔法咒语重新收效。
- 记住哦,条件表达式一定要写得正确无误,不然 If Controller 可就会 “晕头转向”,不知道该怎么实验了,就像你给一个呆板人下达了混乱的指令,它就没办法正常工作啦。
(三)性能相关的魔法选项
- 神奇的警告提示:
- 你会看到一个像聪明老人的警告提示:“For performance it is advised to check ‘Interpret Condition as Variable Expression’ and use __jexl3 or __groovy evaluating to true or false or a variable that contains true or false.” 这就像是在你踏上性能优化的冒险之旅前,一位经验丰富的导师给你的宝贵建议。如果你按照它说的做,在高并发大概大规模负载测试的魔法天下里,你的测试就能跑得更顺畅,就像给你的测试马车装上了飞速的魔法轮子,制止陷入性能的泥沼。
- 把条件解释为变量表达式 —— 隐藏的性能宝藏:
- 当你勾选 “Interpret Condition as Variable Expression” 这个选项时,JMeter 就会变得更加聪明。好比说,你在一个在线音乐平台的测试中,有一个条件表达式${isPremiumUser},如果这个变量存在并且值为 “true”(代表用户是高级会员),If Controller 就会知道要实验给高级会员的专属操作,好比提供无损音乐下载。
- 背后的魔法原理:
- 当 JMeter 遇到这个勾选的选项时,它会像一个敏锐的侦探,在变量的天下里探求条件表达式的值对应的变量。如果找到了,并且这个变量的值符合 JMeter 对于真假的判断尺度(非空字符串、非零数字等被视为真,空字符串、零等被视为假),那么条件表达式的效果就确定了。这种方式在处置惩罚大量变量和复杂条件时,就像找到了一条捷径,镌汰了不须要的计算,让测试跑得更快,特别是在高并发的场景下,就像一群飞鸟,能够更高效地穿越云层,到达目的地。
- 什么时间开启这个宝藏:
- 在高并发测试场景中,如果你的条件表达式依赖于很多变量,好比在一个拥有海量用户的在线视频平台测试中,要根据用户的各种属性(如会员品级、观看历史、偏好设置等)来决定推荐不同的视频内容,这时间启用这个选项,就能大大提拔性能,让你的测试如鱼得水,轻松应对高负载的挑衅。
- 对所有子节点求值 —— 双刃剑魔法:
- 当你勾选 “Evaluate for all children” 这个选项时,就像是给每个子节点都赋予了一个独立的小魔法,它们都会根据条件表达式来决定自己是否要举措。
- 好比在一个企业级的办公自动化体系测试中,If Controller 下面有多个子节点,分别代表不同部分的文档审批流程。如果勾选了这个选项,每个部分的审批流程都会根据自己的条件(如文档类型、审批人权限等)来判断是否实验,就像每个部分都有自己的小裁判,根据规则决定是否到场这场审批的 “角逐”。
- 性能影响的魔法权衡:
- 但是要注意哦,当有很多子节点并且条件表达式很复杂的时间,这把双刃剑就可能会消耗更多的魔法能量(性能),由于每个子节点都要独立地对条件表达式举行求值。不外在某些环境下,这种消耗是值得的。好比在一个需要对不同用户组举行风雅化测试的场景中,每个子节点代表不同用户组的特定操作,这时间对每个子节点单独求值可以确保每个用户组的操作都能根据自己的条件正确实验,固然会消耗更多的性能,但能保证测试的正确性和完整性,就像为了打造一件完美的魔法神器,需要花费更多的时间和精神。相反,如果子节点的操作比较相似,条件表达式也简单,不勾选这个选项可能会让你的测试更高效,就像选择了一条更平坦的道路,镌汰不须要的魔法消耗,制止陷入性能瓶颈的黑暗森林。
(四)使用上次采样的状态 —— 巧妙的魔法联动
- 配置方法的小魔法:
- 有一个 “Use status of last sample” 复选框和一个神奇的变量${JMeterThread.last_sample_ok}。好比说在一个网页表单提交体系的测试中,如果勾选这个复选框,If Controller 就会根据上次表单提交的采样效果(是否乐成)来决定下一步的操作。
- 假设上次表单提交乐成(返回状态码在 200 - 299 之间),那么${JMeterThread.last_sample_ok}变量的值就会变成 “true”,这时间 If Controller 就会实验如显示提交乐成提示、跳转到下一个页面等后续操作,就像一个默契的接力赛,前一个操作的效果通报给了 If Controller,决定了下一步的走向。
- 结合其他条件表达式的魔法组合:
- 在一个在线论坛的测试中,我们希望只有当上一个帖子发布请求乐成并且用户的账号状态为 “正常” 时,才实验推荐相关热门帖子的后续请求。我们可以使用这样的魔法组合:${JMeterThread.last_sample_ok} && ${userAccountStatus} == "normal"。这就像是给 If Controller 戴上了两副眼镜,只有通过这两个条件的 “视力测试”,它才会实验推荐热门帖子的操作,让测试更加贴近真实的用户场景,就像一个经验丰富的魔法师,根据多种因向来施展魔法,而不是只看单一的条件。
四、添加子节点 —— 组建你的魔法表演团队
在 If Controller 下面,我们可以添加各种需要根据条件实验的元件,就像为我们的魔法表演招募不同的演员。好比右键点击 If Controller - > 添加 - > Sampler - > HTTP 请求,这就像是约请了一个擅长发送 HTTP 请求的小精灵到场我们的团队。
然后,我们要给这个小精灵配置好任务,也就是配置 HTTP 请求的 URL、方法、参数等信息。好比说在测试一个在线旅游预订网站时,我们可以配置请求的 URL 为查询特定旅游线路详情的接口地址,方法为 GET,参数包罗出发地、目的地、出行日期等,这样当 If Controller 的条件满足时,这个小精灵就会出发去获取旅游线路的详细信息,就像派一个小信使去远方带回珍贵的情报,来检查在满足特定条件(如用户已登录、搜索条件有效等)时,网站是否能够正确提供旅游线路的详细信息,确保网站的核心功能在各种条件下都能正常运行,为用户提供正确、及时的服务。
五、设置变量值 —— 准备魔法质料
- 在线程组下,右键点击 - > 添加 - > 配置元件 - > 用户定义的变量,这就像是打开了一个装满魔法质料的宝箱,我们可以在这里定义各种变量。
- 好比在测试一个智能家居控制体系时,如果条件表达式中有 “${roomTemperature}”,我们可以在 “用户定义的变量” 中添加这个变量,并设置其值为 “25”(假设当前测试环境模拟的房间温度为 25 摄氏度),这些变量就像魔法质料,将在后续的条件判断中发挥紧张作用,决定着 If Controller 的举动,就像不同的魔法质料混淆在一起,会产生不同的魔法效果。
- 使用 BeanShell 或 JSR223 处置惩罚复杂魔法逻辑示例:
- 有时间,我们需要更强大的魔法来处置惩罚复杂的变量逻辑。在 JMeter 中,BeanShell 或 JSR223 元件就是我们的魔法工具。例如,在测试一个股票生意业务体系时,假设我们要根据前一个请求获取的股票代价和用户设定的买入代价来动态设置一个变量 “${shouldBuy}”,以决定是否实验买入操作。我们可以在 BeanShell Sampler 中编写如下神奇的代码:
- double stockPrice = Double.parseDouble(vars.get("stock_price")); // 从 JMeter 的魔法变量域中获取前一个请求中存储的股票价格变量
- double buyPrice = Double.parseDouble(vars.get("user_buy_price")); // 获取用户设定的买入价格变量
- if (stockPrice <= buyPrice) {
- vars.put("shouldBuy", "true");
- } else {
- vars.put("shouldBuy", "false");
- }
复制代码
- 这段代码就像一个聪明的小精灵助手,它起首从 JMeter 的变量域中找到股票代价和用户买入代价变量,然后像一个精明的贩子一样举行比较,如果股票代价小于即是买入代价,就把 “shouldBuy” 变量设置为 “true”,否则设置为 “false”。这样,在后续的 If Controller 条件表达式中,就可以根据 “${shouldBuy}” 的值来决定是否实验买入股票的 HTTP 请求,就像根据市场行情和自己的预算来决定是否购买商品一样,实现了复杂业务逻辑下的变量动态设置和条件判断,让我们的测试更加智能和机动。
- 变量作用域的魔法边界:
- JMeter 中的变量有不同的作用域,就像魔法天下里有不同的领地。全局变量就像是一个公共的魔法广场,在整个测试筹划中都能被访问和使用,所有的元件都可以在这里找到需要的变量信息。而局部变量则像是一个小小的魔法房间,通常只在特定的元件或范围内有效。例如,在一个包含多个线程组的测试筹划中,如果在一个线程组中通过 “用户定义的变量” 元件设置了一个全局变量 “${globalVariable}”,那么在其他线程组中也可以像在公共广场上一样访问和使用这个变量。然而,如果在一个 BeanShell Sampler 中定义了一个局部变量,如上述股票生意业务体系示例中的 “stockPrice” 和 “buyPrice” 变量,它们就只能在这个 BeanShell Sampler 的小魔法房间里运动,无法在其他元件中直接访问,就像房间里的机密物品,只有在这个房间里才气使用。在使用 If Controller 举行条件判断时,我们要时刻注意变量的作用域,就像在魔法天下里要清晰每个领地的规则,确保使用的变量值是正确的,并且符合预期的作用域范围。如果不警惕使用了错误作用域的变量,就可能会导致条件判断出错,就像在错误的领地使用了不符合的魔法物品,会引发意想不到的效果,从而影响测试效果的正确性,让我们的测试陷入混乱的魔法漩涡。
六、运行测试 —— 开启魔法之旅
当我们把 If Controller 和它的小伙伴们(各种测试元件和变量)都配置好后,就可以点击 JMeter 界面上的 “启动” 按钮(那个绿色的三角形图标,就像一个开启魔法大门的钥匙),让整个测试筹划开始运行。这时间,If Controller 就会像一个严格的魔法指挥官,根据我们设定的条件表达式效果,决定哪些子节点元件要实验,哪些要跳过,就像指挥一场精彩的魔法交响乐,每个乐器(测试元件)都在符合的机遇奏响,共同演绎出完美的测试乐章,正确地模拟各种实际使用场景下体系的举动,让我们能够发现体系中可能存在的题目,就像在魔法天下里找出隐藏的魔法陷阱,确保体系的稳固性和可靠性。
七、查察效果 —— 解读魔法的机密语言
- 为了了解我们的魔法测试举行得怎么样,我们可以添加 “查察效果树” 监听器(右键点击线程组 - > 添加 - > 监听器 - > 查察效果树),这就像是打开了一本记录魔法测试过程的魔法书,里面详细记载了测试过程中的各种信息。
- 在 “查察效果树” 中,我们可以清晰地看到 If Controller 的实验环境以及它的子节点的实验效果。如果条件满足并且 HTTP 请求乐成,我们会看到像宝藏一样的请求和相应信息,包罗请求的 URL、返回的状态码、相应数据等,这些信息就像魔法咒语的反馈,告诉我们魔法是否收效,体系是否按照我们的预期工作。如果条件不满足,我们会看到 If Controller 像一个谨慎的卫士一样跳过某些操作的记录,这也能帮助我们快速定位测试过程中的题目,就像根据魔法书上的线索找到魔法失败的缘故原由,验证测试是否按照我们设定的条件和流程举行,确保测试的正确性和可靠性,让我们的测试之旅更加顺利和有成效。
- 再次回顾调试魔法咒语的小法门:
- 当我们在测试过程中遇到题目,好比某个条件表达式没有按照预期工作,导致测试效果不符合我们的期望时,不要慌张。我们可以再次请出 “调试采样器” 这个得力小助手。通过它,我们可以像解开魔法谜题一样,查察条件表达式中各个变量的实际值以及整个表达式的求值过程,就像找到魔法阵的关键节点。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |