Jmeter测试YDB入门

Jmeter是一款负载测试软件,本文简要介绍了使用该工具测试YDB性能的过程。

本文介绍了两种的请求的测试方法:另一种为HTTP请求,该方法通过HTTP协议访问客户程序,而对YDB的访问由客户程序负责;一种为JAVA请求,该方法通过Hive-jdbc-driver访问YDB,主要用于直接测试YDB性能。

Jmeter测试YDB入门_第1张图片
本文中使用的Jmeter模块如下:

  • Test Plan: 测试计划
  • hread Group:线程组,用于定义并发数和线程的启动和关闭方式
  • HTTP Request:通过HTTP请求访问YDB
  • JAVA Request:通过JAVA请求访问YDB
  • View Results Tree:查看测试结果。

版本及下载

Jmeter为开源软件,本文使用的版本为4.0,相应安装包可以在其官网下载,安装包文件名为apache-jmeter-4.0.tgz 大小为47M。

安装及启动

解压安装包文件后,直接执行bin\jmeter.bat,程序界面如下图:

Jmeter测试YDB入门_第2张图片

HTTP请求测试方法

添加线程组

Jmeter测试YDB入门_第3张图片

设置线程组参数

Number of Threads (users) : 并发数量。
Ramp-Up Period(in seconds):启动间隔。设为0,所有线程同时启动。
Loop Count:每个线程中,请求重复次数。

Jmeter测试YDB入门_第4张图片

添加HTTP请求

Jmeter测试YDB入门_第5张图片

设置请求参数

Protocol: 访问协议
Server Name or IP:http服务器名称
Port Number :服务端口号
Path:页面路径
Name:参数名称
Value:参数值(本文中,此处是SQL语句)
Encode:编码请求参数

Jmeter测试YDB入门_第6张图片

添加结果参看模块

Jmeter测试YDB入门_第7张图片

设置结果查看模块

Jmeter测试YDB入门_第8张图片

运行及结果查看

点击运行按钮运行测试。

每个请求可以参看三类信息:Sampler result 查看运行时间等;Request 查看http请求连接和头数据;Response Data 查看http请求的返回数据。
Jmeter测试YDB入门_第9张图片

结果输出文件可以查看运行时间(Latency)等信息。
Jmeter测试YDB入门_第10张图片

Java请求测试方法

Java请求测试与Http请求测试定义流程基本相似,只是将Http请求模块换为Java请求模块。

设置请求模块参数

Classname: 自定义的测试类
url:YDB JDBC连接地址
user:YDB的用户名称
sql:需要执行的SQL语句

添加依赖包(apache-jmeter-4.0\lib\ext):
    ydb-1.0.jar(自定义测试类)
    hive-jdbc-1.2.1-standalone.jar
    hadoop-common-2.6.2.jar

Jmeter测试YDB入门_第11张图片

结果查看

Jmeter测试YDB入门_第12张图片

自定义测试类

package org.apache.jmeter.protocol.java;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import java.sql.*;

public class Ydb extends AbstractJavaSamplerClient {
    private String url;
    private String user;
    private String sql;

    @Override
    public Arguments getDefaultParameters() {
        final Arguments params = new Arguments();
        params.addArgument("url", "jdbc:hive2://zvm:10009/default");
        params.addArgument("user", "hdfs");
        params.addArgument("sql", "show tables");
        return params;
    }

    @Override
    public void setupTest(final JavaSamplerContext context) {
        this.url = context.getParameter("url", "jdbc:hive2://zvm:10009/default");
        this.user = context.getParameter("user", "hdfs");
        this.sql = context.getParameter("sql", "show tables");
    }

    @Override
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        final SampleResult results = new SampleResult();
        results.setSampleLabel("ydb_sql");
        results.setSamplerData(this.sql);
        results.sampleStart();
        try {
            StringBuilder sb = new StringBuilder();
            Class.forName("org.apache.hive.jdbc.HiveDriver");
            Connection conn = DriverManager.getConnection(this.url, this.user, "");
            Statement smst = conn.createStatement();
            ResultSet rs = smst.executeQuery(this.sql);
            ResultSetMetaData m = rs.getMetaData();
            int columns = m.getColumnCount();
            for (int i = 1; i <= columns; i++) {
                sb.append(m.getColumnName(i)).append(",");
            }
            sb.append("\n");
            while (rs.next()) {
                for (int i = 1; i <= columns; i++) {
                    sb.append(rs.getString(i)).append(",");
                }
                sb.append("\n");
            }
            rs.close();
            conn.close();
            results.setSuccessful(true);
            results.setResponseMessage("OK");
            results.setResponseData(sb.toString());
        } catch (Exception e) {
            results.setSuccessful(false);
            results.setResponseMessage("ERROR");
        } finally {
            results.sampleEnd();
        }
        return results;
    }
}

你可能感兴趣的:(Jmeter测试YDB入门)