Jmeter笔记

顶层是测试计划

 

线程组

开启线程组是测试的前提

第二个:多少秒内启动完10个线程

简单测试就是三个设置为1

逻辑控制器

在线程组底下添加逻辑控制器

if控制器用得最多,如id=1的用户去浏览xx商品,其他去浏览其他商品

接着在if控制器底下添加sampler - http请求,这就意味着只有if条件满足,这个http请求才会发出去

 

为了定义if条件,添加配置元件

 

 添加一个自定义变量:

修改if控制器:定义判断逻辑

再点击顶部这里的开始

查看结果树中就能看到请求结果了。

条件不满足的话,点击开始,查看结果树中是什么都没有的

配置管理

上个小节中看到通过配置元件来配置自定义常量,还可以配置http请求头、cookie等。

jdbc连接:

设置对应连接的变量名字,其他配置默认

接着添加一个jdbc sampler

 设置为之前的jdbc变量名,以及要执行的sql语句

然后再添加一个查看结果树,来获取sql执行结果。

以上创建的都是基于线程组下创建的

前置处理器

对即将发出的请求做特殊处理

添加一个用户参数前置处理器

然后再添加一个beanShell Sampler

 使用java输出之前的变量

添加查看结果树,并运行

但是里面看不到输出结果1.

启动jmeter时,还会启动一个命令行,是输出到那里了,

这里更类似于字符串替换,如果var对应的值是中文,这里就输出System.out.println(中文)

命令行中是没有输出结果的,因为上面代码执行报错de

定时器

用于设置操作与操作之间的等待时间,常用于控制QPS,用于模拟用户的操作。定时器容易掩盖某些性能问题,所以用的不多。

在sampler底下添加定时器

 

这样,当前sampler执行时,就会具有定时的特性了

没有定时器时,sampler是马上执行的

Sampler

用于模拟各种请求,记录响应信息。

BeanShell:自己写Java代码实现自定义操作,Jmeter安装目录里面有个lib目录,就是默认引用了这些 jar包

自己写java代码如果要引用外部jar包,在测试计划中配置:

 

debug sampler:可以输出当前测试的变量,如自定义的配置信息,用于调试信息

后置处理器

实现关联,对sampler发出请求后拿到的响应进行处理,一般用于提取特定数据

如使用正则表达式提取某个响应结果中的数据

指定title为名字,获取结果中的正则表达式匹配结果,被括号包裹

后续的Sampler引用这个提取结果时,使用${title}来引用提取后的数据

断言

在Sampler底下添加,用于检测得到的数据是否符合预期结果

以子串的形式来匹配响应文本

在查看结果树中就能看到断言结果了

 

当断言通过时,向下是没办法展开结果的,只有失败才有

 

功能性验证用断言比较多,高并发测试时一般不用,因为不能保证请求是成功的

监听器

对测试结果进行处理和可视化展示,如查看结果树。

聚合报告:请求的汇总信息,如平均请求时间、吞吐量等

函数助手

下面每个用户的意思就是每个线程

配置好两个值,再点击生成

上面有点类似于文档,对应的函数有两个参数,以及生成调用方式。

在beanShell Sampler中调用:

当线程组中配置线程数不是1时,true和false才能体现出差别

函数助手中有好几个函数,表现出来的效果和线程组中的线程数以及循环次数有关

分布式

配置文件在安装目录的bin目录下

在master中配置slave的ip和端口

重启master的jmeter,就有远程启动的选项了

在salve中指定端口为1099

然后再启动slave中的jmeter-server

效果就是本地的jmeter可以控制远程的jemeter-server来发送请求,并且获取远程请求的结果,就不用耗费本地资源了

数据驱动

从数据文件中读取测试数据,可以理解为更高级的参数化

测试数据与测试代码分离、数据控制过程

能减少测试代码(但要求代码能力高),便于用例的修改和维护,只改数据文件即可

适合:

