1.接口测试基础

API:Application Programming Interface,即调用应用程序的通道。

接口测试遵循点

接口的功能性实现:检查接口返回的数据与预期结果的一致性。

测试接口的容错性:例如传递的数据类型是错误的能否处理。

测试接口参数的边界值:例如传递的数据足够大或者为负数时能否处理。

测试接口性能:响应时间牵扯到代码实现的优化。

测试接口的安全性:特别是第三方接口、登录的用密码是否密文传输。

接口测试工具:loadrunner、jmeter、postman、soapui、RestClient。

RF和Jmeter对比

语言:RF是 python 写的,Jmeter 是 java + JavaScript(写 beanshell 要用到)。

编程语言能力:RF 有一些(写些RF的关键字),Jmeter 基本可以没有。

灵活度:在不做二次开发(即改动到库函数或者框架源码)前提下,RF 比 Jmeter 高一些。

泛用性:RF 除了做接口,还可以做UI 自动化。Jmeter 除了做接口,还可以做后端性能。

生态圈:个人感觉 RF 相对活跃一些。

环境:jmeter、java8、第三方驱动/包、接口项目

2.Jmeter核心知识

参数化的实现方式

CSV 数据文件:适用于参数取值范围较大的数据文件。

用户参数:适用于参数取值范围很小的时候使用。

用户定义的变量:一般用于不需要随请求迭代的参数设置,如:Host、Port Number。

函数:见下面函数篇。

操作数据库

安装驱动包mysql-jdbc、sqlite-jdbc、ojdbc;数据库连接池配置;添加JDBC请求;添加Degbug Sampler。

关联方式

正则表达式:"dep_ name":"(.*?)”, ()截取区间,.表示任意字符,*表示出现任意次,?表示截取到第一 个结束标记。模板:$$格式;$1$表示解析到的第1个值;如果匹配有2个值,第二个值$2$,以此例推匹配数字:1代表全部取值,0代表随机取值,通常情况下填1

xpath提取器:当需要处理的页面是HTML格式时,必须勾选Use Tidy;用法同web自动化里的xpath。

jsonpath提取器:当响应数据为json时,用于提取json串里面的关键数据。$..data.user[0].id

同步定时器

作用:阻塞线程,直到指定的线程数量到达后,再一起释放,模拟并发。

测并发

可以用线程数,Ramp-Up Period设为0,立马发送请求,是并发,这样很耗机器性能。非0表示在该秒内发送这么多请求,不是真正并发。

加个定时器:集结了指定数量的请求后,大家再一起冲!这样给服务器的压力是最大的。

参1为0,等同于设置为线程组中的线程数,非0代表达到设置的用户(线程)后,并发执行后续操作。

参2为0,Timer将等待线程数直到达到了参1设置的数值后才执行,不够则一直等待。非0表示无论有没有达到参1的数值,只要超过这个时间都会执行。

函数

格式:${__functionName(var1,var2,var3)}

常用函数:CSVRead、counter、Random、time、setProperty、property。

jmeter中函数助手time:yyyy-MM-dd HH:mm:ss:SSSS

可作为其他参数化方式的补充项,如:随机数生成的函数:${Random(,,)};生成时间戳:13015${time(/1000,)}${__Random(00,99)}

3.Jmeter分布式

场景

为了测试服务器处理批量请求能力。目前jmeter最多支持300左右的模拟请求线程(与电脑性能有关),再大的话就卡顿、无响应等情况,这是限于jmeter其本身的机制和硬件配置。分布式压测,即将大量的模拟并发分配给多台压力机,来满足这种大流量的并发请求场景。

Jmeter.properties配置

控制机:remote_hosts=127.0.0.1:1099,127.0.0.1:1100。 注意是英文逗号。

执行机:第一台server_Port=1099,第二台可设为1100。注意:那是自定义的端口号,要选择未被占用的端口号。也可以不用管,默认是1099,多台执行机的ip又不一样。

启动/设置/注意点

执行机启动分布式:windows运行bin目录下jmeter-server.bat,linux或mac运行jmeter-server,运行后勿关窗口。若是运行时修改的记得重启。

控制机:设置线程数,如500,然后点击远程全部启动。

保持高度一致:csv文件路径要一致;jmeter版本和插件要一致,执行机上Jmeter也许需要配置JDK环境变量;

4.Jmeter逻辑控制器

If控制器:条件成真,则执行控制器下所有取样器。"${name}"=="百度"。

ForEach控制器:一般和用户定义的变量一起使用,在其中读取一系列变量。输入要遍历变量前缀(user);遍历变量开始的索引,从0开始(0);遍历变量结束的索引,不包括结束索引(4);定义要被引用的变量名称(foruser)。

交替控制器:交替控制,该控制器包含的所有取样器,步骤交错执行在每个循环中。子节点里放不同的请求即可。

循环控制器:执行循环控制器内取样器指定的次数。设置循环次数,子节点里放请求即可。

仅一次控制器:该控制器下取样器只执行1次。子节点里放请求即可。

随机控制器:随机执行其下的所某个请求。子节点里放不同的请求即可。

随机顺序控制器:子节点全部执行,但顺序是随机的。

