k6介绍

k6是一款使用go语言编写的开源测试工具,支持用户编写测试脚本,解决了JMeter不易代码化的缺点。它的主要特点有

  • 提供了友好的 CLI 工具
  • 使用 JavaScript 代码编写测试用例
  • 可以根据性能条件设置阈值,表明成功还是失败

另外,k6不能直接使用 npm 包以及 Nodejs 提供的一些 API,因为它是通过golang程序包裹了javaScript运行js脚本的。

具体步骤

前置条件

  1. 下载kubectl

    brew install kubectl

  2. 安装helm

    brew install helm

  3. 新建一个放置k6的文件夹

配置并安装k6

  1. 输入vim k6-deployment.yaml

  2. 在里面详细写出对k6的配置

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: k6-deployment
    labels:
    app: k6
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: k6
    template:
    metadata:
    labels:
    app: k6
    spec:
    containers:
    - name: k6
    image: loadimpact/k6
    command: ["tail","-f","/dev/null"]
    resources:
    requests:
    memory: "64Mi"
    cpu: "250m"
    limits:
    memory: "128Mi"
    cpu: "500m"
  3. 接着在k8s上部署k6,namespace的名字自己定义,kubectl apply -f k6-deployment.yaml -n k6

    此时它会显示

    deployment.apps/k6-deployment created

    说明部署已经成功。

  4. 输入kubectl -n k6 exec -it k6-deployment-57fd465f75-wxfj8 /bin/sh运行k6,运行成功后得到下图

进行压测

  1. 编写脚本

    此处使用k6官网上的测试脚本进行一次小压测,在终端输入vi 脚本名称.js,并在弹出来的窗口中输入脚本内容,此处使用的脚本为

    import http from 'k6/http';
    import { sleep } from 'k6';
    export default function () {
    http.get('http://test.k6.io');
    sleep(1);
  2. 运行脚本

    输入命令k6 run 脚本名称.js,然后显示

    即压测成功。

问题汇总

  1. 如果输入kubectl get pods -n k6,却显示

    NAME                             READY   STATUS             RESTARTS   AGE
    k6-deployment-84f77b464f-2qjkb 0/1 CrashLoopBackOff 1 23s

    说明这个pod一直在重复着【启动,崩溃,再次启动,然后再次崩溃】的过程。

    解决方法:

    k6-deployment.yaml文件里的container里加上command: ["tail","-f","/dev/null"],这条命令的作用是保持容器一直处于运行状态,上面的yaml文件里已经加好了。

    注:此命令一般用于【 docker 容器中的进程(pid 1)没有在前台运行,如果前台没有任何进程运行,docker 会自动关闭自己】的情况

    此时输入kubectl get pods -n k6,可以得到

    NAME                             READY   STATUS        RESTARTS   AGE
    k6-deployment-57fd465f75-wxfj8 1/1 Running 0 9s
    k6-deployment-84f77b464f-2qjkb 0/1 Terminating 6 7m15s

最新文章

  1. VS 常用高效 快捷键
  2. 拓扑排序&&欧拉(回)路
  3. 关于JS的总结
  4. Android ListView自定义Adapter使用误区
  5. dubug
  6. MySQL 插入与自增主键值相等的字段 与 高并发下保证数据准确的实验
  7. angular这个大梗的学习笔记
  8. Python学习第一周
  9. JavaScript,只有你想不到
  10. react系列笔记:第二记-中间件
  11. js鼠标相关事件
  12. 用curl模拟夹带cookie的http请求
  13. JavaScript学习总结(二)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
  14. 撩课-Java每天5道面试题第19天
  15. Linux内核分析第一二章读书笔记
  16. Jquery为动态添加的未来元素绑定事件
  17. CF 366E - Dima and Magic Guitar 最远曼哈顿距离
  18. FairyGUI和NGUI对比
  19. 基于zookeeper简单实现分布式锁
  20. 理解OpenID和OAuth的区别

热门文章

  1. Typora详细教程以及下载
  2. HTML行内元素与块级元素有哪些及区别详解
  3. python基础学习9
  4. Python装饰器Decorators
  5. LVGL库入门教程01-移植到STM32(触摸屏)
  6. SpringBoot之:SpringBoot中使用HATEOAS
  7. 【Java面试】请简单说一下你对受检异常和非受检异常的理解
  8. yearning_sql审核平台搭建
  9. Docker安装Portainer管理工具
  10. windows10 安装MySQL ZIP版本