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。

压力测试各种指标?

见性能测试篇。

jmeter接口测试笔记的更多相关文章

  1. JMeter接口测试系列:Jmeter+jenkins+ant 的自动化构建

    在JMeter接口测试不断深入的过程中,发现可以和jenkins和ant一起搭配进行自动化的构建.下面是jmeter自动化构建的整理笔记. 准备环境 需要本机上确定安装了jmeter.ant和jenk ...

  2. http接口测试——Jmeter接口测试实例讲解

    摘要: 最近做的项目需要测试很多接口,上网查一查,发现完整讲述接口测试的资料太少,所以最近自己做完这个项目,把测试的东西整理一下和大家分享一下,希望对看到的人有所帮助     一.测试需求描述 1. ...

  3. jmeter接口测试教程

    一.Jmeter接口测试步骤: 1.添加线程组

  4. jmeter使用笔记

    接口测试 http协议 接口分成两类,一类是查询功能的接口,一类是保存数据功能的接口. 保存逻辑:数据传入进来,验证通过.保存到数据表中 使用jmeter接口测试的步骤 1.首先添加线程组. 2.配置 ...

  5. 通过Jenkins跑Jmeter接口测试脚本,我想当有接口跑失败时Jenkins发送邮件通知,这个如何弄呢

    通过Jenkins跑Jmeter接口测试脚本,我想当有接口跑失败时Jenkins发送邮件通知,这个如何弄呢

  6. jenkins+ANT+jmeter 接口测试环境搭建

    目的 jmeter很早就接触了,最近又在接触项目的时候整了一下.写这篇博客主要有两个目的 1,为了给自己搭建jmeter做一个总结. 2,在部署过程中遇到过一些坑,在这分享出来,也希望能给需要的人一个 ...

  7. Jmeter接口测试-断言

    JMeter接口测试-断言  对应qq群号:616961231 一个http请求发出,怎么判断执行的是否正确呢? 通过检查服务器响应数据,是否符合预期的数据, 如果是,任务成功,  如果否, 任务失败 ...

  8. jmeter接口测试实战-创建用户

    jmeter接口测试实战-创建用户 相信大多数看到标题的同学都会有疑问, 创建用户不是很简单吗, 调用一下创建用户接口, 传入指定入参, 用户即可创建成功, 今天我们的实战来讲讲创建场景.通过接口创建 ...

  9. JMeter接口测试实战-动态数据验证

    JMeter接口测试实战-动态数据验证 说到验证就不得不说断言, 先来看下JMeter官方给出断言(Assertion)的定义, 用于检查测试中得到的响应数据等是否符合预期,用以保证测试过程中的数据交 ...

随机推荐

  1. [从源码学设计]蚂蚁金服SOFARegistry之程序基本架构

    [从源码学设计]蚂蚁金服SOFARegistry之程序基本架构 0x00 摘要 之前我们通过三篇文章初步分析了 MetaServer 的基本架构,MetaServer 这三篇文章为我们接下来的工作做了 ...

  2. Distributing Custom Apps

    Distributing Custom Apps 分配自定义应用程序 November 10, 2020 2020年11月10日 Custom apps let you meet the unique ...

  3. javascript实现文件上传之前的预览功能

    1.首先要给上传文件表单控件和图片控件设置name属性 <div class="form-group">                    <label fo ...

  4. NO.A.0010——Windows常用快捷键使用教程

    小娜操作: Win + C: 打开Cortana微软小娜,并开始聆听...... Win + Q: 打开Cortana: Win + S: 打开Cortana:sdfghjkrtgyh XBOX操作: ...

  5. 【ES6】ES6入门笔记

    1.概要 - ECMAScript2015(ES6)是Javascript最标准的语法式样,是在2015年6月由Ecma国籍组织公布的最新版本,现在已经被多个领域和浏览器所广泛采纳和使用. 2.学习网 ...

  6. Shell编程规范:Don't use ls | grep

    目录 一.背景 二.ShellCheck的规范 三.修改写法 1.ls | grep file 2.ls | grep regexp 3.ls | grep -v multi 四.最后 五.参考 一. ...

  7. docker私有云管理平台-----shipyard

    下载所需docker镜像 docker pull rethinkdb docker pull microbox/etcd docker pull shipyard/docker-proxy docke ...

  8. Snap Build Your Own Block修炼之道-添加自定义类别

    Snap Build Your Own Block自我修炼方法:1.所有的面向对象,其实是对面向过程的抽象过程而已: 2.面对别人的开源项目时,需要找准源头(即项目运行的起点,当然有的是没有的哈,没有 ...

  9. 【不尽如人意的redisTemplete封装】

    线下项目里对spring redisTemplete进行了简单的封装,但是项目里关于其序列化的配置真的有点一言难尽: 可以看到这里用了JdkSerializationRedisSerializer去对 ...

  10. leetcode_3FizzBuzz的一些思考

    题目很简单,给定一个正整数n,如果n能整除3的话往list里加入Fizz,如果n能整除5的话往list里面加入Buzz,如果即能整除3又能整除5的话,加入FizzBuzz,代码也很简单 public ...