While 控制器:循环执行控制器内所有采样器,直到条件为假时,停止循环。如${VAR}:当参数VAR的值被设置成false时退出循环;${__javascript(“${VAR}”==”User1”)}:当参数VAR的值不为User1时退出循环。

Switch Controller控制器:通过给该控制器中的switch value赋值不同的取样器名字,来指定运行哪个请求。子节点里放不同的请求即可。

简单控制器:当文件夹用,子节点里放不同的请求即可。

事务控制器:会在聚合报告中生成一个事务控制器字段来测量其下测试元素的总体时间。子节点里放不同的请求即可。

5.Jmeter 图形监视器

目的:查看服务器(CPU、内存、网络、磁盘)的使用信息。

服务器:下载服务器端监听服务程序(ServerAgent-2.2.1)https://jmeter-plugins.org/wiki/PerfMonAgent/

客户端:下载标准扩展插件(JMeterPlugins-Standard-1.4.0.zip)https://jmeter-plugins.org/downloads/old/

启动服务器监听器程序(ServerAgent-2.2.1.zip)

客户端加载监听服务器组件图表(jp@gc - PerfMon Metrics Collector)

配置:下载标准插件后解压,复制JMeterPlugins-Standard.jar文件,粘贴到Jmeter的Lib目录下面的ext目录,重启Jmeter。

启动:Windows下启动startAgent.bat;Linux下启动startAgent.sh。然后在对应的线程组下添加该组件(jp@gc - PerfMon Metrics Collector),即可看到服务器(CPU、内存、网络、磁盘)的使用信息。

6.jmeter报告

无日志文件生成

例1:jmeter -n -t  -l  -e -o

例2:jmeter -n -t /Users/edz/apache-jmeter-5.3/bin/JmeterProjects/API-autotest.jmx -JthreadNum=100 -Jcycles=10 -l /Users/edz/apache-jmeter-5.3/bin/reports/result.jtl -e -o /Users/edz/apache-jmeter-5.3/bin/reports

使用已有的jtl日志文件或csv日志文件生成:jmeter -g  -o

7.其他功能点

Jmeter FTP服务器测试

File Transfer Protocol文件传输协议,可以根据FTP服务器进行上传和下载文件(上传、下载需要权限)。

FTP请求:Remote file:上传到FTP服务器新的文件名+后缀;local file:为本地存放到本机上的路径+文件名+后缀;get(RETR):为下载文件;用户名:ftp服务器用户名;密码:ftp服务器的密码。

Jmeter Test Fragment(测试片段)

测试片段元素是控制器上的一个种特殊的线程组,它在测试树上与线程组处于一个层级。

备注:它与线程组有所不同,因为它不被执行,除非它是一个模块控制器或者是被控制器所引用时才会被执行。

作用:把单独功能脚本封装起来,待需要使用的时候,直接引用;类似于python中的函数或模块。

模块控制使用图里:测试片段被引用执行两种方式; 模块控制器可以引用执行测试片段;Include Controller控制器也可以引用和执行片段。

Jmeter 工作台-非测试元件

HTTP 镜像服务器:可以在本地临时搭建一个HTTP服务器,该服务器把接收到的请求原样返回;这样就可以看到发送出的请求的具体内容,以供调试;在http请求里,可设置它的ip和端口号。

HTTP代理服务器:HTTP代理服务器是监听浏览器代理,记录基于代理浏览器所有的请求,并以Jmeter可执行的脚本格式保存。

属性显示:以GUI图形界面显示Jmeter配置文件jmeter.properties

8.后记

中文乱码?

在jmeter.properties将default的值ISO-8859-1修改成utf-8;若还乱码,外观选择mental。

压力测试各种指标?

见性能测试篇。

最新文章

  1. KnockoutJS 3.X API 第七章 其他技术(7) 微任务
  2. 表空间基于时间点的恢复(TSPITR)
  3. extjs combobox 事件
  4. 基于tomcat+spring+mysql搭建的个人博客
  5. ubuntu14.04 gedit显示GB2312中文编码
  6. 通过sqlplus导出数据到csv
  7. ubuntu日志清理
  8. Using RestTemplate, how to send the request to a proxy first so I can use my junits with JMeter?
  9. 陈灯WGF双缓冲绘图框架
  10. phpMyAdmin 'import.php'跨站脚本漏洞
  11. 远程仓库版本回退方法 good
  12. sql日志框架log4jdbc的AOP式使用
  13. python爬虫__第一个爬虫程序
  14. android设置eclipse中的自动提示功能
  15. angularjs-xeditable整合typeahead完成智能提示
  16. 跨域访问解决方案:JSONP
  17. 用Gogs在Windows上搭建Git服务
  18. Nginx-动态添加模块
  19. initial
  20. iOS - 仿微信朋友圈视频剪切功能

热门文章

  1. Flink处理函数实战之四:窗口处理
  2. Java基础—Java方法的调用
  3. 解决adober reader已停止工作的问题
  4. Camtasia Studio,一款好用到爆炸的视频录制软件
  5. H5系列之新input
  6. Yali 19 - 8 - 6 test T2 猪国(pig) 题解
  7. mysql-查询不同列的数量合计
  8. sqli-labs-master less06
  9. LeetCode 037 Sudoku Solver
  10. 从0开始带你成为JVM实战高手(百度网盘)