共计 4604 个字符,预计需要花费 12 分钟才能阅读完成。
本文作者陈恒捷是 TesterHome 社区主编,第十届 MTSC 大会上海站 - 开源专场出品人。先后在 PP 助手、PPmoney、荔枝等公司从事测试效力晋升相干工作,在测试技术及效率晋升方面有丰盛的教训积攒。
前言
在去年 repeater 刚进去的时候,就曾经简略体验了一下,也有在公司试用。但因为各种起因,最终没有落地。当初刚好有机会再钻研一下,看官网记录 console 终于加上了界面,所以也试用并记录下来。
其它文章链接传送门:
通用流量录制回放工具 jvm-sandbox-repeater 尝鲜记录 (一)
通用流量录制回放工具 jvm-sandbox-repeater 尝鲜 (二)——repeater-console 应用 (已实现)
通用流量录制回放工具 jvm-sandbox-repeater 尝鲜 (三)—— repeater plugin 开发 (完成度 50%)
步骤
因为官网源码有做了比拟多调整,所以这次记录还是从零开始。
- 1、装置 repeater
运行官网仓库下的 bin/install-repeater.sh
即可
- 2、调整 repeater 模式配置,改为用 console
批改 ~/.sandbox-module/cfg/repeater.properties 的值,repeat.standalone.mode 改为 false
- 3、调整 console 工程中对应配置
在 repeater-console/repeater-console-start/src/main/resources/application.properties
,调整 mysql 相干配置,改为和本人本地 mysql 数据库统一
同时请初始化数据库内容,初始化的 sql 文件在:repeater-console/repeater-console-dal/src/main/resources/database.sql
初始化胜利,应该会创立了 repeater 这个数据库,且包含上面四个表:
- 4、启动 console 和被测服务
启动被测服务:
4.1、下载示例我的项目:https://github.com/chenhengji…
4.2、启动示例我的项目:
# 在示例我的项目 clone 后的根目录中运行
cd complete
mvn install && java -jar target/*.jar
启动胜利后,应该有相似如下日志:
...
2020-12-28 07:40:45.949 INFO 32158 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2020-12-28 07:40:45.952 INFO 32158 --- [main] hello.Application : Started Application in 2.062 seconds (JVM running for 2.448)
4.3、修复官网仓库里 console 一些代码问题。
4.3.1、把 repeater-console/repeater-console-start/src/main/resources/velocity
上面的所有文件,查找 #parse("/blocks
,对立改替换为 #parse("blocks
。原有代码最后面带上 /
会导致援用找不到报错
4.3.2、批改 repeater-console/repeater-console-start/src/main/java/com/alibaba/repeater/console/start/controller/page/ReplayController.java
中的 return "/replay/detail";
,改为 return "replay/detail";
,去掉双引号外面第一个 /
4.3.3、批改 repeater-console/repeater-console-start/src/main/java/com/alibaba/repeater/console/start/controller/test/RegressPageController.java
中的 return "/regress/index";
,改为 return "regress/index";
,去掉双引号外面第一个 /
4.4、启动 console:
# 在 repeater 我的项目根目录进行
mvn install -DskipTests && java -jar repeater-console/repeater-console-start/target/*.jar
启动胜利,应该呈现相似上面的日志:
...
2020-12-28 07:40:27.259 INFO 32116 --- [main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8001 (http)
2020-12-28 07:40:27.265 INFO 32116 --- [main] c.a.repeater.console.start.Application : Started Application in 7.532 seconds (JVM running for 8.065)
- 5、应用界面化的 console 进行录制回放
关上此 url 即可关上 console 的界面:http://127.0.0.1:8001/regress…
当初,借助界面来做一次录制回放吧。根本套路还是一样的:
5.1、在 console 减少配置,用于对接利用(留神这个和之前纯命令行有点不同,命令行是先实现第二步)
5.2、让 repeater 注入到被测利用,上报数据到 console
5.3、在 console 中操作,进行录制和回放
接下来,一步一步操作。
5.1、在 console 减少配置,用于对接利用
点击左侧的【配置管理】,增加如下配置:
利用名:unknown
环境:unknown
配置信息
{
"useTtl" : true,
"degrade" : false,
"exceptionThreshold" : 1000,
"sampleRate" : 10000,
"pluginsPath" : null,
"httpEntrancePatterns" : ["^/greeting.*$"],
"javaEntranceBehaviors" : [ {
"classPattern" : "hello.GreetingController",
"methodPatterns" : ["greeting"],
"includeSubClasses" : false
} ],
"javaSubInvokeBehaviors" : [],
"pluginIdentities" : ["http", "java-entrance", "java-subInvoke", "mybatis", "ibatis"],
"repeatIdentities" : ["java", "http"]
}
点击【保留】,存下配置
5.2、让 repeater 注入到被测利用
sh ~/sandbox/bin/sandbox.sh -p `ps -ef | grep "target/gs-rest-service-0.1.0.jar" | grep -v grep | awk '{print $2}'` -P 12580
而后进入 console 的【在线模块】,应该能看到减少了以后这个被测利用的心跳记录:
5.3、开始录制。给这个被测利用输送一些流量
# 手动收回 2 条申请
$ curl -s 'http://localhost:8080/greeting'
{"id":1,"content":"Hello, World!"}%
$ curl -s 'http://localhost:8080/greeting?name=User'
{"id":2,"content":"Hello, User!"}%
而后关上 console 的【在线流量】,能看到刚收回的两条申请曾经录制下来了:
5.4、回放申请。间接点击第一行开端的回放按钮,进行回放:
而后,就能够看到回放后果了。稍等几秒后刷新下回放后果界面,就能看到执行后果
因为被测利用实际上 id 自增逻辑没有依赖任何内部服务,每次申请都会主动 +1,所以回放记录是失败的。
总结
官网的文档还是判若两人的少,代码外面也有点坑(对 velocity 不相熟,下面的代码只是按本人了解改的,如果有更正确的批改姿态欢送分享),界面和技术栈都用的比拟小众和比拟长远的的(spring-boot 17 年曾经去掉对 velocity 模板引擎的反对了)。而且一个批量回放性能还是只有按钮理论没做的。。。
不过也算是给到大家一个真正示例控制台该有的样子,把须要的元素和界面设计都根本给出了。如果想要开箱即用,对 http 接口进行简略的录制回放,能够应用这个带界面的 console 来试用一下。
附录:过程中的报错及解决
1、注入 repeater 到被测利用后,console 报错:
2020-12-28 23:37:28.822 ERROR 39333 --- [nio-8001-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null
at com.alibaba.repeater.console.start.controller.api.ConfigFacadeApi.getConfig(ConfigFacadeApi.java:34) ~[classes!/:na]
at sun.reflect.GeneratedMethodAccessor77.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_25]
起因:上报心跳包后,appName 和 environment 和配置对不上。
解决:请确认有至多一个配置,appName 和 environment 都是 unknown
2、报错 org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource ‘/blocks/pager.vm’] with root cause,且界面打不开
起因:没有依照后面所述批改 console 源码,导致援用其余模板的局部根目录不正确。
解决:依照后面形容,把 #parse("/blocks
,对立改替换为 #parse("blocks
即可。
本文首发于 TesterHome 社区,点此链接可查看原文并与作者间接交换。
今日份的常识已摄入~
想理解更多前沿测试开发技术:欢送关注「第十届 MTSC 大会上海站」>>>
1 个主会场 +12 大专场,大咖星散精英齐聚