美文网首页
golang性能测试框架k6源码分析

golang性能测试框架k6源码分析

作者: heliping_peter | 来源:发表于2021-10-19 10:22 被阅读0次

k6是新兴的性能测试框架,比肩jmeter,另外测试脚本使用js,更加适合自动化的架构。
k6启动的框架是使用golang的cli标准框架cobra,入口函数

func main() {
    cmd.Execute()
}

进入cobra框架后,我们直接查看getRunCmd,这个是命令run的入口,主要工作都是从这里开始。

func getRunCmd(ctx context.Context, logger *logrus.Logger) *cobra.Command {
...........
initRunner, err := newRunner(logger, src, runType, filesystems, runtimeOptions, builtinMetrics, registry)

重点关注初始化Runner,这个是通过js脚本,使用goja库解析后,生成的实际执行单元。
进入js目录,查看Runner的结构,runner.go

type Runner struct {
    Bundle         *Bundle
    Logger         *logrus.Logger
    defaultGroup   *lib.Group
    builtinMetrics *metrics.BuiltinMetrics
    registry       *metrics.Registry

    BaseDialer net.Dialer
    Resolver   netext.Resolver
    // TODO: Remove ActualResolver, it's a hack to simplify mocking in tests.
    ActualResolver netext.MultiResolver
    RPSLimit       *rate.Limiter

    console   *console
    setupData []byte
}

Runner有一些配置属性,另外还有方法,方法用lib.Runner的接口进行规范。
Runner有一个NewVU方法,里面定义了连接参数,实现api测试

func (r *Runner) newVU(idLocal, idGlobal uint64, samplesOut chan<- stats.SampleContainer) (*VU, error) {
    // Instantiate a new bundle, make a VU out of it.
.........
dialer := &netext.Dialer{
        Dialer:           r.BaseDialer,
        Resolver:         r.Resolver,
        Blacklist:        r.Bundle.Options.BlacklistIPs,
        BlockedHostnames: r.Bundle.Options.BlockedHostnames.Trie,
        Hosts:            r.Bundle.Options.Hosts,
    }

返回主函数,在初始化完成Runner后,启动调度器,以及做结果收集
最终封装成一个engine

// Create the engine.
            initBar.Modify(pb.WithConstProgress(0, "Init engine"))
            engine, err := core.NewEngine(execScheduler, conf.Options, runtimeOptions, outputs, logger, builtinMetrics)
            if err != nil {
                return err
            }

            // Spin up the REST API server, if not disabled.

启动测试

// Start the test run
            initBar.Modify(pb.WithConstProgress(0, "Starting test..."))
            if err := engineRun(); err != nil {
                return errext.WithExitCodeIfNone(err, exitcodes.GenericEngine)
            }
            runCancel()

相关文章

网友评论

      本文标题:golang性能测试框架k6源码分析

      本文链接:https://www.haomeiwen.com/subject/ynzooltx.html