性能测试与Jmeter

一、性能基础知识

1.性能测试的基本概念

1)性能测试:利用自动化脚本或者工具对北侧系统添加一定的负载进行测试,观察系统的性能指标是否满足用户需求或者得到相关性能指标,并进行性能优化工作。

        性能测试的目的:不完全是为了找bug,而是为了验证系统是否满足用户的需求挥着做出系统的性能瓶颈、性能指标

        性能测试手段:工具

        jmeter:基于线程

        loadrunner:基于线程

        locust:基于协程;python第三方库,只能用于压测

2)负载:用户层面--用户、电脑ip;代码层面--线程、进程、协程

3)宕机:死机

4)性能指标:

        ①响应时间RT(response time):反应了服务器处理请求的快慢(服务器处理速度、网络传输、带宽),请求或者某个操作从发出的时间到服务器响应的时间的差值

        ②服务员使用率:

                cpu:计算机做运算,中央处理器(central processing unit)作为计算机系统的运算和控制核心,-是信息处理、程序运行的最终执行单元;关注点:处理队列、使用率;一般建议cpu率在70-80%;

                disk:硬盘,固态硬盘--通过电信号存储数据;机械硬盘--通过接卸的方式把数据存储到磁盘上面

                network:网络带宽(带宽、网卡设备),影响到数据传输;关注点:把吞吐量进行单位换算

                memory:内存,临时存放数据(变量、对象);当计算机重启、掉电后数据不存在;虚拟内存(linux:swap分区):把硬盘挪用一部分出来当着内存使用;大小:一般是物理内存的2倍;物理内存运行速度大约是机械硬盘的100倍;

        ③TPS(transtraction per secong)每秒事务数:反应服务器处理的能力,单位时间内服务器处理事务的数;

                计算公式:用户数/(等待时间+响应时间RT)

                行业TPS参考值:

                        金融:1000-50000tps

                        保险:100-10000tps

                        电商/大型互联网:10000-10000000tps

                        小型互联网:500-10000tps

                        制造业:10-5000tps

                计算方式和实例:

        ④QPS(query per second):每秒查询数,针对数据库而言,反应服务器处理的能力

        ⑤FPS(frame per second):每秒发送帧数,针对游戏测试,反应服务器处理的能力

        ⑥吞吐量(throughtput):单位时间内服务器处理请求的量

                量:可以是氢气数(请求数/s),也可以是字节数(bytes/s),字节数/s居多

                TO:throughtput out服务器返回的量(响应)

                TI:throughtput in进入服务器的量(请求)

        ⑦HPS(hits per second):每秒点击数,反应客户端向服务器发送请求的能力;

        ⑧错误率/成功率:错误率=请求发生错误的数量/总的请求数

        一般要求错误率:0.6-5%

        ⑨并发数:用于并发操作用户数量

                计算:

                        方式1:估算,最大在线用户数8-12%

                        方式2:公式估算

                         方式3:通过tps计算得到

        ⑩pv(page view):页面浏览量,只要浏览某个页面就会统计

                uv(unique visitor):独立访客,通过客户端的cookies实现,即同一页面,客户端多次点击只计算一次,访问量不累计;

                ip:即客户端使用同一个ip访问多次只计算一次,访问量不累计。

5)慢sql:sql运行很慢

6)并发:多用户在某个时间点(集合点)一起做同一个操作

        并行:多个操作一起运行

7)集合点:用于并发操作,多个用户为了实现并发,在某个点进行集合,等到一起再去做相同的操作;

8)吞吐量:反应服务器处理请求的能力,系统单位时间内处理了多少字节的请求

9)性能脚本术语:实现性能测试脚本都会用到这些概念

        参数化=》

        关联=》后置处理器

        集合点=》同步定时器

        事务=》事务逻辑控制器

        模拟用户真是场景:

                ①定时器(固定定时器、高斯定时器)

                ②获取HTML资源

                        检查点=》断言:针对接口、关键性的业务做断言,目的是为了得到错误率

2.被测对象

        代码:代码+多线程

        web(协议请求):代码、工具+多线程

        app、c/s:服务器--代码、工具+多线程;客户端--工具;考虑app、c/s程序载体(手机、pc)

3.核心技术

1)多线程/多进程/多协程,模拟多用户(负载)

