• Jmeter-postgresql制造测试数据


    原文链接:https://blog.csdn.net/u010250240/article/details/105118742/

    Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。作为一个负责任的后端开发人员,联调前需要充分自测,我使用jmeter主要用来生成测试数据,当然它的主业是进行性能测试。
    运行环境是Windows 10操作系统,JDK版本是1.8,jmeter版本是5.2.1,数据库是PostgreSQL12。


    1. 下载安装apache-jmeter

    1.1 安装JDK

    需要安装JDK1.8版本并配置好环境变量。
    1.官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
    2.往下拉找到Java SE 8u241,在Oracle JDK下下载JDK Download
    在这里插入图片描述
    3.配置环境变量
    4.在cmd下测试是否安装完成

    1.2 安装Jmeter

    1.官网下载地址:https://jmeter.apache.org/download_jmeter.cgi

    在这里插入图片描述
    2.选择apache-jmeter-5.2.1.zip下载
    3.下载完成解压zip包
    4.启动jmeter:
    双击jmeter解压路径(apache-jmeter-5.2.1in)bin下的jmeter.bat就可以启动jmeter:
    在这里插入图片描述

    1.3 下载数据库驱动包

    这里用到的是pgsql数据库,Jmeter需要使用JDBC功能,因此要下载对应的pgsql数据库驱动包,并将下载好的jar包放到jmeter的解压路径下lib下的ext目录中。
    postgres的驱动包下载地址:https://jdbc.postgresql.org/download.html,需要根据自己的java版本选择对应版本的JDBC。
    比如我现在使用的是jdk1.8,所以就选择JDBC 4.2中的42.2.11版本;
    在这里插入图片描述
    下载至jmeter解压路径下的lib下的ext目录中:
    在这里插入图片描述


    2. 使用JMeter

    官网是最好的参考文档:https://jmeter.apache.org/usermanual/build-db-test-plan.html
    打开Jmeter后的界面:
    在这里插入图片描述
    切换成中文界面Options–Choose Language–Chinese(Simplofied):
    在这里插入图片描述
    如果之前没有将驱动包拷贝到jmeter解压路径的/lib/ext目录下,可以在测试计划下选择驱动包路径。
    点击浏览选择相应的驱动jar包:
    在这里插入图片描述

    2.1 添加线程组

    右键TestPlan- 添加- 线程(用户)- 线程组:
    在这里插入图片描述
    配置好线程组名称、线程数、启动时间(此属性告诉JMeter启动每个用户之间要延迟多长时间)、迭代次数(该属性告诉JMeter重复几次测试):
    在这里插入图片描述
    官网上关于启动时间的详细介绍(了解即可):

    In the next field, the Ramp-Up Period, leave the value of 10 seconds. This property tells JMeter how long to delay between starting each user. For example, if you enter a Ramp-Up Period of 10 seconds, JMeter will finish starting all of your users by the end of the 10 seconds. So, if we have 50 users and a 10 second Ramp-Up Period, then the delay between starting users would be 200 milliseconds (10 seconds / 50 users = 0.2 second per user). If you set the value to 0, then JMeter will immediately start all of your users.

    2.2 添加JDBC连接配置

    右键线程组–添加–配置元件–JDBC Connection Configuration:
    在这里插入图片描述
    配置好名称Variable name for created poolDateBase URLJDBC Driver classUsernamePassword等:
    在这里插入图片描述
    这部分的参数设置均能在官网找到详细的解释说明。
    说明(部分选自参考资料):
    (1)Variable name for created pool:创建池的变量名。必填项,需要自定义变量名,这里定义的变量名会被之后的jdbc请求引用,以此来判断请求使用的是哪个配置元件所定义的数据库配置,所以要和后面添加的JDBC RequestVariable Name Bound to Pool下的Variable Name保持一致。如果不填运行后会报错Variable Name must not be empty for element:JDBC Connection Configuration
    (2)Validation Query:非必填项,用来验证数据库连接的有效性。不同的数据库,所选择的Validation Query是不同的,具体可参照以下(postgresql选select 1):

    • hsqldb - select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
    • Oracle - select 1 from dual
    • DB2 - select 1 from sysibm.sysdummy1
    • mysql - select 1
    • microsoft SQL Server - select 1 (tested on SQL-Server 9.0, 10.5 [2008])
    • postgresql - select 1
    • ingres - select 1
    • derby - values 1
    • H2 - select 1
    • Firebird - select 1 from rdb$database

    (3)DateBase URL:数据库连接的访问地址
    (4)JDBC Driver class:数据库连接驱动程序类
    对于Database URL和JDBC Driver class 不同的数据的链接和驱动类是不同的,官网上给了一些参考示例(部分):
    在这里插入图片描述
    (5)Username:数据库的用户名
    (6)Password:用户名的密码
    在这里插入图片描述
    点击保存后,当前线程组配置默认保存在当前/bin目录下。

    2.3 添加用户参数

    右键线程组–添加–前置处理器–用户参数:
    在这里插入图片描述
    添加变量,名称列为数据库表中对应字段,为了便于区分辨认,这里写成和字段一样的变量名:
    在这里插入图片描述
    单击面板底部添加用户按钮(也可以只用一个用户),然后在新添加的列中填写所需的值,变量值可以通过函数助手自动生成:
    在这里插入图片描述
    (1)由于数据库的主键id被设置成了自增序列,并且已经存在了14条数据,所以后面插入的值不能重复,也就是不能小于14,因此这里的变量id要由计数器生成。
    在这里插入图片描述
    为什么不用_counter函数?
    在这里插入图片描述
    因为_counter函数生成的数字都是从1开始的,
    在这里插入图片描述
    插入的时候会出现主键冲突的问题,导致报错:ERROR: duplicate key value violates unique constraint "employee_pkey" Detail: Key (id)=(4) already exists.。计数器可以设置起始值,从而避免这个问题。

    (2)需要添加自定义变量,用于jobdepaerment_no字段随机选择自定义的变量。

    2.4 添加计数器

    右键线程组–添加–配置元件–计数器:
    在这里插入图片描述
    配置计数器的各个值:
    计数器使用long来存储值,因此范围是-2 ^ 63到2 ^ 63-1。
    在这里插入图片描述
    说明(form官网):
    (1)名称和注释就不过多说明了
    (2)Starting value:计数器的起始值。在第一次迭代期间,计数器将等于该值(默认为0)。
    (3)递增:每次迭代后计数器增加多少(默认为0,表示不增加)。
    (4)Maxinum value:如果计数器超过设置的最大值,则将其重置为起始值。预设为Long.MAX_VALUE
    (5)数字格式:可选的格式,如000会格式化为001,002,等它传递给DecimalFormat的,所以任何有效的格式都可以使用。如果解释格式存在问题,则将其忽略。[默认格式是使用Long.toString()生成的]。
    (6)引用名称:即导出的变量名称,在该变量名称下计数器值可用。如果将其命名为counterA,则可以 按照用户定义的值中的说明使用$ {counterA}来访问它。
    (7)迭代重置勾选框:换句话说,这是全局计数器,还是每个用户都有自己的计数器?如果未选中,则计数器为全局计数器(即,用户#1 在第一次迭代中将获得值“ 1 ”,而用户#2将获得“ 2 ” 值)。如果选中,则每个用户都有一个独立的计数器。

    2.5 添加用户定义的变量

    右键线程组–添加–配置元件–用户定义的变量:
    在这里插入图片描述
    配置需要定义的变量,见红框内:
    在这里插入图片描述

    2.6 继续配置用户参数

    使用函数助手,根据变量的属性,选择对应的函数,生成需要的值:
    在这里插入图片描述

    说明:

    (1)这里添加了两个用户,用以配置生成不同的变量值(我这里为了方便,两个用户的variable就写成一样的了),官网的介绍:
    在这里插入图片描述
    (2)每次迭代更新一次是什么意思呢?官网的解释是:
    在这里插入图片描述
    (3)函数的初次使用可能要花一些时间掌握它们的准确用法。

    2.7 添加JDBC Request监听器

    右键线程组–添加–取样器–JDBC Request:
    在这里插入图片描述
    我这里加了四个Request分别进行增删改查的演示。
    添加监听器展示结果,比如“察看结果树”、“聚合报告”、“断言结果”等监听器:
    在这里插入图片描述

    2.7.1 修改线程数

    我们想生成6条数据,采用两条线程循环3次的方式:
    在这里插入图片描述

    2.7.2 添加数据

    在这里插入图片描述
    (1)Query Type的选择
    sql1sql2
    官网上只做了简单的介绍:
    在这里插入图片描述
    由于在使用过程中由于Query Type的选择问题走了一些弯路,因此在此把他们的区别区分一下。
    JDBC是Java编程中用于操作数据库的API,这些Type是JDBC中的接口,叫做JDBC的执行对象,执行对象是sql的执行者。

    • Select Statement:查询语句,测试发现仅支持select语句,并且一次只能测一条。
    • Update Statement:修改语句。update、insert和delete的sql语句均可以使用,且可以同时测试多个非select语句,比如同时测试一条insert语句和delete语句。如果其中夹杂select语句,自动忽略;如果多条语句的第一条为select语句,会报错。
    • Callable Statement:可调用的语句。只要语法正确,任何语句,任何条数都支持。CallableStatement接口添加了调用数据库中存储过程的函数,以及处理输出参数的方法。
    • Prepared Select Statement:预编译的查询语句。PreparedStatement表示预编译的SQL语句的对象,用于执行带参数的预编译的SQL语句。
    • Prepared Update Statement:预编译的修改语句
    • Commit:提交
    • Rollback:回滚
    • Autocommit(false):不自动提交
    • Autocommit(true):自动提交
    • Edit:编辑

    (最后五个Query Type如何使用我就不清楚了,看到此文的朋友请指教)

    (2)这里的Variable Name Bound to Pool绑定的池的变量名就是JDBC连接配置中声明的池的变量名:
    在这里插入图片描述
    两者要一致才能正确连接到数据库,否则会报这个错:
    No pool found named: 'sss', ensure Variable Name matches Variable Name of JDBC Connection Configuration

    (3)Query Type选择Update StatementCallable StatementPrepared Update Statement都可以。编写sql语句要注意的是:

    • 参数化的字段要用${}来引用
    • 字段为非整数型要用 ‘’ 括起来

    如果参数化的字段没用${}引用会直接赋值所写的变量,诸如下面的错:
    ERROR: column "create_user_id" does not exist Hint: There is a column named "create_user_id" in table "employee", but it cannot be referenced from this part of the query. Position: 178

    (4)启动运行
    在这里插入图片描述
    (5)察看结果树,成功插入六条数据(其实是失败了好多次==)
    在这里插入图片描述
    再到数据库查看是否增加了六条数据,原先是14条数据现在应该是20条:
    在这里插入图片描述
    到此批量添加数据OK了。

    2.7.3 删除数据

    将原先insertDataJDBC Request禁用:
    在这里插入图片描述
    启用deleteData
    在这里插入图片描述
    配置参数:
    在这里插入图片描述
    JDBC Connection ConfigurationJDBC Requeat绑定的池变量名要一致(后面不再重复):
    先列举一个执行失败的写法:
    在这里插入图片描述
    会报如下错误:ERROR: syntax error at or near ","或者ERROR: syntax error at or near ")"、或者number of arguments (3) and number of types (1) are not equal等,原因就是带参数的执行语句要选择预编译的语句。
    执行带参的delete语句时Query Type要选择Prepared Update Statement或者Callable Statement,执行后查看结果树:
    在这里插入图片描述在这里插入图片描述

    (不光要看jmeter的执行状态,还需要确认数据库数据是否真的改变)

    2.7.4 修改数据

    成功案例1:
    在这里插入图片描述
    在这里插入图片描述
    成功案例2:
    在这里插入图片描述
    成功案例3:
    在这里插入图片描述
    (不光要看jmeter的执行状态,还需要确认数据库数据是否真的改变)

    2.7.5 查询数据

    (1)当使用Select Statement语句查询时,成功:
    在这里插入图片描述
    失败并报错Multiple ResultSets were returned by the query.(搞不懂…):
    在这里插入图片描述
    (2)当使用Prapared Select Statement语句查询时,成功:
    在这里插入图片描述
    失败并报错Multiple ResultSets were returned by the query.(搞不懂…):
    在这里插入图片描述
    (3)当使用Callable Statement语句查询时暂未发现查询会失败的情况。

    2.7.6 执行多条sql语句

    将id为17的数据sal改为999,删除id为23的数据:
    在这里插入图片描述
    执行成功:
    在这里插入图片描述
    (不光要看jmeter的执行状态,还需要确认数据库数据是否真的改变)

    3. 总结

      1. 如果添加的数据量小的话,使用jmeter生成测试数据没有直接写insert sql方便,不过生成大量的数据还是jmeter方便快捷。
      2. jmeter是一个很好的测试工具,更多使用功能还需要继续挖掘。
  • 相关阅读:
    网络数据处理
    进程间通信和网络
    附加的操作系统服务
    通用操作系统服务
    UIScrollView 子控件的自动布局经验
    UIImage 添加水印
    数据类型
    ios 获取手机的IP地址
    UILAbel 设置了attributedText 后省略号不显示
    swift
  • 原文地址:https://www.cnblogs.com/yimai-series/p/13695228.html
Copyright © 2020-2023  润新知