k6性能压测go语言 性能测试语言

golang性能测试框架k6源码分析【k6性能压测go语言 性能测试语言】k6是新兴的性能测试框架,比肩jmeter,另外测试脚本使用js,更加适合自动化的架构 。
k6启动的框架是使用golang的cli标准框架cobra , 入口函数
进入cobra框架后,我们直接查看getRunCmd,这个是命令run的入口,主要工作都是从这里开始 。
重点关注初始化Runner,这个是通过js脚本 , 使用goja库解析后,生成的实际执行单元 。
进入js目录,查看Runner的结构,runner.go
Runner有一些配置属性 , 另外还有方法,方法用lib.Runner的接口进行规范 。
Runner有一个NewVU方法,里面定义了连接参数 , 实现api测试
返回主函数,在初始化完成Runner后 , 启动调度器,以及做结果收集
最终封装成一个engine
启动测试
全链路压测流量模型现在全链路越来越火,各大厂商也纷纷推出了自己的全链路压测测试方案 。特别是针对全链路压测流量模型,各家方案都有所不同 。最近我看了一些这方面的资料 , 有一些感悟 。分享给大家 。
全链路压测流量模型的梳理呢,这里就先不讲了,各家公司自有司情在 。因为主要是全链路压测模型的实现 , 其实实现也对应了流量模型的梳理结果 。
业界常用的三种方一种:是基于业务模型的实现 , 一种是基于真实流量的录制回放,最后一种是灰度分流 。
这个是一种比较常用的方式 。首先要对公司业务模型进行梳理,也就是说对公司的业务链路进行梳理 。这里的业务链路可能会比较复杂,不是像很多案例中到的了就非常流行畅的一条链路,中间很有可能会出现各种各样的支路 。如果图图形化展示的话 , 某一条链路应该就是一个树形结构 。树形结构的开始是用户的入口页一般就是入口页面的登陆,或者说是首页接口 。树形结构的右侧是用户的出口,这里根据业务模型不同,用户的出口会非常的多,所以大多数来时候来讲,这就是一个分叉的树形结构 。
要对这样的流量模型进行实现 。是比较困难的 。首先要梳理出这样的业务模型,就不太容易,再加上接口的相互调用?。葜涞南嗷ヒ览涤挚赡苁歉丛映潭仍黾右桓隽考?。所以一般的实现方式就是做归拢 。将比较复杂的树形结构简单化,或者干脆将以个业务联络分解成n个列有链路 。然后分别实现 。最终将流量汇聚 , 就变成了整个业务链路的流量模型实现 。
在业务模型实现这个方向,各家都有不同的实现方式?。?基本上就分为工具以及脚本实现 。我自己不怎么用工具做过接口的性能测试,全都是使用java和groovy脚本去实现的 。首先,我会实现一个基于接口的业务测试框架,将每一个接口封装成一个方法 。接口的参数即是这个方法的参数 。然后将每一个用户封装成一个对象 。将用户的各种信息变成这个对象的属性 。然后用户在请求不同的接口的时候对用户的属性进行赋值这样就达到了一个参数传递的目的 。然后通过调用不同的方法 , 我们就可以实现对不同接口的请求 。通过控制参数或者说接口请求的频率,我们就可以达到控制当前用户 。在整个业务链的走向 。
基于流量录制和回放,这个是最容易实现的方式 。也是最容易贴近真实情况的方式 。哦,我接触到的主要有一个回放模型,就是用golang语言写的goreply 。go语言的性能是非常好的 , 用于性能测试足够满足用户的需求 。大多数公司都会选择在原生引擎的基础上做一些封装 。然后对对业务进行一些兼容,最主要的还是适配流量来源 。通常流量的来源是通过日志文件来获取的,但是我看行业内也有通过一些固定的流量存储分析引擎去完成 。这里的技术我不是太熟,也就不多分享啦 。

推荐阅读