JMeter在CICD中的小案例

写在前面

① 通过JMeter命令行,不改动脚本,实现switch host以压测不同的环境
② 以工程目录的形式管理JMeter脚本及其附属文件,以便移动脚本时能自动适应不同的路径

项目状况

  1. 经常要在两套环境(DEV, QA)间切换测试,两套环境的数据差异不大(比如用户)
  2. 按照工程目录的样式创建了许多文件夹(比如config, script, data, testcases)在jmx脚本目录中,用于分类管理
    • config中的代表文件:不同环境的配置文件

      dev.csv

      API, KEY
      https://z417.top/dev/api/, gAN0HPmkFBtIkfpI
      

      qa.csv

      API, KEY
      https://z417.top/qa/api/, 0jaVJtN55ErdZyrP
      
    • data中存放脚本运行时的产出文件

    • script中存放jmx运行时依赖的一些自定义脚本,比如.py

    • testcases存放csv参数化相关的文件

实现switch host

  1. 测试计划 → 添加 → 配置元件 → CSV数据文件设置

    avatar

    这样就可以在其他地方以 ${API}, ${KEY} 引用变量; 但问题是一旦要切换环境就得修改【文件名】, 所以还得继续增强, 请往下看

  2. “Ctrl + Shift + F1” 打开函数助手对话框, 选择__property, 填入【函数参数】后点击【生成】

    avatar

    env 属性名, 可以在JMeter命令行中对其赋值

    config/dev.csv env的默认值, 这里设置的是dev.csv, 也就是说在不指定环境时, 默认读dev环境的配置

  3. 复制函数助手生成的字符串${__property(env,,config/dev.csv)}到【文件名】

    avatar

  4. 通过命令行切换压测环境

    jmeter -n -t demo.jmx -J env=config\qa.csv
    

    参数-J可同时给多个property赋值, 这里只给env赋值

    注意执行命令时所处的目录(与demo.jmx同级)

    (按需)我本地把jmeter\bin设到环境变量里了,所以cmd窗口可以识别jmeter命令

目录结构化

  1. 在bean shell中可通过如下内容获取jmx脚本所处的绝对路径、路径分隔符

    import org.apache.jmeter.services.FileServer;
    
    var path = FileServer.getFileServer().getBaseDir();  // "C:\Users\z417\Desktop\load"
    
    var sep = File.separator;   // "\"
    
  2. 鉴于此,可以借助函数助手表达出来

    avatar

    给大伙复制用 import org.apache.jmeter.services.FileServer;FileServer.getFileServer().getBaseDir();

  3. 鉴于2,可将各文件的绝对路径赋值给用户变量

    avatar

    以data文件夹为例 ${__BeanShell(import org.apache.jmeter.services.FileServer;FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}data

剩下的就发挥想象,利用Jenkins对command的支持,集成到一起吧

posted @ 2020-11-05 10:31  z417  阅读(653)  评论(0编辑  收藏  举报