复杂的业务流程、根据业务场景分流、符合条件的并发场景

用户操作流程:

具体的操作对应的用户分布是根据实际的统计数据来的,如80%的用户先登录等

推荐使用数据库来作为参数数据源:能多台机器共享、数据取数简单,数据是结构化的

Jmeter数据驱动测试:数据库参数化 + 逻辑控制器(用于操作分流)

 参数表

连接数据库:添加配置元件中的jdbc配置

添加一个sampler jdbc request,用于从数据库中读取性别数据到sex变量中

添加一个debug sampler和查看结果树:发现从数据库中取出的数据的命名规律:

sex_#的值就是数组的长度,即表中的记录数量

有了数据的命名规律,就可以用来使用了,添加一个if控制器

一个条件判断就需要一个if控制器

然后在这些条件控制器底下添加满足条件时的sampler

以上使用的变量是sex_1 但是待测试的数据有4个,不可能每个变量都要写两个对应的控制器

 

解决办法A,使用csv:

 csv内容如下,可以从数据库中导出id来实现:

 将变量名设置为id

jdbc查询时,使用这个id

 

 

再将线程组的线程数设置为4

理解:4个线程对应运行4次,每次取出csv中的一行,生成id值,再执行sql,查出对应的性别赋值给sex_1,然后两个if控制对sex_1进行判断,执行对应的请求。

 

解决办法B:

要解决问题,怎么样使if控制器循环起来,而且不读取固定的变量名

思路:一个线程循环4次,每次都要计数,计数可以使用函数助手中的计数器,也可以使用配置元件中的计数器

前面的debuger sampler中可以看到sex_#变量就是4,添加一个计数器,并制定最大值

 

 

控制器中使用函数助手__V对计数器的值进行字符串拼接,即控制器中判断的变量就是动态的了,与计数器的值相关

 

接着再创建一个循环控制器

 

设置一个线程运行一次

两种解决方法的区别:前面是4个线程运行一次,后面是一个线程运行一次

实际模拟用户操作时应该用第一种,因为不同线程模拟不同用户

 

多协议接口测试

http

http sampler中会有响应数据中文乱码问题,解决:jmeter.properties中有个encoding编码,指定为UTF-8,然后再重启jmeter即可

 

http sampler上传文件

 

https:默认端口是443

 

ftp:默认端口21和20

ftp使用两个并行的tcp连接:控制连接21和数据连接20

linux中使用vsftpd来部署ftp服务

 

添加一个ftp sampler,来下载一个文件到本地

运行结果:

扩展组件的开发

demo

创建一个maven工程,添加依赖,

版本最好与本地的jmeter版本一致

工程里写一个类

 

 

使用mvn clean package,把生成的jar包,放入 jmeter目录中

 

重启jmeter,接着创建一个java 请求sampler

可选的类就是我们之前创建的类了,一运行,就会执行上面的输出语句了

其他

除了以上继承类,还可以实现接口

前三个方法:初始化方法、主逻辑方法、收尾

最后一个:当以下列表一选择,对应的类的getDefaultParameter方法就会执行(对应的输出语句输出结果会出现在jemeter一起启动的控制台中)

这个函数用于设置面板底下的参数配置

 

设置参数

效果

 初始化方法里获取用户输入的参数

 

 主逻辑方法中返回结果,就能在查看结果树方法中展示了

 

效果

自定义函数

多加一个function依赖

包名必须是funtions,以及要继承一个类

 

测试

 

 

效果:

列表一展示出来,就会执行第三个方法

一选中之后,就会执行第四个方法,因为以上返回了null,所以会出现一个空指针异常

 

简单实现

 

效果

可见,这个列表是对应多个参数时的描述

 

先检查参数个数是否符合预期,再接收参数

 

主逻辑,转化参数,返回处理结果

测试

 

 

posted @ 2019-11-07 20:33  HelloHello233  阅读(215)  评论(0编辑  收藏  举报