内部测试人员 在接收到该概念JMeter - 如何创建可重用和模块化的测试脚本后 ,尝试用这个四个概念做模块化组装,遇到了问题.

该人员书写思路是 创建了 A.jmx B.jmx 这两个 jmx 分别有自己的一套自定义变量和函数.如下图红框内的即为该 modleinclude.jmx 的公共使用的相关.见下图

当写第三个 C.jmx 的时候, 使用 以上概念的做模块化组装的时候,导致 A 和 B 都自有的上述 自定义变量和函数, 无法公共为 C.jmx 会冲突,见官方解释
官方说包含控制器不支持有自己的变量和函数
https://jmeter.apache.org/usermanual/component_reference.html#Include_Controller

This element does not support variables/functions in the filename field.

实际参考 我们用 www.typing.com 登录和打开 lessons 网页 tests 网页试验.
正确的组装使用好这几个概念做模块化组装的步骤是, 在一个 Testplan.jmx 下, 去分拆线程组. 去 save as Test Fragment ...
如下图所示,Test 事务控制器, Open_lessons 网页, Open_tests 网页 ,Open_Games 网页 (后续编辑去掉了该 http 采样器请求)
原始通过 blazemeter chrome BlazeMeter-- Jmeter 与 Selenium 录制编辑回放 chrome 插件工具录制插件捕获下来的如下:
我们看到插件将 打开登录页 ,输入用户名, 输入密码登录 , 打开 lessons ,打开 tests ,打开 games 都自动的放到了 Transaction Controller 自动命名为 Test 的事务控制器下.

blazemeter 录制插件还将统一访问的域名创建了自定义变量,可以说是非常强大了.

然后我们想重用和模块化 login 功能, 将登录的三个相关请求:
1、打开登录页 Open_loginPage
2、输入用户名 Type_login-username
3、输入密码登录 Type_login-pw
丢到 login 事务控制器下, 然后新建 Test Fragment, 再将 Login 登录事务控制器丢进去. 然后右键选中 Test Fragment , 选择 save as Test Fragment , 取名为 typingLogin.jmx 保存到本地目录下.
然后在线程组 ThreadGroup 下 新加 Include Controller , filename 选择 typingLogin.jmx
然后在线程组 ThreadGroup 下 新加 Simple Controller 再将 http 请求采样器 Open_lessons 网页 和 Open_tests 网页 拖拽进去.

最终就达到了这一封装和重用 login 的目的.

最终查看结果树 View Results Tree 效果就会有一次 login 事务, 然后 分别打开 lessons 网页和 tests 网页. 符合真实用户的操作行为.

最终总结为,创建一个 Testplan.jmx , 再在该 jmx 下, 去组装测试片段 Test Fragment 和重构新线程组用 Include Controller 来引用 Test Fragment.
这样一个 jmx 下的 不同线程组 都是公用的一套变量和函数 ,而不要 单独分别创建 A.jmx B.jmx 再在第三个 C.jmx 中去引用 A 和 B , 。
如果 A 和 B 分别有自定义变量和函数的话,这样导致创建第三个 C.jmx 想使用 Include Controller 的时候违法了 jmeter Include Controller 使用原则.


↙↙↙阅读原文可查看相关链接,并与作者交流