内部测试人员 在接收到该概念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使用原则.


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