zoukankan      html  css  js  c++  java
  • 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,所以会出现一个空指针异常

    简单实现

    效果

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

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

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

    测试

     

  • 相关阅读:
    PHP数组、函数
    PHP 基本内容
    Swift基础--tableview练习
    iOS 协议delegate分六步
    UI09_UITableView 使用 单例
    css清除浮动float的三种方法总结,为什么清浮动?浮动会有那些影响?一起来$('.float')
    CSS 如何使DIV层水平居中
    HTML转义字符大全
    jQuery选择器总结
    jQuery 学习笔记_01
  • 原文地址:https://www.cnblogs.com/hellohello/p/11815402.html
Copyright © 2011-2022 走看看