DDT数据驱动性能测试(一)
一、csv数据文件设置
1、使用场景:测试过程中需要使用手机号码等大量数据时,用random函数随机生成数字;也可以使用Excel拖动生成一批手机号,也有可以从数据库中导出一批手机号,把准备好的数据,放到txt文件,或者csv文件中,使用csv数据文件设置直接调用。
2、txt文件、csv文件:都是文本文件,只是csv文件是用逗号分割列的文本文件
3、使用csv数据文件设置,建议使用 txt文件,有两点原因
3.1 csv文件被打开时,占用的系统资源要多于txt,从性能测试角度分析,要尽可能使用不会影响到性能得文件
3.2 csv文件默认使用Excel来编辑,Excel的默认保存文件编码不是utf8,那么,在文件中有中文的时候,可能就会出现中文乱码
4、文件名:在线程组中添加csv数据文件设置后,必须导入文件,因为文件名为空,jmeter工具就会报错,整个脚本就不能运行
4.1 相对路径:相对的起始点
4.1.1 jmeter的bin文件夹 —-这个是jmeter的脚本默认的保存路径
4.1.2 jmx脚本保存的路径
4.2 csv文件放置位置:放在jmx路径相同的位置,相对路径使用’./’反斜杠
4.2.1 这个./ 可以在linux系统中被使用——也就是说,这个路径可以跨平台(兼容window、 mac、linux)
4.2.2 做性能测试时,我们的jmx脚本可能要放到linux 系统中来运行,所以,我们建议这个相对路径的 斜杠 用 ‘./’
4.3 在使用CLI命令进行性能测试时,建议把csv的文件放在 jmeter命令执行的位置
5、变量名称:定义的变量名称,会接收对应列的值,启动运行,就会从第一行开始取值,默认: 如果你启动运行之后,会循环运行多次,那么,就会自动的从第一行开始往下取值,如果总的运行次数,超过我们文件行数量,就会从第一行开始,再从上往下取值。 多个变量名称之间,用固定逗号来分割
6、忽略首行:选择 false不忽略首行; true忽略首行,从第二行开始
7、分隔符: 默认为“,”这个是csv的默认分割符合 这个可以根据你自己的文件中的分割符来改变。
8、遇到文件结束符再次循环?(T1):默认为TRUE
8.1 文件结束符:文件的最后一行的结束标记
8.2 true:是的,我会继续循环,从头开始循环,文件第一行;false:停止循环
9、遇到文件结束符停止线程?(T2):默认false
9.1 停止循环:停止做某件事情,不再从文件开头进行循环
9.2 false 不,我不会停止脚本的运行;true 是的,我会停止脚本的运行
10、T1+T2
10.1 T1 true + T2 false == 不会停止运行,继续运行,又从头开始取值。
10.2 T1 true + T2 true === 发生冲突,导致T2无效,会继续运行,从头开始循环
10.3 T1 false + T2 true ===我会停止运行,T1也没用了
10.4 T1 false + T2 false ===不会停止运行,T1就一直在最后一个空值 上循环
11、线程共享模式
11.1 所有线程: 所有的并发用户都共享一个csv文件,所有线程取这个文件中的值的时候,循环取值
11.2 当前线程组: 只在这个线程组内共享文件数据
11.3 当前线程: 线程组中每个线程都有一个独立csv文件
11.4 后置处理器、csv数据文件设置等等一些元件中定义的变量,都是 jmeter 的参数变量,不能直接跨线程组。
二、逻辑控制器
1、逻辑控制器是用来控制脚本执行的逻辑顺序,控制的主体为取样器
2、if条件控制:if条件满足才会去执行下面的取样器
2.1 默认请求下,必须使用jexl3 或 groovy这个函数,把表达式的结果计算出来,为真,才执行逻辑控制器下的取样器,如果为假,则不执行,输入框填写计算式:${__groovy(${jcode} == 0,)}
2.2 去掉 Interpret condition as variable expression的复选框,输入框填写表达式{jcode} == 0
3、foreach控制器:对一个明确列表数据来进行循环
3.1 使用场景一:后置处理器提取出多个值的时候,多个值,就会自动带上_数字
3.2 使用场景二:用一个变量来接收,从数据库中返回数据,当这个变量的值有 多个时,这个变量名称后面也会跟上_数字,你要用这些值。
4、循环控制器:控制取样器执行次数
5、仅一次控制器:启动运行之后,每个线程只会运行一次
6、事务控制器
6.1 jmeter中,默认,一个取样器执行一次请求,就是一个事务
6.2 jmeter中,也可以通过事务控制器,把多个接口合并在一起,发起 一次完整的请求,当做一个事务。
6.3 用jmeter做接口的性能测试, 先对单接口进行性能测试,然后,再 试多接口构成业务进行性能测试, 再多业务一起性能测试,系统的性能测试。
6.3.1 全链路:发起请求的数据流的各个环节都需要测试。
6.3.1.1 常规理解:使用jmeter先对1个接口进行测试,再扩展到2-3个,最后慢慢的把整个产品中, 非常多个多的接口,都进行性能测试,对于中小微企业,或者完全还没有性能测试部门的公司,这就是全链路测试
6.4.1.2 真正意义上的全链路:多个接口都需要做性能测试;对应服务器的各个环境,都需要进行监控;流量回放;压测工具 ;全链路监控;全链路性能分析
三、其他协议脚本编写
1、soap协议 = = http协议 + xml数据
1.1 用jmeter写soap协议脚本, 使用http取样器 + xml,数据放在消息体数据中
1.2 soap协议接口版本 1.1版本与1.2版本的区别
1.2.1 消息头: 1.1中 SOAPAction, Content-Type不一样
1.2.2 请求体中,节点的标签名不一样
2、jdbc协议:java语言连接数据库执行sql的api接口协议
2.1 jmeter调用jdbc协议: 需要数据库的驱动
2.1.1 了解数据库的类型dbms: mysql、oracle、 postgresql、sqlite
2.1.2 获取java语言调用数据库的驱动包:通过maven仓库
2.1.2.1 http://mvnrepository.com/ 搜索mysql
2.1.2.2 确认自己的mysql的版本:如果自己的mysql版本为5.7.x的版本,你的驱动包,可以选择大于等于数据库版本的包;如果你的mysql是8.x的版本, 你选择的驱动包, 就要与你的数据库版本一致
2.1.3 把下载的驱动包,放到jmeter的lib/ext文件夹中,然后,重启 jmeter
2.1.4 jmeter连接mysql数据库
2.1.4.1 数据库的ip、port、账号、密码
2.1.4.2 在jmeter中,添加数据库配置信息:JDBC Connection Configuration
Variable Name for created pool: 自定义
DatabaseURL(mysql写法):jdbc:mysql://msyql_ip:port/dbname
JDBC Driver class:当你的数据库版本为5.7.x版本,可以直接 选择 com.mysql.jdbc.Drvier;数据库版本为8.x版本: com.mysql.cj.jdbc.Driver
用户名,密码
2.1.5 执行sql脚本 —–取样器
2.1.5.1 jdbc request
pool: 填写Configuration中自定义 pool名称
SQL Query: 写脚本
query type: select statement
2.1.6 SQL Query:在执行查询语句时不建议查全表,因为jmeter图像界面工具,默认只能支持10m的响应;查看结果树中,默认只会显示最新的500响应,超过了会导致 jmeter卡死,后面程序有部分数据会看不到;在jmeter.properties配置文件中可以修改但是不建议改,因为,我们性能测试不用图像界面,也不用查看结果树。
2.1.6.1 编写sql时这个结尾的分号可以不写,因为,jmeter默认不支持 一个取样器中写多个sql
2.1.6.2 怎么定义变量来接收数据库查询结果:如果想使用特定的参数,则将不使用的参数用一个逗号隔开
2.1.6.3 在sql中引用变量:1、直接变量引用 ${变量} —这种用法,可能存在安全风险不建议使用;2、使用 ? 来占位,占用一个变量引用的位置:parameter values: 填写 ${变量};parameter type: 填写 varchar, 如果要传入整数 integer;注意: query type 修改为 prepared select statement ;带有 prepared 开头是在脚本中,可以传入参数;多个变量时,用逗号分割
2.2 sqlite数据库
2.2.1 是一个关系型数据库,这个数据库,只需要你有图像界面系统,然后有浏览器, 这个数据库在你电脑里已经应用。
2.2.2 使用:下载jar文件 mvn仓库中下载-放入jmeter的lib/ext文件夹, 重启jmeter
2.2.3 JDBC Connection Configuration:pool: 自定义;DatabaseURL: jdbc:sqlite:sqlitefile.db;Drvier class: 选择 org.sqlite.JDBC;账号密码: 空
2.2.4 这个数据库,不用建库,只需要建表;sqlite 数据库是一个内存数据库,但是,这个数据库,不支持多线程并发