背景

校验零碎的正确性和可靠性时,仅靠用例场景无奈笼罩全生产环境下的所有场景,须要一套引流工具,在零碎正式上线前用线上的申请测试待上线零碎,在失常申请下理解是否有报错、在数倍申请下理解零碎的性能瓶颈。罕用的引流工具有GoReplay、tcpcopy等。

猪齿鱼效力平台自动化测试模块流量回归测试性能,次要应用GoReplay录制产品界面中的操作产生的HTTP申请及响应用于生成流量文件,而后将其导入Choerodon平台生成用例进行治理与执行。本文通过GoReplay的介绍及GoReplay在猪齿鱼效力平台中的实际,帮忙大家了解猪齿鱼流量回归测试的概念及应用。

对于GoReplay

GoReplay,原名叫gor,因为其易上手,且性能比拟全所以咱们应用GoReplay进行流量录制。GoReplay是在投入生产之前应用实在流量测试应用程序最简略和最平安的形式。

随着应用程序的增长,测试所需的工作量也呈指数增长。GoReplay提供了重复使用现有流量进行测试的简略想法,这使得它十分弱小。能够剖析和记录应用程序流量,且不影响利用,打消了将第三方组件置于要害门路中带来的危险。

GoReplay的工作原理框图:

GoReplay的装置

  1. 下载地址:https://github.com/buger/goreplay/releases
  2. 在环境中输出指令:

--wget https://github.com/buger/goreplay/releases/download/v1.1.0/gor_1.1.0_x64.tar.gz

这样咱们就能获取到gor_1.1.0_x64.tar.gz压缩文件,。

  1. 而后对其解压输出指令:

--tar vxf gor_1.1.0_x64.tar.gz

文件解压过分咱们失去了一个gor文件;咱们将gor文件挪动到path环境下,这样咱们就能够应用gor命令进行流量录制了。

GoReplay的根本指令

  • --input-raw- 用于捕捉HTTP流量,您应该指定IP地址或接口和应用程序端口。
  • --input-file- 承受之前应用的文件--output-file
  • --input-tcp- 如果您决定将来自多个转发器GoReplay实例的流量转发给它,则由GoReplay聚合实例应用。

可用输入:

  • --output-http- 重放HTTP流量到给定的端点,承受根底URL。
  • --output-file- 记录传入的流量到文件。
  • --output-tcp- 将传入数据转发给另一个GoReplay实例。
  • --output-stdout- 用于调试,输入所有数据到stdout。

GoReplay在猪齿鱼效力平台中的实际

1.录制流量

1.1 首先咱们先在服务器中装置Gor_1.1.0;

1.2 而后输出命令以下命令:

sudo nohup gor --input-raw :8080 \ # 监听服务的端口(默认网关的端口为8080) -http-allow-method GET \ # 只录制GET,POST,PUT,DELETE四种办法的申请 -http-allow-method POST\
-http-allow-method PUT\
-http-allow-method DELETE\
-input-raw-track-response \ # 捕捉响应报文 -input-raw-timestamp-type PCAP_TSTAMP_HOST \ # 指定工夫戳格局 -input-raw-buffer-size 32mb \ # 管制用于持有TCP包的零碎缓存大小 -prettify-http \ # 主动解码 Content-Encoding:gzip 和 Transfer-Encoding:chunked的申请和响应 -output-file-append \ # 追加到文件,使得最终只生成一个.gor文件 -output-file requests.gor & # 指定后果文件名称。

这些命令的含意是监听服务的端口并开始录制指定的申请类型的申请,例如这里录制的申请类型是:GET,PSOT,PUT和DELETE。捕捉响应报文并把这些申请追加到文件,像这里生成的文件名叫“requests.gor”。

1.3 在命令执行后,输入如下:

这里显示的【1】19436是GoReplay程序的过程PID,在咱们录制实现后能够利用此PID进行终止GoReplay。

1.4 这时GoReplay曾经开始进行流量录制了,此时测试人员能够开始在被测系统进行测试,此段时间的测试收回的申请会被录制。

测试人员在正式录制相干的性能之前,倡议刷新页面以申请 self 接口获取以后用户信息,这个接口的响应便于之后导入流量文件时解析用例,如果既没有录制到 self 接口,也没有在导入时提供用户信息获取接口,则无奈解析申请所属用户、申请生成的用例也将被疏忽。

1.5 在录制一段时间的流量后,咱们执行以下命令终止GoReplay的录制输出一下命令:

sudo kill -15 ${gor`过程PID}`

像咱们这里的输出sudo kill -15 ${19436}命令就能够终止gor过程。

1.6 此时,能够看到执行录制指令的目录下,失去一份文件名为 requests.gor 的流量文件。到此,录制结束。

2.导入流量文件

2.1 咱们进入猪齿鱼流量回归测试页面:

2.2 点击流量回归测试右上方的导入流量文件,进入流量导入界面:

2.3抉择用于搁置生成用例的目录,咱们这里抉择的是测试合集目录,点击上传按钮,上传咱们方才录制的requests.gor文件,确定上传文件后,下方会立即生成一条文件的导入记录。

如果导入用例为0条,可能有以下起因: ①__录制期间,被测系统未敞开主键加密性能; ②__录制期间,未申请 self 接口获取用户信息,且导入时未提供用户信息获取接口; ③__提供用户信息获取接口,然而录制的流量文件工夫过长,超过了用户的 Token 过期工夫,导致流量文件中波及到的申请的认证信息曾经过期了,无奈辨认用户,所以无奈生成用例; ④__所有的申请都不是 json 类型的申请 ⑤__所有的申请的办法都不是 GET、POST、PUT或DELETE。

2.4 待文件导入胜利后,所选的目录下将会生成对应的用例。列表中会展现各个用例对应的门路、申请形式、菜单、用户以及申请工夫。

  • 门路:即用例中申请的门路。
  • 申请形式:即用例中申请的申请形式。
  • 菜单:即用例中对应申请所属的菜单。
  • 用户:即在录制过程中,执行此次申请的用户名。
  • 申请工夫:即录制过程中,该申请对应的执行工夫。

3.用例批量解决

3.1 因为咱们通过导入流量文件失去的用例内,各个申请应用的ID参数在之后的执行过程中会产生变动。因而咱们须要通过用例批量解决的性能将用例内各个申请门路、申请参数、申请体中的ID参数替换为变量。

在此之前,咱们还须要抉择一个POST类型的申请,将其响应体中生成的ID作为变量提取进去,以供后续的用例进行援用。

首先在页面左侧的树结构内选中一个流量回归汇合,而后点击顶部的用例批量解决按钮,右侧会呈现批量解决的页面。

3.2应用搜寻栏进行用例筛选,反对的搜寻形式有:

  • 输出搜寻条件查问:可搜寻任意内容,下方的列表中将会显示出门路、申请与响应中含有搜寻值的对利用例。
  • 疾速筛选:预置的疾速筛选为含数值用例,可间接搜寻出门路、申请与响应中含有数值的所有用例,用于帮忙进一步放大ID查问范畴。同时,保留的自定义筛选条件也将寄存到疾速筛选的下拉框中。
  • 申请形式筛选:容许筛出GET、POST、PUT与DELETE类型的用例申请。
  • 用例状态筛选:反对筛选出解决实现未解决状态的用例申请。
  • 正则筛选:反对应用正则表达式来筛选出满足条件的用例申请。
  • 目录筛选:反对筛选出各个目录下的用例申请。
  • 菜单筛选:反对筛选出对应菜单下的用例申请。
  • 具体字段:用于指定搜寻值的定位失效区域。反对定位到:门路、申请头、申请参数、申请体、响应头与响应体。

3.3提取页面中的变量,在此界面中,须要将生成ID的用例申请找到,并将其响应体中的ID参数作为变量提取进去。具体步骤如下:

  1. 通过搜寻栏中的各个选项定位到指标用例。
  2. 此处的个别步骤为: - 在疾速筛选的搜寻栏中抉择含数值用例,先筛出所有含有数值的用例。 - 在具体字段中,抉择为:POST,以筛出指标用例。 - 抉择想要解决的功能块所在的菜单,或在搜寻条件中输出相干内容,来进一步放大搜寻的范畴。 - 最初,在筛出的用例申请中逐个找出指标用例。
  3. 勾选出一个指标用例,点击下方的增加变量提取的按钮,右侧会弹出变量提取的界面。
  4. 抉择提取的起源:个别为响应体JSON,此处需依据提取的指标变量的地位与格局而定;反对选择响应体JSON、响应体XML、响应体文本与响应头。
  5. 输出变量名称:此处输出的变量名称,会作为后续用例援用的变量。
  6. 选择器:需通过选择器定位到提取的变量所在的地位。

变量提取胜利后,还须要对申请中应用了ID参数的用例进行批量的ID替换,将其替换为提取出的变量。应用此性能,能够批量地将能够配置的参数提取为变量,例如提取申请中常见的我的项目ID、租户ID或者其它的资源ID。

  • 值替换性能:

    • 抉择替换区域:反对抉择门路、申请参数、申请头、申请体、响应头、响应体;用于定位所有选中的用例须要进行替换的具体区域。
    • 输出源值:即之前的ID参数的精确值。后续会将这个ID数值替换为曾经提取出的变量。
    • 输出替换值:在此输出须要援用的变量即可。

例:之前提取出的变量名称为id,此处就输出:${id}

  • 用例状态替换:间接在下拉框中抉择须要将所选的用例申请变为的指标状态;对于曾经解决实现的用例申请,间接批量将其置为解决实现的状态即可。回到列表之后,这些用例的状态就变为了解决实现

总结

猪齿鱼全场景效力平台流量回归测试通过GoReplay批量录制产品界面操作,并将失去的用例进行集中管理,便于后续进行批量的回归测试,从很大水平上加重了测试人员编写脚本、收集测试数据等反复且耗时的工作,晋升团队的测试效力。

参考资料

https://www.cnblogs.com/sunsky303/p/9072871.html

https://blog.csdn.net/xqtesting/article/details/109722583


本文由猪齿鱼技术团队原创,转载请注明出处:猪齿鱼官网

对于猪齿鱼

猪齿鱼Choerodon全场景效力平台,提供体系化方法论和合作、测试、DevOps及容器工具,帮忙企业拉通需要、设计、开发、部署、测试和经营流程,一站式进步管理效率和品质。从团队协同到DevOps工具链、从平台工具到体系化方法论,猪齿鱼全面满足协同治理与工程效率需要,贯通端到端全流程,助力团队效力更快更强更稳固。戳此处试用猪齿鱼