写点什么

重放浏览器请求多链路性能测试实践

用户头像
FunTester
关注
发布于: 3 小时前

在之前的几天,抽空完成了浏览器请求重放的基础功能,今天得空写了一个多链路性能测试实践的 Demo,顺便也解决了之前一直遗留的重放浏览器性能测试中关于多接口请求顺序的问题。


旧文如下:


整体思路

下面进入正题,主要思路如下:


  • 复制不同链路的请求,保存不同名字的文件

  • 通过工具类FileUtil获取某一目录下全部文件

  • 通过工具类CurlUtil将文件转换成List<HttpRequestBase>对象

  • 赋值多线程对象,执行 FunTester 性能测试框架


这个思路比较朴实没啥可讲的,只是在最后一步需要自己写一个多线程类,实现一下循环请求从文件中获取到的List<HttpRequestBase>中的HttpRequestBase对象。由于每一个链路的请求耗时各不相同,所以难以采取固定请求次数的模式,故而智能采取固定请求时间的模式,这里默认了固定线程而非固定QPS的压测模型。

测试 Demo

package com.okayqa
import com.alibaba.fastjson.JSONObjectimport com.fun.base.constaint.ThreadLimitTimeCountimport com.fun.base.exception.FailExceptionimport com.fun.base.interfaces.MarkThreadimport com.fun.frame.httpclient.FanLibraryimport com.fun.utils.FileUtilimport com.okayqa.common.Commonimport com.okayqa.composer.base.OkayBaseimport org.apache.http.client.methods.HttpRequestBase
import static com.fun.utils.CurlUtil.getRequests
class TTT extends OkayBase {

public static void main(String[] args) { //path为文件的绝对路径+文件名 String path = "" //time是压测时间,单位秒(s) def time = 1000 //用例描述,控制在20个字以内 def desc = "FunTester多链路压测Demo" //获取多链路日志 def file = FileUtil.getAllFile(path) def tasks = [] file.each { tasks << new FunTester(it, time, null) }
new Concurrent(tasks, desc).start()
FanLibrary.testOver() }
/** * FunTester测试类 */ static class FunTester extends ThreadLimitTimeCount<String> {
List<HttpRequestBase> reqs
FunTester(String s, int time, MarkThread markThread) { super(s, time, markThread) reqs = getRequests(s) }
@Override void before() { super.before() //初始化标记字符,防止空指针异常 threadmark = threadmark == null ? EMPTY : threadName }
@Override protected void doing() throws Exception { reqs.each { it.removeHeaders(Common.REQUEST_ID.getName()) def header = Common.getRequestIdHeader() it.addHeader(header) threadmark << header + CONNECTOR JSONObject simlple = FanLibrary.executeSimlple(it) if (!isRight(simlple)) FailException.fail("响应错误!" + it.getURI().toString()) } } }

}
复制代码


这里我添加了threadmark初始化工作,以及在doing()方法中进行标记的处理,以及每一个请求的通用业务验证。如果对于部分接口有更加细致的验证需求,可以自己实现一下,我这里先抛砖引玉。

控制台输出

INFO-> 当前用户:fv,IP:10.60.193.37,工作目录:/Users/fv/Documents/workspace/okay_test/,系统编码格式:UTF-8,系统Mac OS X版本:10.16INFO-> FunTester多链路压测Demo进度:▍▍▍▍▍▍▍▍▍▍▍  16.41%INFO-> FunTester多链路压测Demo进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍  32.83%INFO-> FunTester多链路压测Demo进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍  49.25%INFO-> FunTester多链路压测Demo进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍  65.67%INFO-> FunTester多链路压测Demo进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍  82.08%INFO-> FunTester多链路压测Demo进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍  100%INFO-> 线程:FunTester多链路压测Demo0,执行次数:37, 失败次数: 0,总耗时: 30.024 s这里省略大部分无用日志INFO-> 线程:FunTester多链路压测Demo24,执行次数:38, 失败次数: 0,总耗时: 31.095 sINFO-> 总计50个线程,共用时:31.121 s,执行总数:1917,错误数:0,失败数:0INFO-> 数据保存成功!文件名:/Users/fv/Documents/workspace/okay_test/long/data/FunTester多链路压测Demo031618,50INFO-> 数据保存成功!文件名:/Users/fv/Documents/workspace/okay_test/long/mark/FunTester多链路压测Demo031618INFO-> ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~>  {>  ① . "rt":796,>  ① . "total":1917,>  ① . "qps":62.814,>  ① . "failRate":0.0,>  ① . "threads":50,>  ① . "startTime":"2021-02-03 16:18:14",>  ① . "endTime":"2021-02-03 16:18:45",>  ① . "errorRate":0.0,>  ① . "executeTotal":1917,>  ① . "mark":"FunTester多链路压测Demo031618",>  ① . "table":"eJzj5VIgDNxK80JSi0tSi54umfVy8r4X29c/7et+trXbJTU338DY0MzQwtSACGN4uXjx2xaUWlyQn1ecqhCSmZtqpVChW5xalJmYo5BXmqujUKmbm5qSmZhHyA6CzsjNzFOAGGVlbGiqkFusk5tYYWVoZAFiE+MLwmooAI+mdQAR7Wx5NK0JiGDW0NS2R9OagQjNKtrZiNVntLX10bRWIMJrJdVtfjStEYiAVDsQEWM1dV3waFoLEJFgL/VdQXyo084lRCQ2erqIwlihhauoE0vUdRm5eYdOLqRFoqKyK2kfq5S7lN6xTKGL4c4dSHeS5moaFjc0czk8cw2CVEGGDwaobKCmLwa27KCOTwZT2UIFH+Frog8xCuarwVs2UeSz4ectuO+GZrlAmg8HgTNGfTjqw1EfDrwzRn046kO8PgQAblRBew==">  }~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~INFO->                                    FunTester多链路压测Demo03161850                                   
Response Time: x-serial num, y-median min median:315 ms,max:1285 ms 这里省略文本图像,下文中有效果展示
Process finished with exit code 0
复制代码




FunTester,非著名测试开发,文章记录学习和感悟,欢迎关注,交流成长。
  • Gitee地址 https://gitee.com/fanapi/tester

  • GitHub地址 https://github.com/JunManYuanLong/FunTester




发布于: 3 小时前阅读数: 3
用户头像

FunTester

关注

公众号:FunTester,650+原创,欢迎关注 2020.10.20 加入

Have Fun,Tester! 公众号FunTester,坚持原创文章的测试人。 FunTester测试框架作者,DCS_FunTester分布式性能测试框架作者。

评论

发布
暂无评论
重放浏览器请求多链路性能测试实践