性能测试
性能测试是什么
广义定义
给予协议模拟用户发出请求,对服务器形成一定负载,来测试服务器的性能的指标是否满足要求性能支出表关注点:时间性能、空间性能性能与页面无关
狭义定义
指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件对系统的各想性能指标进行测试
性能测试工具
jmeter简介
我们为什么使用jmeter
开源、免费、基于java编写、科技城到其他系统可扩展各个功能插件支持接口测试、压力测试等多种功能、支持录制回放、入门简单相较于自己编写框架其他开源工具、有较为完善的ui界面、便于接口测试多平台支持、可在linux、windows、Mac上运行、支持多协议、
jmeter的作用
接口测试、面试说postman、因为方便好用
性能测试jmeter,也可以用postman,但是没有性能指标
数据库测试
jmeter怎么用
Windows下Jmeter下载安装,登录http://jmeter.apache.org/download_jmeter.cgi,根据自己平台,下载对应文件
使用jmeter测试快速入门
线程组是什么
进程: 一个正在执行的程序对应一个进程
线程: 一个进程有多个执行线程
线程组: 按照线程性质对线程分组。查看任务管理器(爱奇艺有多个)
三者关系: 一个进程有多个线程组,一个线程组有多个线程
线程组主要包含三个参数:
线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。
线程数
虚拟用户数。一个虚拟用户占用一个线程。设置多少虚拟用户数在这里也就是设置多少个线程数
准备时长(秒):
设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程。
循环次数:
每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一直到选择停止运行脚本。
调度器
设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
持续时间(秒)
测试持续时间,会覆盖结束时间
启动延迟(秒)
测试延迟启动时间,会覆盖启动时间
启动时间
测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它
结束时间
测试结束时间,持续时间会覆盖它。
创建http请求
指定请求域名,请求路径
一个HTTP请求有着许多的配置参数,下面将详细介绍:
名称:本属性用于标识一个取样器,建议使用一个有意义的名称。
注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。
服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。
端口号:目标服务器的端口号。
方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
Content encoding :内容的编码方式,默认值为iso8859
路径:目标URL路径(不包括服务器地址和端口)
Jmeter主要组件介绍
测试计划:使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
线程组:代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。可以在“测试计划->添加->线程组”来建立它,然后在线程组面板里有几个输入栏:线程数、Ramp-Up Period(in seconds)、循环次数,其中Ramp-Up Period(in seconds)表示在这时间内创建完所有的线程。如有8个线程,Ramp-Up = 200秒,那么线程的启动时间间隔为200/8=25秒,这样的好处是:一开始不会对服务器有太大的负载。线程组是为模拟并发负载而设计。
取样器(Sampler):模拟各种请求。所有实际的测试任务都由取样器承担,存在很多种请求。如:HTTP 、ftp请求等等。
监听器:负责收集测试结果,同时也被告知了结果显示的方式。功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S……)等。
断言:用于来判断请求响应的结果是否如用户所期望,是否正确。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
逻辑控制器:允许自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
定时器:负责定义请求(线程)之间的延迟间隔,模拟对服务器的连续请求。
配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。
前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据
测试计划
1.测试计划就是一个完整的场景
2.“独立运行每个线程组” :勾选以后所有的线程组都是顺序执行的了。一般不勾选,让所有 的线程组并发启动。
3.“函数测试模式” :勾选后会有详细的请求记录,消耗资源,影响客户端性能。一般不勾选。
4.用户定义的变量:全局变量,测试计划上可以添加用户定义的变量。一般添加一些系统常用的配置。如果测试过程中想切换环境,切换配置,一般不建议在测试计划上添加变量
线程组
thread group(线程组)
这个就是我们通常添加运行的线程。通俗的讲一个线程组,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。
取样器(Http请求)
名称:用于标识一个sample。建议使用一个有意义的名称
注释:对于测试没任何影响,仅用来记录用户可读的注释信息
服务器名称或IP:http请求发送的目标服务器名称或者IP地址,比如http://www.baidu.com
端口号:目标服务器的端口号,默认值为80,可不填
监听器
监听器(Listener)负责收集测试结果,同时也被告知了结果显示的方式。我们常用的包括:聚合报告、查看结果树、用表格查看结果,都支持将结果数据写入文件。其他的添加上去看看就行。聚合报告前面我们介绍过,后面是查看结果树和用表格查看结果的截图。
循环控制器
事务控制器
作用: 事务控制器会生产一个额外的采样器,用来统计该控制器子结点的所有时间。
在线程组下创建事务控制器
断言---检查点
断言(Assertions)可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
两个重要断言:响应断言和JSONAssertion
前置处理器和后置处理器
前置处理器(Pre Processors)和后置处理器(Post Processors)负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。我们主要在动态关联中用到后置处理器的正则表达式提取器
定时器
定时器(Timer)负责定义请求之间的延迟间隔
Jmeter组件参数化
参数化是什么
动态的获取并设置数据
为什么使用参数化
执行批量操作,批量添加批量删除,人工效率太低
运用程序代替人工获取并设置数据,安全高效
比如:对被测系统的用户名和密码进行参数化,来模拟多个用户同时登录系统
参数化实现之用户自定义变量
通过这个功能,能实现多接口共享数据,修改一条即可修改全部
参数化实现之CSV Data Set Config
添加CSV Data Set Config:
添加界面:
通过这个组件可以动态获取并设置数据,实现批量添加操作
使用Jmeter函数助手(文件中不要出现中文):
1、点击 选项-->函数助手 调出函数助手对话框2、选择 _CSVRead 函数(下图第一个框)3、函数参数:1)第一个参数:填写文件路径。2)第二个参数:文件列号是从0开始的,第一列0、第二列1、第三列2、依次类推,然后点击【生成】按钮,则会自动生成我们需要的参数化函数。3)复制生成的参数化函数,copy过程需要使用的地方即可。4)_Random函数是从某数据段随机读取数据替换参数,当需要添加多条数据记录且某些字段需要唯一性时使用。
Jmeter正则表达式提取
使用正则提取
运用Jmeter正则提取器,可以从请求的响应结果中取到需要的内容,从而实现关联。关联是请求与请求之间存在数据依赖关系,需要从上一个请求获取下一个请求需要回传回去的数据
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
Jmeter脚本录制和压测
在进行测试的时候,可能有好多脚本或者界面需要操作测试,并且有些测试链接需要重复多线程高并发进行测试,我们一般会针对这一些操作,进行一个脚本录制,录制好之后,之后测试就可以在这个基础上进行测试。
Jemeter脚本录制方式
web端:BadBoy脚本录制app端:使用Jmeter自带的代理服务器进行脚本录制
Android手机端脚本录制
前提:电脑和手机在同一网络段上
1、添加http代理服务器
2、在线程中添加录制控制器
3、在http代理服务器中指定录制脚本的路径,默认端口8888
4、查看本地的ip(wifi热点)
5、设置移动端代理,IP和端口号
6、启动点击”ok”
7、打开手机app,抓取接口
8、点击”停止”按钮,结束录制
安装badboy脚本软件
打开badboy软件
badboy脚本录制
点击录制按钮进行脚本录制,完成打开搜狗搜索,搜索测试岗位薪资操作,然后停止,回放,(回放的时候,会因为编码原因导致乱码,需要手动调乱码问题)
添加验证点
验证点的作用就是验证脚本是否按照我们测试的思路执行,判断脚本执行过程中是否存现问题
badboy参数化
所谓参数化,是指请求的某个参数提前设定多个值,在具体请求的时候,去获取提前设定的值,不同的业务场景设置的参数不一致。
导出Jmeter脚本
在Jmeter中导入badboy生成的脚本,验证测试
badboy并发测试
选择tools run background
badboy测试报告
在badboy-->view--->report下可以看到测试报告
Jmeter脚本录制和压测