·测试一般什么时候需要去操作数据库呢?
·详细设计阶段,针对数据库进行测试。
范式、表名、表字段、类型的检查、测试等。
1、需要用到数据库的场景
·1根据测试用例去构造测试数据。
·2查询数据库的数据、获取预期结果。(使用JDBC后置处理器)
·3查询数据库的数据、作为测试的输入。(使用JDBC前置处理器)
·4查询数据库的数据、判断业务操作是否成功。(使用JDBC后置处理器)
·5性能测试。
2、JMeter操作数据库
1.Jmeter如何去操作数据库呢?
Jmeter是一个java应用,所以对于数据库的操作是通过JDBC的方式来实现的。那就意味着要使用Jmeter完成对数据库的测试,需要用户自行根据实际情况去下载相应的数据库的JDBC驱动,如:mysql-connector-java-5.1.20-bin.jar。驱动下载之后,将jar包放入Jmeter的lib目录。
在Jmeter中,针对数据库进行测试的话,常用到的组件有四个:
1、JDBC Connection Configuration:实现JDBC连接配置,属于必选组件。
2、JDBC Request:JDBC请求、是用来实现数据库请求的。结果会计入查看结果树和聚合报告
3、JDBC前置处理器:是用来在不同的协议请求之前去实现相关的数据库操作。
比如说:测试数据的初始化、查询数据作为请求参数等。结果不会计入查看结果树和聚合报告
4、JDBC后置处理器:是用来在不同的协议请求之后去实现相关的数据库操作。
比如说:测试数据的还原、查询数据作为检查条件等。结果不会计入查看结果树和聚合报告
PS:JDBC Request、JDBC前置处理器、JDBC后置处理器这三个组件的配置选项基本一致,只是用途不同、使用场景不同而已。
2.各组件配置
1·JDBC Connection Configuration(在配置元件中):
Variable Name:变量名称,由用户自定义的,用来标识JDBC连接配置器,在后续的JDBC请求组件中需要用到。
Validation Query:select 1,用来测试连接
Database URL:数据库的链接地址,不同类型的数据库,写法不一样。如果遇到解析Date异常,在URL后面加参数:
?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull
JDBC Driver class:不同类型的JDBC驱动中的Driver类的package路径,包括类名本身。不同类型的数据库是不一样的。
PS:URL和Driver class在Jmeter的帮助是有示例的。
用户名:具有访问权限的数据库用户名。
密码:用户的密码。
2·JDBC Request的配置:
·Variable Name:该处填写的是在JDBC Connection Configuration组件中所设置的Variable Name,表示使用对应的JDBC Connection Configuration组件来实现数据库连接。
·Query Type:请求类型,可选的类型如下:
·Select StateMent:表示执行的sql是select语句。
·Update StateMent:表示执行的SQL是增删改类操作。关键字:update、insert、delete、create、drop等。
·Callable StateMent:主要是用来调用存储过程的,但是也可以用来实现其它所有SQL请求。
·PrePared Select StateMent:表示执行的sql是select语句,但是允许在SQL语句中通过?来实现传参(SQL层面的传参,不是Jmeter)。
·PrePared Update StateMent:类似于Update StateMent,表示执行的SQL是增删改类操作。但是允许在SQL语句中通过?来实现传参(SQL层面的传参,不是Jmeter)。
PrePared类型的专属选项有以下两个:
·Parameter values:该处填写的就是需要传递给带?的SQL的参数值。参数值的数量、顺序和SQL语句中的问号保持一致。参数值之间使用逗号分隔。如:35,male
·Parameter Types:该处填写的是参数的类型,数量、类型和Parameter values保持一致,要求大写,使用逗号分隔。如:INTEGER,VARCHAR
通用选项:
·Variable Names:该处可以填写的是由用户自定义的变量名称,用来存储SELECT语句查询的结果。
1·变量名称可以有多个,使用逗号分隔。
2·变量是按照顺序去存储查询结果,一个变量存储一列值,即第N个变量存储结果中的第N列值。
3·存储方式采用的是数组方式,下标是从1开始,即下标1表示当列的第一个值。下标N表示第N个值。并且每一个变量都会有一个隐藏的参数叫:Vname_#=N,用来存储值的个数