2)尽可能模拟用户真实场景:

        ①访问系统

        ②前端相关静态资源

        ③思考时间(等待时间):固定思考时间、随机思考时间

3)基于协议

        ①http、https、websocket等

        ②python脚本:requests库

4.为什么做性能测试

        1)在一定负载下长时间运行,系统是否可以正常处理请求;

        2)有些bug必须在大压力条件下才会被发现:内存泄漏、慢sql、线程池处理、多线程回收(垃圾回收机制)

        3)性能指标是否满足需求(需求规格说明书里面有一定的需求)

                ①承载压力有多大

                ②在大压力情况下成功率必须是多少,错误率不能超过某个值

                ③响应时间

                ④并发用户数

        5)节约服务器资源开销,降低成本

服务器资源:cpu、memory、disk、network(网络带宽)

        6)性能测试是测试六大类型里面必测项之一

5.分类

        1)负载测试(load testing)

                概念:在一定的软硬件以及为网络环境下,向系统改变负载方式,增加负载观察系统的性能指标,是否存在性能瓶颈;

                目的:得到最佳用户数、最大用户数

                场景:拱型场景

                标准的负载模型(如何找最佳用户数、最大用户数)

                最佳用户数:系统的各项性能指标都属处于相对最优的情况

 

        2)压力测试(stress testing)

                概念:在一定的软硬件以及网络环境下,向北侧系统添加大量的负载(最佳用户数、最大用户数)进行长时间运行观察性能指标得到性能瓶颈

                目的:找到性能瓶颈

                场景:门型场景

        3)容量测试(volume testing)

                概念:在一定的软硬件以及网络环境下,向被测系统的存储设备构造大量的不通过数据,添加一定的负载进行长时间运行,观察性能指标

                目的:得到存储设备容量,慢sql(存储设备:数据库、文件服务-专门用于存储系统文件,最终数据都写入磁盘处)

                场景:

        4)并发测试

                概念:在一定的软硬件以及网络环境下,向被测系统某个功能模块一次性添加大量的负载,并长时间运行,观察系统的性能指标

                目的:看系统是否存在慢sql、线程锁(线程池)、锁表

                集合点:

         5)基准测试

                概念:在一定的软硬件以及网络环境下,向被测系统添加单个或者多个负载进行性能测试,验证性能测试环境、性能测试脚本是否存在问题。

目的:验证性能测试环境、性能测试脚本,得到基础数据

        6)稳定性测试

                概念:在一定的软硬件以及网络环境下,向被测系统添加一定的负载并模拟用户真实操作并长时间(3*24 7*24)运行,观察系统性能指标;

                目的:稳定性(尽可能模拟用户真实的场景:环境、操作、长时间)、慢sql、内存泄漏、宕机

                需求:7*24、2*24程序中断=>接下来是跑7*24还是5*24=>7*24

                内存泄漏=>内存消耗接近100%,程序会中断(oom复位:out of memory内存溢出)

        7)配置测试(configration testing)

                概念:在一定的负载下,通过调整软件、硬件环境让被测系统性能指标最优配置;

                目的:得出被测系统软件、硬件最佳配置

                软件:tomcat(内存:jvm内存、线程数)、redis(缓存数据库)、mysql(是否启动缓存,主要针对查询)

                硬件:服务器(使用多少台服务器、cpu、memory、disk、network)

6.怎么做性能测试

