全部产品

压测场景的结构和数据分配

更新时间:2019-05-08 19:09:03

本文主要通过图例介绍常见的压测场景内的逻辑结构关系,并说明数据在压测中是如何分配的。

基本概念

  • 压测 API:指由用户行为触发的一条端上请求,是压测中的必需元素。
  • 串联链路:指一组压测 API 的有序集合(类似于事务),具有业务含义。
  • 数据导出指令:用于导出某个串联链路中的数据(导出 Cookie 为典型应用),供其他串联链路使用,实现导出数据的全局共享。
  • 关联数据文件:压测 API使用了来自数据文件的参数,从而关联了相应的数据文件。如果使用了多个文件参数分别来自于不同数据文件则表示关联了多个数据文件。
  • 断言:一般用于标记业务成功与否,从而验证压测请求的响应是否符合预期。
  • 数据轮询一次:在请求中使用文件参数时,数据文件只轮询一次,以保证请求信息不重复。
  • 出参:在创建串联链路时,将前置接口的部分返回信息作为参数。

常见的压测场景结构和数据分配规则

具体请参考下图:

逻辑结构1

图例说明如下:

  • 串联链路1 和 串联链路2 是并行关系。

  • 串联链路类似于一个事务,串联链路内的所有压测 API,严格遵循先后顺序。当前 API 的请求发起依赖前置 API 的请求处理完成或者超时异常。

    注意:后面的 API 最终发送的请求次数会少于前面 API 的,因为压测停止的时候总有一些请求还在串联链路的中间环节(API)上没有全部完成。

  • 串联链路内,如果不同的压测 API 使用了不同行数的 CSV 文件里的参数,在实际压测时是各自轮询各自的数据文件的。

    • 串联链路1 中 API1 使用了 200 行的数据文件,API2 使用了 1000 行的数据文件,API1 和 API2 压测时分别轮询各自的数据文件。
    • 一般情况下,压测期间各压测 API 循环使用各自的关联文件数据。如果压测 API 勾选了数据只轮询一次,使用完由关联文件数据构造的请求数之后,将不再压测该 API,当前串联链路也将整体停止压测。
  • 串联链路内,如果同一个压测 API 使用了不同数据文件里的参数,且各文件的行数不同,默认将以行数最少的文件作为基准文件,其他文件会被随机丢弃多余的行数。

  • 设置了断言的情况下,如果当前请求断言失败,那么后置的 API 或者指令将不再执行,断言成功的没有影响。

依赖登录的压测场景结构

下图中串联链路1 的 API1 是登录业务相关接口,其典型配置如下:

逻辑结构2

图例说明如下:

  • 数据导出指令一般应用于登录之后需要并行压测多个不同业务串联链路的情况,支持标准的 Cookie 导出或者是业务自定义的出参导出。
  • 串联链路1 使用了数据导出指令,数据导出完成后其他串联链路才能开始压测,所以与其他串联链路不是并行的关系。

    说明:只有使用了数据导出指令,才会出现串联链路之间不是全都并行的情况。

  • 为保证用户登录信息不重复,需设置压测 API 数据只轮询一次。串联链路1 中 API1 设置了数据只轮询一次。

  • 一批用户登录完成后,将用户登录信息共享给场景内其他业务的串联链路使用,需设置数据导出的准备量级。达到该量级才会触发场景内剩余串联链路进行压测(它们彼此间还是并行的,数据分配逻辑和上面所述一致)。

  • 准备量级需要小于等于登录接口的文件行数。如图所示,关联数据文件为 200 行,导出量级设置为 100。

    注意:由于目前任务是拆分给施压agent单独执行的,故可能出现准备量级并没有达到设定值便有其他串联链路开始压测的情况。