专栏文章 JMeter - 用好测试片段 Test Fragment 创建可重用和模块化的测试脚本

老马 · 2019年03月14日 · 最后由 锤锤 回复于 2020年12月01日 · 4862 次阅读

我们假设您有一个交易场景的业务流程:

  • Launch Home Page
  • User Sign-up
  • User Verification/Activation
  • User Login
  • Go To Search Page
  • Search a Product
  • View full detail of a product
  • Product - Add to cart
  • Fill Order form
  • Fill payment details
  • Place Order
  • Update Order
  • Re-submit Order
  • Rate the product

    您需要为上述交易流程准备一个 JMeter 脚本. 你有大概两天的时间来完成这个交易场景的 JMeter 脚本。但是一件好事是你有 3 个测试团队成员,他们可以帮助你在规定时间表内完成该 j 交易场景测试任务。

    我们将如何分配工作和管理该脚本测试计划呢?

    解决方案是综合运用测试片段 Test Fragment , 包括控制器 Include Controller ,模块控制器 Module Controller ,事务控制器 Transaction Controller。默认情况下,JMeter 脚本比较复杂!但是有一些很好的解决方案可以帮助你。JMeter 提供了这些扩展属性元素和控制器,以最小化脚本中的代码量,并通过将流拆分为小片段 ,小模块, 小事务使它们更容易维护。

    如果需要一个以上的测试人员同时在不同的模块上进行脚本开发工作,并且这些模块可以合并到一个脚本测试计划中,那么以上概念是一个有效的解决方案。

    在上面的示例中,如果您将交易场景业务流划分为小模块,并将每个模块分配给 3 个测试团队成员,如我们分为了三个 User Sign-up/Login module 户注册/登录模块、Place Order Module 下订单模块和 Update Order Module 更新订单模块,那么您可以在给定的时间线内完成脚本开发任务。

    如下分配:

  • User Sign-up/Login module 户注册/登录模块:
    1a. Launch Home Page
    1b. User Sign-up
    1c. User Verification/Activation
    1d. User Login

  • Place Order Module 下订单模块:
    2a. Go To Search Page
    2b. Search a Product
    2c. View full detail of a product
    2d. Product - Add to cart
    2e. Fill Order form
    2f. Fill payment details
    2g. Place Order

  • Update Order Module 更新订单模块:
    3a. Update Order
    3b. Re-submit Order
    3c. Rate the product

现在的问题是如何创建 “测试片段” 元素?
创建测试片段步骤如下:
1 选中 “Test Plan” 右键
2 右键菜单中选择 “Add’
3 继续右键菜单中移至 “Test Fragment” 选择添加即可

然后,在拆分好的三个测试片段内部,每个测试人员可以通过添加单独的逻辑控制器、配置元素、csv 文件、计时器、采样器等来创建每个特定模块所需的接口操作流程,并分别保存为 3 个测试计划。如这三个测试计划为:

  • signup-login.jmx
  • place-order.jmx
  • update-order.jmx

    做好独立的三个小模块场景的测试计划脚本后,这时候我们来创建第四个脚本作为串联 3 个小模块场景的 main 主测试计划脚本(比如保存为 main.jmx 的主脚本),以及名为 “include controller” 的逻辑控制器。必须为每个模块命名.jmx 文件。对于我们的示例,我们使用的是 “signup-login.jmx”、“place-order.jmx” 和 “update-order.jmx”。这些子模块将在主脚本中运行,在 “查看结果树” 选项卡下可以看到执行的操作。为了分割用户流和负载测试流,可以在测试中添加和合并模块。请参阅下面的.gif 以了解更多有关示例的信息:

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 4 条回复 时间 点赞

有个问题,实现 place-order.jmx、update-order.jmx 这两个模块时,token、cookie、session 或用户的信息从哪里获取的

csx 回复

https://testerhome.com/articles/18485
看这篇,你就明白了。

csx 回复

用好 jmter 的这几个概念 就可以做到 分层 分类 各层之间耦合度低

我们内部 约定了个 用 Jmter 的目录规范 主要就是 步骤 用例 和 场景

按照此约定 该去哪层写的去哪层写 核心和基线是 step 和 case 层 场景只是做调度和组装 。

步骤 step 是最原子性的
步骤层举例

Tips:1、步骤层里面互不依赖,如果模块很多可根据模块名创建文件夹来分类保存。

2、步骤层的测试计划命名为步骤,通过 Test Fragment 这样的测试片段来进行包含。(建议 Test Fragment 名称和整个步骤的 jmx 文件名称保持一致,方便查询)。

3、步骤层根据具体业务需求来切分,可以是单独一个 sampler 或者多个 sampler 组合,而且一般会使用事物控制器包含。(如果 sampler 里面的变量需要传递使用 vars.get 方法获取,里面有变量需要提取也是同步进行)。

4、为了接口测试严谨性,一般步骤层,会跟随 sampler 绑定这个接口的必填参数测试的简单控制器,方便阅读。(必填参数测试:缺失必填参数后,接口返回值是否正确)。

用例层举例

Tips:1、用例层里面只调用步骤层来进行组装,不添加任何 sampler。

2、用例层一般会使用 Parameterized Controller 插件来对步骤层进行参数传递,一般需要和步骤层绑定。如果需要再获取上级参数传递可写为变量

3、用例是独立存在的,用事物控制器进行包含,由于 JMeter 本身的特性,需要在场景层中组合的话,也只能存放为 Test Fragment 给与调用。

4、用例名称中,事物控制器,测试片段,jmx 文件名称尽量保持一致,方便查找。

场景层举例

Tips:1、场景层是由线程组通过 Include Controller 调用 Test Fragment 的测试用例来直接运行的 jmx 文件,也是最后输出的报告展示结果。

2、所有用例都需要使用的变量可以在场景层存放,比如用户账户数据,数据账户密码,APPID,AppSecret 等,如果不需要在场景层使用可以在用例层进行传值覆盖。

3、场景层中的用例没有依赖关系,可以顺序或者乱序组合,互不干扰。

很棒 解决了我现在的问题,但是想问楼主一下,我的每个接口请求头都不一样的情况下应该怎么办?每个请求下面都添加一个头管理器么?有什么办法简化下呢? 请大佬解答下 谢谢你

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册