关注点:

        1)被测系统是否满足用户的性能需求;

        2)被测系统的性能指标;

        3)被测系统支撑的最佳用户数和最大业务量;

        4)系统是否存在慢sql;

        5)被测系统的内存、线程资源是否得到合理的回收、利用;

        6)被测系统是否能够支持长时间运行;

        7)被测系统出现性能问题后导致奔溃,是否可以恢复;

 流程:

        1)需求分析:

                ①分析被测系统有没有必要进行性能测试(非所有系统都要进行性能测试)--使用用户数大、客户(甲方)要求、系统数据量大(慢sql)、可能存在并发的情况;

                ②分析被测系统那些功能、模块需要进行性能测试;

                ③需要数据(被测数据和指标数据)支撑:

        老产品:测试数据可以来自于运维、前端开发(埋点:数据采集的方法通常由前端完成);每个功能模块的用户访问量以及访问用户发展趋势;得出系统现阶段、未来的某个时间点的用户体量;

        新产品:市场调研、参考同类竞品

        常见的性能场景:

                ①能力验证:在要求平均响应时间小于2秒的前提下,如何判断系统是否能够支持50万用户/天的访问量;基准测试、负载测试、压力测试(可选);

                ②规划能力:某某系统计划在一年内获取用户量达到100万,系统到时候能否支持这么多用户量?如果不能支持如何调整系统的配置;基准测试、负载测试、配置测试;

                ③性能调优:某某系统上线运行一段时间后响应速度越来越慢(服务器、开发的被测系统),此时应该如何处理;基准测试、负载测试、配置测试;

                ④缺陷发现:某些缺陷只有在高负载的情况下才能暴露出来,如线程锁或内存泄漏;并发测试、压力测试、稳定性测试;

        2)设计:

        性能测试方案:

                ①测试目的:
                ②测试范围:

                ③组织架构:

                ④测试环境:性能测试环境和系统测试环境完全不一样,性能测试环境接近真实环境;如果性能测试环境无法达到真实环境,如何开展性能测试?

                ⑤测试准备:测试数据准备

                ⑥测试设计:业务场景分析--根据业务需求去设计场景,根据场景选择测试类型;业务建模--系统一般情况用户访问量最大的时间段,二八原则中80%的业务量集中在20%的时间段内并关注20%的时间段;漏斗模型

                ⑦确定测试类型:基准、压力、并发、稳定性、配置等

                ⑧测试工具:jmeter、loadrunner

                ⑨测试启动/暂停/再启动的准则:

        3)实现:

        脚本实现:

                ①基于协议脚本调试:

                        单用户单迭代:一个线程只循环一次

                        单用户多迭代:一个线程循环多次
                        多用户单迭代:多个线程循环一次

                        多用户多迭代:多个线程循环多次

                ②根据场景、业务模型选择对应工具实现性能测试脚本

                ③模拟用户真实场景:构造多用户、模拟用户的界面访问(除开接口、html请求之外的js、图片、css等请求,即获取前端界面静态资源)、思考时间(等待时间)、模拟并发数、参数化(随机选择)、带宽(网络带宽)、数据库容量(稳定性、容量测试)、是否使用缓存(mysql自带缓存、redis:内存数据库,NoSQL非关系型数据库)、请求数据大小、发送请求的客户端和web服务不能在同一台电脑上

        4)执行:

                ①搭建性能测试环境:被测系统的测试环境、测试监控工具的环境(全链路监控工具pinpoint)

                ②测试数据准备

                ③执行性能测试脚本:收集性能测试结果(数据、图表)

        5)性能结果分析:

                ①根据执行阶段的数据结果进行性能分析,得出性能指标结果,找出性能瓶颈

                ②如果存在性能瓶颈,待开发优化后,再次运行、分析

                ③出性能测试报告:测试目的、测试结果、测试结果分析过程、风险说明

二、性能测试工具之jmeter

1.初识

开源免费、java语言开发,基于多线程,默认(jvm内存设置)可以模拟虚拟用户数300-500个,最大达到一千多;支持跨平台(可以在windows、linux等多个平台运行);支持分布式执行;

2.jmeter安装、环境配置以及安装包:

        1).环境变量配置:

         2).以下为jmeter和jdk安装包,其中直接安装jdk文件并配置环境变量后直接打开Apache-jmeter。bat文件即可直接使用(永久免费)

 链接:https://pan.baidu.com/s/1DZn7tWjtLzO1K-IBm5yAbA 
提取码:pxuo 
 

3. jmeter的常见组件

http组件运行顺序:按照组件的类型进行运行,同类型的组件按照位置的先后顺序运行;组件运行顺序是配置元件-前置处理器-定时器-取样器-后置处理器-断言-监听器;

jmeter核心组件:测试计划、线程组、监听器、配置元件

        1)线程(用户):

        setup线程组:前置

        teardown线程组:后置

        死循环:持续30s运行

        2)取样器

                ①http请求:

                http请求进行文件上传:

                ②调试取样器:显示变量取值

        3)监听器

                ①查看结果树:查看当前线程组所有http请求的结果

                ②聚合报告:收集性能测试数据;总览数据(以功能请求/事务为维度)

                ③用表格查看结果:

                        明细数据:每发送一次收集一次数据

        4)断言

