【软件测试】 性能测试 & JMeter脚本开发!

一、JMeter脚本开发实战

实例:查询一个城市的天气预报

使用抓包工具观察请求所产生的请求列表,筛选最核心API。

A、获取城市代码

http://toy1.weather.com.cn/search?cityname=西安

B、获取天气

http://www.weather.com.cn/weather1d/101110101.shtml#search

C、编写JMeter脚本

1、JMeter参数化,用户自定义变量,也可以通过csv Data setConfig引入大量数据。

2、添加HTTP请求,获取城市代码。

通过${var}方式引用之前定义的变量,设定编码为UTF-8,否则结果为乱码。

3、为此次HTTP请求,增加HTTP头信息、响应断言、结果树。

响应断言:当断言失败时,断言结果会指出失败原因。

4、通过正则表达式,提取城市编码。

5、添加HTTP请求,获取具体城市天气预报。

二、场景设计

A、运行场景

  • 运行方式:GUI、命令行
  • 运行架构:本地运行、远程运行

1、GUI运行、本地运行 - 参考上文

2、命令行运行

命令行模式运行JMeter测试脚本能够大大缩减所需要的系统资源。

1).需要设置PATH环境变量把JMeter软件目录囊括进去

JMETER_HOME=D:\JavaDEV\Java\apache-jmeter-5.1.1 
PATH=%JMETER_HOME%\BIN

2).命令行执行

jmeter -n -t "D:\JavaDEV\Java\apache-jmeter-5.1.1\bin\demo\天气预报.jmx"

常用参数:

  • -h,帮助 - 打印帮助信息并退出
  • -n,非GUI模式 - 非GUI模式下运行JMeter
  • -t,测试文件 - 要运行的JMeter测试jmx文件
  • -l,日志文件 - 记录结果的文件
  • -r,远程执行 - 启动远程服务
  • -H,代理主机 - 设置JMeter使用的代理主机IP
  • -P,代理端口 - 设置JMeter使用的代理主机的端口号

3).结果查看

JMeter GUI->添加聚合报告->所有数据写入一个文件,选择刚生成的log文件就可以对执行结果进行直观分析了。

3、远程运行

1).修改设置控制机jmeter.properties文件,假设远程机的地址为192.168.0.10

# Remote Hosts - comma delimited 
remote_hosts=127.0.0.1,192.168.0.10
remote_hosts=localhost:1099,localhost:2010

2).运行远程机的jmeter-server.bat批处理文件

3).在控制机上运行远程按钮

B、性能参数配置

JMeter运行在JVM之上,因此可以根据场景修改JVM配置,具体的JVM参数参考相关总结。

三、JMeter元件库

元件的运行顺序和作用域是JMeter最精髓的所以,也是JMeter优缺点的体现。

A、执行顺序

元件执行顺序,配置元件config elements->前置处理程序Per-processors->定时器timers->取样器sampler->后置处理程序post-processors->断言assertions->监听器listeners

B、元件作用域

  • 配置元件,影响作用域内所有元件
  • 前置处理程序,作用域内每个取样器之前执行
  • 定时器,作用域内每个取样器有效
  • 取样器,无作用域
  • 后置处理程序,作用域内每个取样器之后执行
  • 断言,作用域内

C、线程组

通过「线程组」实现并发,同时去执行相同的一批次任务,每个线程之间都是隔离的,互不影响的。线程的执行过程中,操作的变量,不会影响其他线程的变量值

Delay Thread creation until needed(延迟创建线程直到需要): 默认情况下,测试开始的时候,所有线程就被创建完了。如果勾选了此选项,那么线程只会在合适的需要用到的时候创建。

Ramp-Up Period:线程启动时间,多少个线程,多长时间启动(秒),每个线程执行多少次循环。

取样器错误:当线程执行取样器失败的时候,要执行的策略选项

  • 继续:忽略错误,继续执行
  • Start Next Thread Loop(启动下一线程循环):忽略错误,线程当前循环终止,执行下一个循环
  • 停止线程:当前线程停止执行,不影响其他线程正常执行
  • 停止测试:整个测试将在当前正在执行的线程执行完毕后停止
  • 立即停止测试:整个测试会立即停止执行,当前正在执行的取样器如果可能会被中断

调度器

If Loop Count is not 1 or Forever, duration will be min(Durationm, Loop Count * iteration duration).

