美文网首页软件测试测试员的那点事Jmeter自动化测试
《基于Jmeter的性能测试框架搭建》改进一

《基于Jmeter的性能测试框架搭建》改进一

作者: Tomandy | 来源:发表于2018-07-24 17:55 被阅读25次

    《基于Jmeter的性能测试框架搭建》文末笔者提到了不少待改进之处,如下所示。

    • Grafana性能图表实时展现,测试过程中需实时截图形成测试报告,不够人性化。
      解决方案:自动生成测试报告并邮件通知。
    • Grafana性能图表需测试人员实时监控,人力成本较高。
      解决方案:自动生成测试报告并邮件通知。
    • 多脚本构建的话,无法区分Grafana展现的性能图表对应哪个脚本。
      解决方案:传参区分脚本,并生成每个接口对应的测试报告。
    • 如果考虑持续监控,可加入预警功能。
      解决方案:依赖Grafana的预警功能。
    • 未能自动生成测试报告。
      解决方案:自动生成测试报告并邮件通知。
    • 需登录jenkins停止脚本构建,操作不够便利。
      解决方案:前端增加停止构建操作。
    • 每次只能提交一个脚本进行构建。
      解决方案:支持批量构建。

    结合笔者所在项目组现状,优先解决了以下几个问题。

    本期改进

    1、多脚本构建的话,无法区分Grafana展现的性能图表对应哪个脚本。

    最终解决方案:将脚本名称写入influxdb库,然后再通过Grafana配置读取。

    • 创建influxdb数据库interfaceName并插入数据(脚本名称)
    <!-- 依赖关系 -->
    <dependency>
          <groupId>org.influxdb</groupId>
          <artifactId>influxdb-java</artifactId>
          <version>2.5</version>
    </dependency>
    
    //创建数据库,并写入对应脚本的名称
        public static void influxdb(String interfaceName) throws Exception {
            Map<String,String> configMap = new HashMap<String, String>();
            configMap = getProperties("config\\config.properties");
            InfluxDBUtil svr = new InfluxDBUtil(configMap.get("Influxdb"))  //对应测试机地址
                    .setDatabase("interfaceName", "autogen")  //数据库名
                    .setAuthentication("admin", "admin")      //grafana datasource配置的用户名和密码
                    .setRetentionPolicy("30m", 1)
                    .build();
    
            for (int i = 0; i < 5; i++) {
                Map<String, String> tags = new HashMap<String ,String>();
                tags.put("system", configMap.get("InfluxdbSystem"));  //对应的应用
    
                Map<String, Object> fields = new HashMap<String, Object>();
                fields.put("interfaceName", interfaceName);           //面板展现的脚本名称
    
                svr.insert("interface", tags, fields);
                System.out.println(i);
            }
        }
    
    • 配置Grafana的datasource。


      DataSource配置
    • 配置Grafana面板配置。


      面板配置
    • 执行压测小工具提交脚本,展现性能数据(注意图二展现了脚本名称)。
      压测小工具
      性能图表
    2、需登录jenkins停止脚本构建,操作不够便利。

    最终解决方案:无需解决,测试人员需登录jenkins查看构建日志,分析构建结果。

    构建日志
    3、每次只能提交一个脚本进行构建。

    最终解决方案:多脚本提交时,jenkins按脚本提交的先后顺序排队构建。
    同一套压测环境,为了保证单个接口压测的准确性,笔者并不建议并行构建多个接口,可以通过压测小工具提交脚本串行构建。

    jenkins构建

    触发Jenkins构建扩展

    除了《基于Jmeter的性能测试框架搭建》提及的webhook,Poll SCM触发jenkins构建,也可以通过curl或jenkins-cli触发构建。

    curl命令构建
    curl  -i -u 'jenkinsUserName:jenkinsPassword' -X POST -H "$CRUMB" "http://jenkinsurl/jenkins/job/jobName/build?delay=0sec"
    
    jenkins-cli构建
    • 下载jenkins-cli.jar
      通过jenkinsUrl/cli下载对应版本的jenkins-cli.jar。


      jenkins-cli.jar下载
    • 通过build命令触发构建

    //触发jenkins构建
     configMap = getProperties("config\\config.properties");
    String jenkinsCliUrl = "lib\\lib\\jenkins-cli.jar";
    String jenkinsUrl = configMap.get("JenkinsUrl");
    String jobName = configMap.get("JenkinsJobName");
    String userName = configMap.get("JenkinsUserName");
    String password = configMap.get("JenkinsPassword");
    String commandStr = "java -jar " + jenkinsCliUrl + " -s " + jenkinsUrl + " build " + jobName + " --username " + userName + " --password " + password;
    Runtime.getRuntime().exec(commandStr); //触发jenkins构建
    

    需要注意的是,通过jenkins-cli方式触发构建,需设置jenkins的全局安全配置为“任何用户可以做任何事(没有任何限制)”或勾选“Allow anonymous read access”,否者会报错。


    全局安全配置
    • 更多的命令可通过help或在jenkinsUrl/cli查看
    java -jar jenkins-cli.jar -s http://jenkinsUrl/jenkins/ help
    
    可用命令

    参考资料

    Influxdb数据库读写

    相关文章

      网友评论

      本文标题:《基于Jmeter的性能测试框架搭建》改进一

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