00-1010在验证系统的正确性和可靠性时,仅有用例场景无法覆盖整个生产环境中的所有场景,需要一个引流工具。在系统正式上线前,会对即将上线的系统进行在线请求测试,了解正常请求下是否存在错误,以及系统在多次请求下的性能瓶颈。常用的引流工具有GoReplay、tcpcopy等。
猪牙鱼效率平台自动化测试模块的流程回归测试功能,主要使用GoReplay记录产品界面中操作产生的HTTP请求和响应生成流程文件,然后导入到Choerodon平台生成用例进行管理和执行。本文通过对GoReplay的介绍和GoReplay在狗牙根效率平台的实践,帮助大家了解狗牙根流量回归测试的概念和应用。
随着应用程序的增长,测试所需的工作量呈指数级增长。GoReplay提供了重用现有流量进行测试的简单思想,这使得它非常强大。可以在不影响应用程序的情况下分析和记录应用程序流量,消除了将第三方组件置于关键路径中的风险。
GoReplay工作原理框图
00-1010 1.下载地址:https://github.com/buger/goreplay/releases
2.在环境中输入指令:
-wget https://github.com/buger/gore play/releases/download/v 1 . 1 . 0/gor _ 1 . 1 . 0 _ x64 . tar . gz
这样,我们就可以得到x64.tar.gz GOR 1 . 1 . 0的压缩文件。
3.然后解压输入指令:
- tar vxf gor_1.1.0_x64.tar.gz
在文件被过度解压缩后,我们得到了一个gor文件;我们将gor文件移动到path环境中,这样我们就可以使用gor命令来记录流量。
可用输出:
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.1 我们进入猪齿鱼流量回归测试页面:
流量回归测试页面
2.2 点击流量回归测试右上方的导入流量文件,进入流量导入界面:
流量导入界面
2.3 选择用于放置生成用例的目录,我们这里选择的是测试合集目录,点击上传按钮,上传我们刚才录制的requests.gor文件,确定上传文件后,下方会立刻生成一条文件的导入记录。
导入记录界面
如果导入用例为0条,可能有以下原因: ①录制期间,被测系统未关闭主键加密功能; ②录制期间,未请求 self 接口获取用户信息,且导入时未提供用户信息获取接口; ③提供用户信息获取接口,但是录制的流量文件时间过长,超过了用户的 Token 过期时间,导致流量文件中涉及到的请求的认证信息已经过期了,无法识别用户,所以无法生成用例; ④所有的请求都不是 json 类型的请求 ⑤所有的请求的方法都不是 GET、POST、PUT或DELETE。
2.4 待文件导入成功后,所选的目录下将会生成对应的用例。列表中会展示各个用例对应的路径、请求方式、菜单、用户以及请求时间。
测试用例目录界面
3.1 由于我们通过导入流量文件得到的用例内,各个请求使用的ID参数在之后的执行过程中会产生变化。因此我们需要通过用例批量处理的功能将用例内各个请求路径、请求参数、请求体中的ID参数替换为变量。
在此之前,我们还需要选择一个POST类型的请求,将其响应体中生成的ID作为变量提取出来,以供后续的用例进行引用。
首先在页面左侧的树结构内选中一个流量回归集合,而后点击顶部的用例批量处理按钮,右侧会出现批量处理的页面。
用例批量处理界面
3.2 使用搜索栏进行用例筛选,支持的搜索方式有:
用例筛选界面
3.3 提取页面中的变量,在此界面中,需要将生成ID的用例请求找到,并将其响应体中的ID参数作为变量提取出来。具体步骤如下:
(1) 通过搜索栏中的各个选项定位到目标用例。
(2) 勾选出一个目标用例,点击下方的添加变量提取的按钮,右侧会弹出变量提取的界面。
变量提取成功后,还需要对请求中使用了ID参数的用例进行批量的ID替换,将其替换为提取出的变量。使用此功能,可以批量地将可以配置的参数提取为变量,例如提取请求中常见的项目ID、租户ID或者其它的资源ID。
值替换功能:
o 选择替换区域:支持选择路径、请求参数、请求头、请求体、响应头、响应体;用于定位所有选中的用例需要进行替换的具体区域。
o 输入源值:即之前的ID参数的准确值。后续会将这个ID数值替换为已经提取出的变量。
o 输入替换值:在此输入需要引用的变量即可。
例:之前提取出的变量名称为id,此处就输入:${id}
用例状态替换:直接在下拉框中选择需要将所选的用例请求变为的目标状态;对于已经处理完成的用例请求,直接批量将其置为处理完成的状态即可。回到列表之后,这些用例的状态就变为了处理完成。
总结
猪齿鱼全场景效能平台流量回归测试通过GoReplay批量录制产品界面操作,并将得到的用例进行集中管理,便于后续进行批量的回归测试,从很大程度上减轻了测试人员编写脚本、收集测试数据等重复且耗时的工作,提升团队的测试效能。
不知道大家平时都用哪个引流工具来做流量回归测试呢?小编亲测使用GoRepaly这款引流神器不但提高了回归测试的效率,还极大的提高了新功能发布的信心。欢迎大家一起来交流。