如果针对具体的http请求的断言只需要通过http请求的右键添加;如果是线程全局断言是针对全局有效,一般断言放在对应的请求之后;

         5)配置元件

                ①参数化(常见4种方式):是一种常见的应用

                在jmeter里面变量的引用:${变量名}

第一种:用户定义变量(配置元件):适用于单用户参数

 用户定义的变量在http请求出使用

第二种:用户参数(前置处理器):针对多用户,不同用户取值不同,超出后循环取值

 其中用户数与线程数需配置一致

第三种:csv文件(配置文件):

操作步骤:准备csv文件--添加‘CSV数据文件设置’组件

第四种:函数助手(函数助手对话框):

入口:

 语法:${函数名(参数1,参数2,.......参数n)},其中多个参数可以直接拼接在一起,以下以手机号码为例

                 ②HTTP信息头管理器

用于管理http协议请求头部信息

                 ③http请求默认值:用于添加http请求基本请求数据(协议、host/域名、端口号、编码格式)

                 ④http cookie 管理器:全局管理cookie信息

需要勾选反复清除Cookie

                ⑤JDBC:

                        java database conection使用Java连接数据库,目的就是操作数据库

                        学习内容:使用对应的jar包操作mysql数据库

                        实现步骤:

                                第一步:准备操作对应数据库的jar包,操作mysql数据库的jar包:mysql-connector-java-5.1.16.jar;

                                第二步:把第一步中准备好的jar包放在jmeter安装目录下/lib/ext目录下;

                                第三步:如果jmeter处于运行状态,则重启,否则启动;

                                第四步:连接数据库,在配置元件处的JDBC Connection Configuration

url数据库说明:

也可将数据库的用户名和密码放在url中

                                        第五步:操作数据库

参数的引用和数据库传参操作:

数据库基本操作传参方二:

单个结果值获取:

多个结果值获取:

        6)后置处理器:作用是关联

                ①正则表达式提取器

                关联:把请求(接口)的响应数据结果进行提取,以供后续请求使用;关联接口(接口)

                正则表达式提取器:提取之前保证

正则表达式python实例1:

import re
string='woniuxy123 woniuxy12 woniuxy321 woniu1'
rest=re.search('woniuxy(.*?) woniuxy(.*?) woniuxy(.*?) ',string)
# rest1=re.search('won',string)#带上子字符串从父字符串进行查找,遇到第一个成功的值就返回,如果后面遇到该字符串则不会返回
# rest2=re.match('won',string)#从子字符串开始查找,看父字符串是否以won开头,如果是就会匹配成功,如果不是则匹配失败
# rest3=re.findall('won',string)#子字符串从父字符串进行查找返回所有查找的数值
# print(rest1)
# print(rest2)
# print(rest3)
print(rest)
print(rest.group())
# print(rest.group(0))#group()和group(0)是一样的
print(rest.group(1))#去取正则表达式的第1个分组
print(rest.group(2))#去取正则表达式的第2个分组
print(rest.group(3))#去取正则表达式的第3个分组

正则表达式jmeter实例2:其中模板$1$和$2$就跟上面python中的group(1)和group(2)用法一致

                         ②Json提取器:

JsonPath表达式:总是以与XPath表达式结合使用XML文档相同的方式引用JSON结构。JsonPath中的“跟成员对象”始终称为$,无论是对象还是数组.

JsonPath表达式的点表示法:$.store.book[0]title

JsonPath表达式的括号表示法:$[store"]['book'][0]['title']

json返回值提取方式:其中大括号表示一个节点

json返回值提取实例1:

 json返回值提取实例2:

  json返回值提取实例3:

import re,jsonpath

string={
    "code":True,
    "use_time":0.7159986495972,
    "data":{
        "name":"admin",
        "path":"path",
        "useID":"1",
        "role":"1",
        "config":{
            "sizeMax":"0",
            "sizeUse":1024
        },
        "groupInfo":{
            "1":"write"
        
        },
        "createTime":1575648872,
        "staus":1,
        "lastLogin":1626149394
    }
}

# result=jsonpath.jsonpath(string,'$.data.name')
result=jsonpath.jsonpath(string,'$..name')
print(result)

JsonPath操作符:

  提取单个值:

   提取多个值:

                        ③json断言

 方式一:期望值为具体值

 方式二:期望值为正则表达式

正则表达式工具网址:在线正则表达式测试

三、实战部署phpwind

1.phpwind项目部署

        1)解压得到项目包;=》upload

        2)把第一步得到的解压包放在www(phpstudy)、htdocs(xampp)

        3)启动apache服务器

        4)浏览器输入URL地址:http://ip:port/项目名=》

