zoukankan      html  css  js  c++  java
  • 性能测试工具Jmeter->接口测试、参数关联-CSV文件

    
    

    性能测试

    1. 概念:

      基于协议模拟用户发出请求,对服务器形成一定负载,来测试服务器的性能指标是否满足要求

       

    2. 性能指标关注点:时间性能、空间性能

       

    3. 性能测试与页面无关

    1. 性能测试定义:指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

    2. 性能测试类型:

      1. 基准测试:在给系统施加较低压力时,查看系统的运行状况并记录相关数做为基础参考

      2. 负载测试:是指对系统不断地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到安全临界值,例如某种资源已经达到饱和状态等 。

      3. 压力测试:压力测试是评估系统处于或超过预期负载时系统的运行情况,关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。

      4. 稳定性测试(可靠性测试):在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。

      5. 并发测试:测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题。

    1. 性能测试指标(举例)

      1. 一个理发店,3个理发师,30分钟搞定一个顾客

      2. 每次同一时刻会有不同数量的客户进店要求理发

      3. 顾客要求苛刻,最多等30分钟

      4. 思考顾客理完头发时间变化

      不同数量的客户同时进店,享受完服务所用的时间 同时进店客户数,1h内完成的剪头数量

     

    1. 性能测试流程

      1. 需求分析

      2. 测试对象:常用的核心业务,数据量、并发量较大,比如:注册,登录,搜索,添加购物车,下单,支付

      3. 性能指标:要求500万用在8小时内完成

      4. 测试场景:单一场景,测试某一个单一功能,

      5. 混合场景,多功能组合的场景,多业务测试

      6. 测试计划、测试目标、测试人员安排、测试进度安排

      7. 压力机选择:配置、要求,数量 、风险。

         

    2. 测试方案 测试工具:jmeter。loadrunner 测试环境:数据库,服务器,架构设计,有条件下尽量和生产环境(线上环境)一致 测试策略:单一场景,测试某一个单一功能, 混合场景,多功能组合的场景,多业务测试 监控工具:Windows系统中perfmon.exe

    3. 用例设计

    4. 测试执行

    5. 定位分析问题:前端,后端:代码、软件、硬件网络


     

    jmeter介绍

    jmeter是一款性能测试工具,开源、免费、多平台使用。

     1.测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
     2.线程组:代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。可以在“测试计划->添加->线程组”来建立它,然后在线程组面板里有几个输入栏:线程数、Ramp-Up Period(in seconds)、循环次数,其中Ramp-Up Period(in seconds)表示在这时间内创建完所有的线程。如有8个线程,Ramp-Up = 200秒,那么线程的启动时间间隔为200/8=25秒,这样的好处是:一开始不会对服务器有太大的负载。线程组是为模拟并发负载而设计。
     3、取样器(Sampler):模拟各种请求。所有实际的测试任务都由取样器承担,存在很多种请求。如:HTTP 、ftp请求等等。
     4、监听器:负责收集测试结果,同时也被告知了结果显示的方式。功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S……)等。
     5、断言:用于来判断请求响应的结果是否如用户所期望,是否正确。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
     6、定时器:负责定义请求(线程)之间的延迟间隔,模拟对服务器的连续请求。
     7、逻辑控制器:允许自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
     8、配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。
     9、 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。

    #3、jmeter工具使用

    1、线程组是什么

     进程: 一个正在执行的程序对应一个进程 
     线程: 一个进程有多个执行线程
     线程组: 按照线程性质对线程分组
     三者关系: 一个进程有多个线程组,一个线程组有多个线程
     
     并发执行:多个线程同时执行,特点:执行结束的顺序与开始的顺序不一致
     顺序执行:按照线程的启动顺序挨个执行
     默认情况下,线程组中的线程是并发执行
     每一个线程都要执行组内的http请求
     设置线程组顺序执行:勾选测试计划中的(独立运行每个线程组)
     
     2.线程组主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。
     3.线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
     4.准备时长(秒):设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程。
     5.循环次数:每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
     6.调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
     7.持续时间(秒):测试持续时间,会覆盖结束时间
     8.启动延迟(秒):测试延迟启动时间,会覆盖启动时间
     9.启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它。
     10.结束时间:测试结束时间,持续时间会覆盖它。

    2、http请求

     一个HTTP请求有着许多的配置参数,下面将详细介绍:
     名称:本属性用于标识一个取样器,建议使用一个有意义的名称。
     注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。
     服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。
     端口号:目标服务器的端口号。
     方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
     Content encoding :内容的编码方式,默认值为iso8859
     路径:目标URL路径(不包括服务器地址和端口)

    3、监听器

     监听器(Listener)负责收集测试结果,同时也被告知了结果显示的方式。我们常用的包括:聚合报告、查看结果树、用表格查看结果,都支持将结果数据写入文件。其他的添加上去看看就行。

    4、聚合报告

     lable:对应每一个http请求,显示的是http请求的Name,如百度http请求name为baidu
     Samples:表示这一次的测试中一共发出了多少请求,如上图所示,sougou和baidu的http请求每个都发出30个请求
     Average:平均响应时间,指的是所有的请求的平均响应时间,如上图的30个请求的总的响应时间除以30得出的平均响应时间,默认的情况下是单个请求的平均响应时间,但当使用了“事务控制器”时,则以事物为单位显示平均响应时间
     Median:中位数,也就是50%用户的响应时间
     90%Line:90%用户的响应时间
     Min:最小响应时间
     Max:最大的响应时间
     Error%:本次测试中出现错误的请求的数量/请求的总数,如上图所示,本次的测试中,sougou的http请求66.6%的请求出错,而baidu的请求则没有出错的请求
     Throughput:吞吐量,默认情况下表示每秒完成的请求数,如上图所示,每秒完成的请求数分别为6.6个每秒,6.2个每秒
     Recived KB/Sec:每秒从服务器端接收到的数据量,以kb为计算的单位
     
     检查点-断言
     断言(Assertions)可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。

    5.Jmeter组件参数化 ## (重点中的重点)

     5.1.参数化是什么
     动态的获取并设置数据
     5.2.为什么使用参数化
     执行批量操作,批量添加批量删除,人工效率太低
     运用程序代替人工获取并设置数据,安全高效
     比如:对被测系统的用户名和密码进行参数化,来模拟多个用户同时登录系统
     5.3.参数化实现之CSV Data Set Config
     通过这个组件可以动态获取并设置数据,实现批量添加操作
     
     CSV Data Set Config:
     Filename:所需数据文件的路径。如和脚本同一路径,可直接填写文件名
     File encoding:编码和文件保持一致即可,默认为ANSI。如有中文,建议为UTF-8
     Variable Names:引用变量时的变量名,对应数据文件中的每一列,以逗号分隔。如不填写,文件的第一行数据将被读取为变量名
     Delimiter:在.txt、.dat文件中,可以用逗号(,)或者Tab键( )来区分列与列
     Allow quote data:选项选为“true”的时候对全角字符的处理出现乱码
     Recycle on EOF:到数据文件结尾时是否循环读取。设置为True时,线程数过多,数据文件读取到最后一行时,会再次从第一行开始读取。设置为False,到达文件结尾时如继续读取,则值会默认为<EOF>,可通过设置jmeter属性csvdataset.eofstring来改变该值。
     Stop thread on EOF:Recycle on EOF设置为False,Stop thread on EOF设置为True,则读取数据文件最后一行后,停止测试,不管还有多少线程组未执行。
     Sharing mode:共享模式。默认在所有线程组中使用,可选择每个线程组单独打开

     

    1. 单个查询

       

       

    2. 多个查询

       

       

       

       

       

       

    没有结果就是最好的结果。 -Linux哲学
  • 相关阅读:
    iOS NSNotificationCenter 使用姿势详解
    iOS 数据源切换混乱问题
    iOS 内存管理的一点小问题
    iOS多线程GCD简介(二)
    iOS多线程GCD简介(一)
    iOS Touch Id 开发
    多线程之NSOperation简介
    开始Swift学习之路
    iOS自动布局学习(UIView+AutoLayout)
    善用#waring,#pragma mark 标记
  • 原文地址:https://www.cnblogs.com/Stubbornlyn/p/13158869.html
Copyright © 2011-2022 走看看