zoukankan      html  css  js  c++  java
  • Jmeter性能测试利器

    一、性能测试整体认知

    1.性能测试技能树:

    开发语言
    操作系统
    数据库
    测试工具
    网络知识
    业务知识
    

    性能测试的目的

    发现性能瓶颈
    

    2.性能测试的分类

    性能测试是一个非常广泛的概念,包括的很多方面的测试,也可称之为非功能测试。

    自动化测试属于功能测试的范围,由于其测试方法要求测试人员拥有一定的代码能力,座椅被单独分成为一个测试模块。

    • 负载测试:通过逐步加压的方法,达到既定的性能阈值的目标。阈值的设定应是小于等于某个值,如 CPU 使用率小于等于80%。

    • 压力测试:通过逐步加压的方法,使得系统的某些资源达到饱和,甚至失效的状态,简单粗暴的解释就是什么条件下能把系统压崩溃。

    • 并发测试:在同一时间内,多个虚拟用户同事访问同一模块、同一功能,通常的测试方法是设置集合点。

    • 容量测试:通常是指数据库层面的,目标是获取数据库的最佳容量的能力。又称为容量预估,具体测试方法为在一定的并发用户,不同的基础数据量下,观察数据库的处理能力,即获取数据库的各项性能指标。

    • 可靠性测试:有称为稳定性测试或疲劳测试。是指系统在高压情况下,长时间的运行系统是否稳定。如 CPU 使用率在80%以上,7*24小时运行,系统是否稳定。

    • 异常测试:又称为失败测试。是指系统架构方面的测试。如在负载均衡架构中,要测试宕机、节点挂掉等情况系统的反应。

    3.性能测试的工作流程

    需求分析 - 性能指标制定 - 脚本开发 - 场景设置 - 监控部署 - 测试执行(并发-压力)- 性能分析 - 性能调优 - 测试执行(并发-压力)- 性能调优 - ... - 测试报告

    4.常见系统应用分层架构

    MVC架构,分块测试能最大程度最优滴发现性能瓶颈。自低向上测试

    • 显示层(view):Web、Android、IOS、H5
    • 逻辑控制层(controller):Api
    • 数据存储层(model):MySQL、MongoDB、Redis...

    5.性能测试指标定义

    • 事务:从客户端发起的一个或多个请求(这些请求组成一个完整的操作),到客户端接收到从服务器返回的响应,是一个闭环操作的过程。
    • **TPS(Transaction Per Second) **:每秒钟系统能够处理的事务数
    • 请求响应时间:从客户端发起的一个请求开始,到客户端接收到从服务器返回的响应。整个过程所耗费的时间。
    • 事务响应时间:事务可能是由一个或多个请求组成的,事务响应时间主要是针对于用户的角度而言,如转账(中国银行发起-招商银行接受-招商银行反馈收到-中国银行减去转账数)
    • 并发:没有严格意义上的并发。并发总有先后,无论差距是1毫秒或者是1微妙,总有一个时间差。所以并发将的是一个时间范围内,比如1秒内。(如:双十一秒杀同一商品;双十一秒杀不同商品秒杀)
    • 并发用户数:同一单位时间内对系统发起请求的用户数量。
    • 吞吐量:一次性能测试过程中网络上传输的数据量的总和。
    • 吞吐率:吞吐率=吞吐量/传输时间,单位时间内网络上传输的数据量。
    • 点击率:每秒钟用户向服务器提交的请求数。这个指标是 web 应用程序特有的一个指标,可以想象为每秒钟用户总共在页面上进行多少次点击动作,但是需要注意的是一次鼠标单击的操作后,客户端有可能向服务器发送了多少次请求。
    • 资源使用率:对不同的系统资源的使用情况,如 CPU、内存、IO 等

    6.性能测试的需求分析

    • 分析的目的

        明确测试指标
        明确测试场景
      
    • 新系统

        同行业比较
        业务预期
      
    • 老系统

        对比以往 用户使用行为及用户量
      

    7.性能测试工具

    常用工具:

    LoadRunner
    JMeter
    

    LoadRunner与JMeter对比

    二、JMeter深入了解

    1.JMeter安装

    1.1 Windows环境安装

    1.【[JMeter下载地址](http://jmeter.apache.org/download_jmeter.cgi)】
    2. 配置环境环境变量:
        电脑桌面 -—> “计算机”图标 -—> 鼠标右键选择“属性” -—> 点击高级系统设置 -—> 高级 -—> 环境变量 -—> 系统变量    
        创建JMETER_HOME="JMeter的安装路径"
        新建或编辑CLASSPATH=";%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib/logkit-2.0.jar;"
    3. 在安装目录bin目录,点击 JMeter.bat 启动 JMeter 工具。
    

    JMeter控制台

    1.2 Linux环境安装

    2.初始JMeter

    JMeter的组成:

    测试计划

    线程组:(1)断言、定时器、监听器、配置元件、后置处理器
            (2)逻辑控制器
            (3)Sampler
            
    JMeter实现多并发
        线程组:负载发生器,用多线程或多进程的方式来模拟用户的使用行为。JMeter是已线程的方式来进行模拟用户的并发访问的。
    

    JMeter的组成

    3.JMeter实现多并发

    4.JMeter实现逻辑分支控制

    逻辑控制器:用来控制测试脚本的逻辑判断,也可以理解为如何控制脚本的运行。例如:如果控制器,就是当满足什么样的条件后执行哪一步操作。

    添加逻辑控制器

    5.JMeter实现配置管理

    配置元件:用来提供一些配置相关的信息,如 Http 请求头、cookie 管理,提供参数化数据。还可以进行用户自定义变量等配置,用来定义常量等。

    配置元件

    三、Linux服务器监控性能测试

    1.性能测试范围

    • 测试目的:发现服务器的性能瓶颈。配置的不同能够承载的最大任务树不同,能够承载的压力也不同。

    • 测试范围及性能指标

        CPU:车间工人
        内存:临时存储货物的仓库
        磁盘:仓库
        网络:仓库外的道路
        版本:仓库的智能化程度
      

    2.测试与生产的环境配置不同?

    多次压测后的性能预估

    3.进程与线程

    进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。

    线程:是进程的一个实体,是CPU调度和分牌的基本单位。他是比进程更小的独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中比不可少的资源。一个线程可以创建和撤销另一个线程。

    区别

    一个线程只能属于一个进程,而一个进程可以拥有多个线程。线程是进程工作的最小单位。
    一个进程会分配一个地址空间,进程与进程之间不共享地址空间,即不共享内存。
    同一进程下的不同的多个线程,共享父进程的地址空间。
    线程在执行过程中,需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。
    线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。
    

    优缺点

    进程优点:
        每个进程相互独立,不影响主程序的稳定性,子进程奔溃不影响其他进程。
        通过增加CPU,就可以扩大性能。
        可以尽量减少线程加锁与解锁的影响,极大的提高了性能。
    进程缺点:
        逻辑控制复杂,需要和主程序交互。
        多进程调度开销大。
    
    线程优点:
        程序逻辑和控制方式简单。
        所有线程可以直接共享内存和变量等。
        线程方式消耗的总资源比进程方式少。
    线程缺点:
        每个线程与主程序共用地址空间,最大内存地址受限。
        线程之间的同步和加锁不易控制。
        一个线程的崩溃可能影响到整个程序的稳定性。
    

    4. 服务器实时内存监控

    # Linux帮助命令,可以查看所有命令的使用方法
    man
    
    # 实时监控命令
    top
    # 实时监控系统的运行状态,并按CPU及内存等进行排序。
    #       -h 帮助
    #       -p 监控指定的进程。监控多个监控室,进程ID已逗号分隔。
    # top任务区命令
    #       M 按内存使用率排序
    #       P 按CPU使用率排序
    #       z 彩色/黑白显示
    # load average -- 系统的运行队列的平均利用率,也可认为是可运行进程的平均数(表示在最后1分钟、5分钟、15分钟的平均负载值)。
    # 【备注:在单核CPU中load average的值为1时表示满负荷状态。同理在多核CPU中满负荷的load average的值为1*CPU核数】
    top -hv | -bcHiOSs -d secs -n max -u | U user -p pid(s) -o field -w [cols]
    
    
    # 内存监控
    vmstat
    # 可以监控操作系统的进程状态、内存、虚拟内存、磁盘IO、CPU的信息。
    #   -S 使用指定单位显示
    vmstat [-a][-n][-S unit][delay[count]]
    free
    # 能够监控系统的内存使用状态
    # 参数解释:
    #       total 总计屋里内存的大小
    #       Used 已使用的内存大小
    #       shared 多个进程共享的内存总额
    #       buffers/cached 磁盘缓存的大小
    

    5.实时监控-CPU

    # 可以查看多核心CPU中每个计算核心的统计数据
    mpstat
    mpstat [-P{|ALL}[internal [count]]]
    # 参数解释:
    #       -P {|ALL}监控那个CPU,CPU的取值【0,CPU个数-1】
    #       internal 相邻的两次采样的间隔时间
    #       count 采样的次数,count只能和delay一起使用
    # 使用注意:
    #       当没有参数时,显示系统启动以后所有信息的平均值
    #       当有internal时,第一行的信息自系统启动以来的平均是,从第二行开始输出为前一个internal时间段的平均信息。
    
    

    6.实时监控-网络

    # 用于显示本机网络链接、运行端口、路由表等信息
    netstat
    # 参数解释:
    #       -n 拒绝显示别名,能显示数字的全部转换为数字
    #       -l 仅列出有在 Listen(监听)的服务状态
    #       -p 显示建立相关链接的程序名
    #       -t 显示TCP相关选项
    #       -u 显示udp相关选项
    #       -i 显示自动匹配接口的信息
    #       -c 每隔一个固定时间,执行该 netstat 命令
    

    实时监控-网络

    6.实时监控-磁盘监控

    # 是对系统磁盘IO操作进行监控的,它的输出主要显示磁盘的读写操作的统计信息,同时给出CPU的使用情况。
    iostat
    # 参数说明
    #       -x 输出指定要统计的磁盘设备名称,默认为所有磁盘的设备。
    iostat -x sda 1
    

    7.万能命令-sar

    sar -- (System Activity Reporter 系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告
        (1)文件的读写情况
        (2)系统的调用的使用情况
        (3)磁盘I/O
        (4)CPU效率
        (5)内存使用状况
        (6)进程活动及IPC有关的活动
        
    # 参数说明
    #   n 和 t 组合定义为次数和采样间隔
    #   -o file将命令结果以二进制形式放在file中
    # options为命令行参数
    #       -A 所有报告的总和
    #       -u CPU利用率
    #       -v 进程、节点、文件和锁表状态
    #       -r 显示系统内存的使用情况
    #       -B 内存分页情况
    #       -b 缓冲区使用情况
    #       
    sar [options][-A][-o file] t [n]
    
    

    7.进程追踪命令-strace

    # 是一个集诊、调式、统计与一体的工具,用strace对应用的系统调式和信号传递的跟踪结果来对应用进行分析,以达到解决问题或是了解应用工作过程的目的。
    # 参数说明
    #       -p 跟踪指定的程序
    #       -f 跟踪由fork子进程系统调用
    #       -c 统计每一系统调用的所执行的时间,次数和出错的次数
    #       -t 在输出中的每一行前加上时间信息,-tt时间确定到微秒级。
    #       -e 输出过滤器,通过表达式,过滤掉不想要的输出
    #       -o filename  默认将strace的结果输出到stdout,通过-o可以将输出写入到filename文件中
    

    8.Linux监控工具-nmon

    nmon是一种在Linux操作系统中广泛使用的监控与分析工具,nmon所记录的信息是比较全面的,能够在系统运行过程中实时地捕捉系统资源的使用情况,并且输出结果到文件中,然后通过nmon_analyzer工具产生数据文件与图形化结果。

    nmon

    nmon
    # 参数说明:
        -f 必选参数,并且必须放在第一个,就是输出文件;输出的默认文件名是hostname_date_time.nmon
        -F <filename> 和-f一样,自定义文件名称
        -s 采集保存数据的频率
        -c 采集数据次数
        -t 输出最消耗资源的进程数据
        -h 查看帮助
    

    nmon_analyser: nmon analyser的作用就是分析nmon数据采集后的结果,nmon analyser需要接祖Excel的宏。WPS默认没有安装宏,需要下载插件

    9.Linux下的定时任务

    crontab

    crontab的启动
    
    crontab的服务权限
    
    

    crontab -e编辑定时任务的列表

    四、数据驱动性能测试

    数据驱动:从数据文件中读取测试数据,驱动测试过程的一种测试方法,是一种更高级的参数化。

    • 特点:测试数据与测试代码分离,数据控制过程
    • 优点:减少测试代码量;降低脚本开发和维护的成本;便于用例的修改和维护(不用修改代码)
    • *要求:较强的代码能力;较强的分层架构设计思维;对开发框架有一定的了解

    1.数据驱动的使用场景

    (1)复杂的业务流程
    (2)根据业务场景分流
    (3)符合条件的并发场景

    JMeter中的数据驱动

    • 控制方式:
      • 参数化(推荐使用数据库)
      • 逻辑控制器(如,if控制器)

    JMeter数据驱动实战

    • 场景
      • 登录后男人浏览电子商品
      • 登录后女人浏览衣服商品
    id name sex age
    1 zhangsan 0 20
    2 lili 0 23
    3 wangwu 1 22
    4 malu 1 23

    五、数据库架构设计及性能调优

    1.数据库性能测试的目的及范围

    • 目的:发现数据库相关的所有性能瓶颈
    • 范围
      • SQL语句 - 慢查询等
      • 资源使用率
      • 数据库架构的合理性
      • 数据库性能指标

    2.数据库的常用架构

    • 一主多从:减少单台服务器的压力,但有可能会存在主从延时的问题,其原理是:
      • master将改变记录到二进制日志(binary log)中
      • slave将master的binary log events拷贝到它的中继日志(relay log)
      • salve重做中继日志中的事件,将改变反映它自己的数据

    • 双机热备

    3.数据库分库分表的设计方法

    • 1.拆分原因:
      • 单表或库数据量太大
      • 硬件不能升级或无法升级
    • 2.分库分表方案:
      • 业务拆分:用户、商品、订单
      • 垂直拆分:商品 -> 电子商品、母婴商品、床上商品
      • 水平拆分(一致性哈希算法):同一张表拆成三张一样规则的表
        水平拆分

    4.MySQL数据库监控指标

    拓展:MariaDB:MySQL支付创建,目标替换现有的MySQL,兼容MySQL是开源的。

    • QPS:(queries per seconds 每秒查询数量 )
      • 获取方法:mysql> show global status like 'Quesion%' ;
      • 计算方法:Queries /seconds
    • TPS(Transaction per seconds)
      • 计算方法:TPS = (Com_commit + Com_rollback) / seconds
      • 获取Com_commit:mysql> show global status like 'Com_commit';
      • 获取Com_rollback:mysql> show global status like 'Com_rollback';
    • 线程连接数
      • 获取最大使用的连接数:mysql> show global status like 'Max_used_connections';
      • 获取线程数:mysql> show global status like "Threads%"
    • 最大连接数
      • 获取最大的连接数:mysql> show variables status like 'max_connections';
    • Query Cache
      • 查询缓存用于缓存select查询结果,当下次收到相同查询请求时,不在执行知己查询处理而直接返回结果;适用于大量查询、很少改变表中数据
      • 开启Query Cache方法:修改my.cnf文件,将query_cache_size设置为具体大小,具体大小是多少取决于查询的实际情况,最好设置为1024的倍数(参考值为32M);增加一行:query_cache_type=0/1/2(1:缓存所有结果;2:指定缓存)
    • Query Cache命中率
      • 获取:mysql> show status like "Qcache%";
      • 计算:Query_cache_hits = (Query_hits / (Qcache_hits + Qcache_inserts)) * 100%;
    • 锁定状态
      • 获取:mysql> show global status like '%lock%';
      • 计算:Table_locks_waited / Table_locks_immediate 值越大代表表锁造成的阻塞越严重
      • Innodb_row_lock_waits innodb行锁,太大可能是间隙锁造成的
    • 主从延时
      • 查询:show salve status;

    5.MySQL慢查询工作原理及操作

    • 慢查询:执行速度超过定义的时间的查询;不同的系统定义不同的慢查询
    • 慢查询开启
      • 编辑/etc/my.cnf,在[mysqld]域中添加
        slow_query_log = 1
      • 慢查询日志路径:
        slow_query_log_file=/data/mysql/slow.log
      • 慢查询的时长:
        long_query_time = 1
      • 未使用索引的查询也被记录到慢查询日志中
        log_queries_not_using_indexes = 1
    • 慢查询日志分析
      mysqldumpslow
      # 参数说明:
      #       -s 表示按何种方式排序
      #           c:访问计数
      #           l:锁定时间
      #           r:返回记录
      #           t:查询时间
      #           al:平均锁定时间
      #           ar:平均返回记录数
      #           at:平均查询时间
      #       -t 返回前面多少条的数据
      #       -g 后面写一个正则匹配模式,大小写不敏感
      
      • 返回记录集最多的10个SQL
        mysqldumpslow -s r -t 10 slow.log
      • 返回访问次数最多的10个SQL
        mysqldumpslow -s c -t 10 slow.log
      • 返回按照时间排序的前10条里面包含左连接的SQL
        mysqldumpslow -s t-t 10 -g "left join" slow.log

    6.SQL的分析与调优方法

    explain(执行计划)

    • 用法:explain select 语句
    • 结果分析:
      • id:select识别符,代表语句的执行顺序,一般在select嵌套查询时会不同;数字越大越先执行;null代表是结果集
      • select_type:
        • simple:不需要union操作或者不包含子查询的简单select查询,有连接查询时,外层的查询为simple且只有一个
        • primary:一个需要union操作或者含有子查询的select,位于最外层的单位查询的select_type纪委primary且只有一个
        • union:连接的两个select查询,第一个查询时dervied派生表,除了第一个表外,第二个以后的表select_type都是union
        • dependent union:与union一样,出现在union或union all语句中,但是这个查询要收到外部查询的影响。
        • union result:包含union的结果集,在union和unionall语句中,因为它不需要参与查询,所以id字段为null
        • subquery:除了from字句中包含的子查询外,其他地方出现的子查询都可能是subquery
        • dependent subquery:dependent union类似,表示这个subquery的查询要收到外部查询表查询的影响
        • derived:from字句中出现的子查询,也叫派生表,其他数据库中可能叫做内联视图或嵌套select
      • table
        • 显示的查询表名,如果用别名就显示别名;
        • 为null表示不涉及对数据表的操作;
        • 显示表示为这个是临时表
      • type
        • 依次好到差 system 、const 、eq_ref、ref、fulltext、ref_or_null、unique_subquery、index_subquery、range、 index_merge、index、ALL
        • 除了ALL,其他的type都可以用到索引,扫描全表数据文件
        • 除了index_merge外,其他只能用一个索引,常见于and或or使用了不同的索引
        • system:表中只有一行或是空表,且只能用myisam和memory表
        • 如果是Innodb引擎表,type列在这个情况通常都是ALL或index
        • const:使用唯一索引或主键返回记录一定是1行记录的等值where条件时,通常type是const
        • eq_ref:出现在要连接过这个表的查询计划中,驱动表只返回 一行数据,且这行数据时第二表的主键或者唯一索引
        • ref:返回数据不唯一的等值查找就肯能出现
        • fulltext:全文检索,优先级很高
        • ref_or_null:与ref类似,只增加了null值的比较
        • unique_subquery:用于where中in形式子查询,子查询返回不重复唯一
        • index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表。
        • range:索引范围扫描,常用于>,<,is null,bettwen等
        • index:索引全表扫描,把索引从头到尾扫描一遍
      • possible_keys:查询可能使用到的索引都会在这里列出来
      • key:查询真正使用到的索引,select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个
      • key_len:用于处理查询的索引长度;单列索引全算,多列不一定全算
      • ref:若果是常数等值查询,显示const;如果使用了表达式或函数,显示func
      • rows:执行计划中估算的扫描行数,不是精确值
      • Extra:
        • distinct:select中使用了distinct
        • no table used:不带from字句的查询或者From dual查询
        • using filesort:排序时无法使用到索引;常见于order by或group by语句中
        • using index:查询时不需要回表查询,直接通过索引查询的数据
        • using intersect:使用and的各个索引的条件,表示是从处理结果去交集
        • using union:使用了or的各个索引的条件,表示是从处理结果取并集
        • using where:使用了where条件,表示存储引擎返回的记录不是所有的都满足查询条件,需要在server层进行过滤

    7.MySQL索引概念及规范

    • 索引类型

      • 主键索引:特殊的唯一索引,不允许有空值(id列),创建表时确定创建
      • 唯一索引 :索引列的值必须唯一,不允许空值
      • 普通索引 :最基本的索引,没有任何限制
      • 全文索引 :fulltext只适用于MyISAM表的一个索引类型(char、varchar、text)
        match()实现全文索引
      • 组合索引 :多列索引,是得多列上创建索引,最左前缀规则(id,name,age-->id、name、age,id、name,id)
    • 索引创建规范
      可以提高传下效率,但也会降低插入和更新的速度并占用磁盘空间,在插入和更新数据时,要重写索引文件

      • 单张表中索引数量不超过5个
      • 单个索引中的字段数不超过5个
      • 不适用更新频繁的列作为主键
      • 合理创建组合索引(避免冗余)
      • 不在低基数列上建立索引,如性别
      • 不在索引列进行数学运算和函数运算,会是索引失效
      • 不适用%前导的查询,如like "%xxx"无法使用索引
      • 不适用反向查询,如not in、not like
      • 选择越小的数据类型越好占用空间少,处理更快
      • 在经常需要排序(order by)、分组(group by)、和distinct列上用不了索引,索引考虑加where或加limit
      • 在表与表的连接条件上加索引,可以加快连接查询的速度
      • 使用短索引,字段本来短

    8.MySQL的存储引擎

    • MyISAM
      • 优点:
        • 读的性能比Innodb高很多
        • 索引与数据分开,使用了压缩,提高了内存使用率
      • 缺点:
        • 不支持事务
        • 写入数据时,直接锁表
    • InnoDB
      • 优点:
        • 支持事务
        • 支持外键
        • 支持行级锁
      • 缺点:
        • 不支持fulltext索引(全文索引)
        • 行级锁并不绝对,当不确定扫描范围时,锁全表
        • 索引与数据时紧密捆绑的,没使用压缩导致体积庞大

    10.MySQL实时监控

    orzdba 淘宝团队开发的

    11.MySQL集群监控工具

    天兔LEPUS

    下载

    简介

    12.MySQL性能测试的用例准备

    13.JMeter开发MySQL性能测试脚本

    14.执行测试

    七、多协议接口性能测试

    • 目标

      • 发现应用接口程序的性能瓶颈
      • 发现数据库的性能瓶颈
    • 范围

      • 应用程序各项性能指标
      • 数据库各项性能指标

    1.常见接口协议:

    • HTTP协议:超文本传输协议

    • HTTPS协议:安全超文本传输协议

      • 默认端口:443
      • 安全性的SSL加密传输协议(网站证书),可以理解为HTTP协议的安全版
      • 协议栈中的位置
        • HTTPS
        • SSL/TLS
        • TCP/IP
        • 数据链路层
    • FTP协议:文件传输协议

      • 默认端口:21和20
        • 21:用户表示、口令、发送的命令
        • 20:数据连接用于实际传输一个文件(主动模式)
      • HTTP和HTTPS面向网页的,FTP面向文件的
      • FTP使用两个并行TCP连接来进行文件传输
      • FTP使用两个并行TCP连接为控制连接和数据连接
    • TCP/IP协议:中间层协议,网络控制协议/互联网协议

    • UDP协议:用户数据协议

    2. JMeter进行FTP协议接口测试

    Linux搭建FTP服务器

    3.性能测试用例设计及测试报告

    • 性能测试用例设计

      • 被测系统及版本
      • 测试数据
      • 测试场景(包含异常场景)
      • 预期结果
      • 预期性能指标
    • 性能测试测试报告

      • 被测系统
      • 版本号
      • 运行环境、配置
      • 测试场景(并发定义)
      • 预期性能指标
      • 实际结果
      • 测试结论
      • 测试人员
      • 如不通过说明瓶颈
      • 如通过说明最大性能指标
      • 容量规划
    Be a simple myself!
  • 相关阅读:
    VpnService
    css样式占位和不占位隐藏元素的方法
    apply和call用法
    根据条件改变表格内容
    bootstrap中给表格设置display之后表格宽度变小问题解决
    根据条件决定是否为input设置只读属性
    根据条件决定My97DatePicker日期控件弹出的日期格式
    关于关闭TAB,IFRAME占用的内存不能释放问题
    jquery中attr和prop的区别分析
    jQuery height()、innerHeight()、outerHeight()函数的区别详解
  • 原文地址:https://www.cnblogs.com/secoder/p/12901598.html
Copyright © 2011-2022 走看看