2.phpwind项目实例进行性能测试

防灌水机制修改:

        1)登录:

登录后跳转的页面:

        2) 正则表达式:进行参数verify、fid提取

提取verify:

提取fid:

        3)发帖:

 

        4)发帖:参数化处理verify、fid

        5)发帖:正则表达式提取rest后在发帖请求处进行使用,注意以下模板中如果存在多个正则提取使用时则模板为$1$$2$,即一个变量去接收两个值

四、性能测试脚本实现

1.脚本录制:badboy、fiddler、浏览器代理设置+jmeter(下图 )

使用badboy录制脚本修改后模拟用户操作场景如下:

        1)随机回帖:

                ①首页获取:得到回帖的reply_fid

                ②随机选择模块:选择回帖板块时将reply_fid设置为变量:

                ③随机选择帖子:使用正则表达式提起tid

                ④随机选择帖子:将tid变量传入,注意不能选择自动重定向

                ⑤回帖:参数使用变量进行处理

                ⑥点击回复:选择帖子进行回复,并将fid取值为变量

                ⑦回帖:断言

2.定时器(3大定时器)

        1)固定定时器:

那个请求发送前需要等待就放在对应的请求之下;如果定时器和http请求统计的话,所有有的http请求都会等待

        2)高斯随机定时器

        3)同步定时器(集合点-并发)

超时时间:默认值为0则表示没有设置超时时间 

获取静态资源:

3.逻辑控制器

        1)if控制器:判断条件可以借助于函数_jexl3和 _groovy(无法使用逻辑运算)

csv文件获取变量id,username,pwd

登录:使用变量username,pwd

函数助手:生成取值为偶数的变量jexl3

函数助手:生成取值为偶数的变量groovy

if控制器:输入对应的表达式以及满足该表达式后执行的请求拖动在在if控制器下

        2)循环控制器:控制代码结果,满足性能测试场景需要;循环次数勾选永远则表示是死循环,输入数字就表示把控制器下面的代码循环运行对应的次数

        3)事务控制器:对应的请求需放置在事务控制器下

        4)吞吐量控制器

五、完整的性能测试过程

性能测试场景(漏斗模型):登录之后,发帖:回帖:看帖=1:2:7

1.测试方案:

        1)目的:基于当前软件、硬件、网络环境得到最佳、最大用户数,找出性能瓶颈;

        2)测试范围:登录、发帖、回帖、看帖

        3)数据准备:用户数、帖子数

        4)业务建模:

                ①登录之后,发帖:回帖:看帖=1:2:7;

                ②可以考虑登录的并发操作

                ③测试类型:基准、负载、压力、并发

2.性能测试脚本实现

3.性能测试(执行)

4.性能分析

        1)图表

               ①自带图表(用不上)

                ②第三方库插件图表:

                        3Basic Graphs:3个基础图像插件

                        5Additional Graphs:5个辅助图像插件、Custom Thread Groups、线程组插件

                        指标关系图:Distribution/Percentile Graphs、KPI vs KPI Graphs

                        PerfMon(Servers Performance Monitoring ):服务器性能自研监控插件、需要结合serverAgent使用

                ③插件安装:

下载网址Install :: JMeter-Plugins.org或者准备jmeter-plugins-manager-1.3jar

注意JMeter-Plugins-Manager与JMeter 2.12版本不兼容,需要JMeter 3.x或更高版本

将文件jmeter-plugins-manager-1.3jar放在jmeter安装目录/lib/ext下如果jmeter处于运行状态则重启生效,并打开jmeter可以看到工具栏-选项-plugins manage(插件管理),进入插件

插件安装

验证:

        方式1:查看jmter插件安装选项install plugins

        方式2:在组件中去寻找

常见图表:

命令执行&测试报告

5.命令行执行

        1)基础命令执行:

                ①帮助命令jmet-h进入jmeter安装目录的bin目录下=》输入jmeter-h

                ②jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test-file[-p property-file] [-l results-file] [-j log-file]