如果不想立即执行执行,可以通过调度器控制测试执行的开始时间和结束时间。

  • 持续时间(秒):控制测试执行的时间
  • 启动延迟(秒):控制测试多久后启动执行

D、汇总报告(summary Report)

  • Label:取样器名称
  • Samples:发送的请求总数
  • Average:平均响应时间
  • Min:最小响应时间
  • Max:最大响应时间
  • Std.Dev.:所有请求响应时间的标准差
  • Error%:出错率(出错的request数/所有的request数)
  • Throughput:吞吐量,每秒/每分钟(具体看单位)处理的request数
  • Received KB/sec:每秒从服务器端接收到的数据量
  • Avg.Bytes:服务端返回给request数据的平均值,可以理解为:服务端返回所有数据/请求数

E、聚合报告(Aggregate Report)

类似汇总报告。

F、HTTP代理服务器

对于一些HTTPS协议的系统需要在启动代理后,安装JMeter/bin下的证书,才能使用代理服务器,如果手机的录制,需要设置手机的代理服务器、端口,并在手机端安装证书。

  • TYPE,默认为空,可选项HttpClient4、Java、空值
    • Java,使用JDK中的net包模拟浏览器
    • HttpClient4,使用Apache HttpClient4模拟浏览器
    • 默认为空值,使用jmeter.properties中jmeter.httpsampler的配置
  • Requests Filtering->Content-Type filter
    • Include,Content-Type白名单,表示哪些Content-Type可以通过
    • Exclude,Content-Type黑名单,表示哪些Content-Type被拒绝
  • Prefix,对每个录制的HTTP请求的前缀命名,默认为空,则录制的请求会按照数字递增的方式进行命名
  • 自动重定向,当发送HTTP请求后得到的响应是302/301时,JMeter自动重定向到新的页面,比如从页面A重定向到页面B,只会记录页面B的信息,页面A的信息称之为过程信息,如果要做关联就不能搞定了。另外自动重定向只针对GET和HEAD请求,不能使用在PUT和POST上
  • 跟随重定向,是否启用跟随重定向,是指发生重定向时,会生成Sampler请求
  • Use KeepAlive,JMeter和目标服务器之间使用Keep-Alive方式进行HTTP通信,默认选中,KeepAlive有一个保持时间,可以在不同的web服务器中设定这个时间
  • 从HTML文件获取所有内含的资源,当该选项被选中时JMeter在发出HTTP请求并获得响应的HTML文件内容后,还对该HTML进行Parse并获取HTML中包含的所有资源(图片、Flash等)

G、HTTP请求

  • 参数Parameters - 随着请求一起发送的参数,可以是GET/POST方法
  • 协议 - HTTP、HTTPS、FILE,默认为HTTP
  • 消息体数据Body Data:使用POST时用到
  • 文件上传File Upload - 当需要文件上传时用到,MIME类型可以通过网络抓包工具获取
  • 保存响应为MD5哈希Save response as MD5 hash:选中该项,在执行时仅记录服务端响应数据的MD5值,而不记录完整的响应数据;在需要进行数据量非常大的测试时,建议选中该项以减少取样器记录响应数据的开销

H、用户定义的变量

名称、描述。

使用变量的方法:${variableName}

I、Http Cookie管理器

  • 每次清除Cookies - 每次线程组启动时都会清除Cookie
  • Cookie Policy - Cookies策略
    • ignoreCookies - 忽略所有Cookies,用来防止HttpClient接受和发送Cookies

J、Http Header管理器

头信息管理,User-Agent、Content-Type、Accept、Cookie等头部信息。

四、其他元件库

A、定时器

B、逻辑控制器

C、配置元件

D、前置处理器

E、后置处理器

F、断言

G、监听器

五、脚本开发

A、BeanShell

1、BeanShell概念

  • BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法。
  • BeanShell是一种松散类型的脚本语言。
  • BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有脚本语言特性,非常精简的解释器Jar包大小为175k。
  • BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。

2、JMeter中常用的Bean Shell

  • 定时器:BeanShell Timer
  • 前置处理器:BeanShell PreProcessor
  • 采样器:BeanShell Sampler
  • 后置处理器:BeanShell PostProcessor
  • 断言:BeanShell断言
  • 监听器:BeanShell Listener

3、BeanShell的用法

JMeter的BeanShell中内置了变量,使用者可以使用内置变量与JMeter进行交互。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值