即jmeter.bat(Windows)/jmeter.sh(Linux) -n -t jmeter脚本的绝对路径

        2)保存测试数据:

即jmeter.bat -n -t jmeter测试脚本绝对路径 -l 存放测试结果数据文件(csv文件)的绝对路径

        3)生成测试报告:

创建报告文件夹reporter后根据result.csv文件生成reporter文件夹下的测试报告

jmeter.bat -n -t jmeter测试脚本绝对路径 -l 运行数据结果(csv文件) -e -o 报告目录(文件夹)

        4)可以和CI(持续集成)/CD(持续部署)进行结合

6.分布式执行

【需求】如果使用jmeter模拟几十个虚拟用户?

              可以通过分布式解决

分布式初识:

        master:主机

        slave:奴隶机

        原理:

        工作过程:

                1)master和slave建立后:master和slave之间能够ping通,可以发送请求。传递数据

                2)当master启动时,master就把当前的这个“脚本”发送给对应的slave;

                3)slave接收到脚本后利用本地jmeter工具执行脚本;执行完成后把测试结果数据返回给master;

                4)master接受对应slave的结果数据,并进行展示;

                【说明】master所在的电脑也可以作为slave。

        部署:

                【前提条件】建议把jmeter加入系统环境变量里面

                                     JMETER_HOME:D:\LEARN\Jmeter\apache-jmeter-2.12

                                     PATH:%JMETER_HOME%/bin

                1)准备master和slave,保证master和slave相互间能够ping通(目的:发送请求、传输数据);

                2)修改master的配置:

                        ①在bin目录下修改jmeter.properties配置文件的

                                第一步:添加slave

                                              ip:port:ip-slave的ip地址,port-建立连接的端口号,默认是1099                   

                                  第二步:禁用ssl(https)     

                3)把master上的jmeter复制slave里面;并进行响应的配置修改:jmeter目录下bin里面的jmeter-server:此处的ip地址为slave

                4)启动:

                                第一步:启动slave bin下的jmeter.bat(windows)、jmeter-server(linux启动方式:sh jmeter-server;./jmeter-server的路径)

                                                windows:

                                                linux:

                                第二步:在master上启动jmeter(jmeter.bat、ApacheJMeter.jar)

                5)验证执行

                                第一步:工具栏-运行-远程启动:可以看到master中jmeter.properties配置的slave的ip地址和对应的端口号

                                第二步:单个slave调试:工具栏-运行-远程启动-选择某个slave

                                第三步:全部运行:工具栏-运行-远程启动全部

         【注意事项】

                1)master和slave必须相互ping通;

                2)master和slave上的jmeter版本必须相同;

                        以内master和slave收集数据中脚本

                3)master和slave必须关闭防火墙

                4)如果master、slave上有类似vmware这样的虚拟软件虚拟出来的虚拟网卡,需要对这些虚拟网卡禁用;

       

                5)jmeter脚本里面如果引用了csv文件,则需要保证slave在相同路径下有相同的csv文件        

                6)jmeter脚本里面服务器名称或ip地址不能使用127.0.0.1或localhost;

六、jmeter高阶之beanshell

1.初识

        beanshell是什么:

                 beanshell是一种完全符合java语言规范的脚本语言,并且又拥有自己的一些语法和方法;

                 beanshell是一种松散类型的脚本语言;

                 beanshell是用java写成的,一个小型的、免费的、可以下载、嵌入式的java源代码解释器,具备对象脚本的特性;

                 beanshell可以执行标准java语句和表达式以及另外自身的一些脚本命令和语法

        基本语法:

                beanshell语法类似于java,但不等于java;

                java( beanshell)强类型语言,python弱类型语言;

                        强类型语言:变量必须先声明再使用;声明时必须指定数据类型

        特征:

                 1)变量必须先声明再使用;建议声明时必须指定数据类型;

                 2)针对字符串必须使用双引号

                 3)代码以英文的分号或者大括号结束;

2.为什么学习

        jmeter组件存在局限;部分功能无法通过组件实现,所以就考虑使用jmeter自主开发脚本插件beanshell实现;

3.beanshell基本语法        

        1)数据类型(8种基本数据):

                ①6种数字:byte、整型、短整型、长整型、单精度浮点型、双精度

                ②字符串

                ③bool     

                ④数组

代码如下:

//声明字符串
String str="class83";
log.error(str);
//声明整型
int num=1;
log.error(""+num);
//声明单精度浮点型
float f_float=1.234;
log.error(""+f_float);
//声明双精度浮点型
double d_num=1.234569;
log.error(""+d_num);
//声明bool类型
boolean bool=true;
log.error("bool类型"+bool);
//声明数组:数组相当于python中的列表
List mylist=new ArrayList();//声明了一个数组变量
log.error("空数组>>"+mylist);
//向数组里面添加值
mylist.add(str);
mylist.add(num);
mylist.add(f_float);
mylist.add(d_num);
mylist.add(bool);
log.error("添加数据之后的数组>>"+mylist);

        2)控制结构:

                ①分支结构(if)         

//分支结构if
/*
 【语法】
 if(bool表达式){
     bool表达式为true运行的代码块
 }else{
     bool表达式为false运行的代码块
 }
*/
num=1
if(num1==1){
    log.error("测试通过");
    }else{
        log.error("测试失败")
        }

                        ②循环结构(for 、while)

//循环结构for while
/*
【for循环】
for(循环变量声明;循环条件(布尔表达式);循环变量更新){
    满足循环条件是运行的代码

}
*/
//for(int i=0;i<=5;i++){//i++相当于python里面的i+=1
//    log.error(""+i);
//}
//【需求】当i是偶数时输出,否则不做任何操作
for(int i=0;i<=5;i++){//i++相当于python里面的i+=1
    if(i%2==0){
        log.error("偶数"+i);
        }
}

                        ③顺序结构

        3)内置方法/对象

                ①log:打印输出内容;只能打印输出字符串;如果是其它的数据类型需要转换一下

                        log.error():打印错误信息

                        log.warn():打印警告信息

                        log.info():打印详细信息

                        log.debug():打印调试信息

                        log.trace():

                ②var:获取、声明、修改jmeter变量的

                        vars.get():获取jmeter变量

                        vars.put():声明、修改jmeter变量

                ③prev:获取取样器的响应结果

                        rest=prev.getResponeDataAsString()

                ④Failure:如果断言失败Failure=true,如果断言成功Failure=false

                ⑤FailureMessage:断言失败后的提示信息,等同于“断言失败自定义消息”

                ⑥props:修改配置信息

                ⑦ctx:上下文

        4)其他

                快捷键:注释/取消注释:ctrl+/

         5)运算符:

                逻辑与:&&

                逻辑或: ||

                逻辑非:!                 

4.beanshell组件

        1)beanshell取样器

        2)beanshell前置处理程序

        3)beanshell定时器

       4)beanshell后置处理程序

        5)beanshell断言

                需要使用beanshell的prev、Failure、FailureMessage和判断分支

                 断言有三种方式:

                           ①equals():恒等
                           

                

                           ②contains():包含

                                rest.contains(预期结果)

                           ③matches():正则匹配

                                rest.matches(正则表达式)

        6)beanshell监听器

5.应用场景

        1) json数据处理:操作步骤如下

               ①引入包:

                        添加jar包和目录,准备org.json.jar解压之后放在jmeter安装目录下/lib/ext之下

           

        ②导包

       ③代码实现

                实例:

                登录json处理:

                 用户查询json处理:

                

                数据库断言处理:

        2)引用java代码运行

                ①java代码形式(3种)

                        xx.java:java源码文件

                        xx.class:基于java源码文件进行了编译

                        xx.jar:打包jar包(等同于war包)

                ②代码执行

                        第一步:java源码(注意:文件名和java代码里面的类名必须相同)

                                        

                        第二步:编译之后class文件:

                                环境准备:保证jdk环境的变量时ok的

                                ①利用java的源码进行编译,命名javac java源码文件的绝对路径

                                        javac取决于classpath

                                ②代码实现

                                        引用class文件:“addClassPath(class文件的目录)”

                                        调用:

                                              引包:import Hash  

                                              代码实现:

                        第三步:打包之后jar包文件

                                        操作步骤:

                                                ①打包jar包文件:命名“jar cvf Hash.jar 被打包的java对应编码的class文件”

                                                ②引入jar包:测试计划-浏览-选择jar路径

                                                ③导包

                                                ④调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值