接口测试必须要知道的
1. Tips
- 接口就是一个文档,接口规范是架构师指定的
- 接口测试主要是测试后端,验证后端编写的程序(业务逻辑)是否符合接口文档的规范
- 接口测试不可忽视的点:安全、效率(响应时间)、性能
2. 接口测试怎么做?(实现流程)
模拟客户向服务端发送数据,然后查看响应
要素1:定位服务器资源,通过URL
要素2:模拟用户,提交数据
要素3:查看响应结果,是否符合预期
3. 接口测试的分类
- 类型1:Web 接口测试(B/S架构的项目)
(1)服务器接口测试(测试公司写的程序)
(2)第三方接口测试(测试别的公司写的程序),如自己公司的程序使用天气api、支付api,在测试过程中,这些api也需要测试 - 类型2:模块 接口测试(C/S架构的项目)
4. 接口测试环境搭建
搭建接口测试的环境,运行程序(就是将程序部署到测试主机/服务器上,在测试服务器上运行程序,验证功能是否正常)
(1) 运维或开发实现部署,正常运行
(2) 测试自己搭建(根据开发语言选择java 或 python,把项目复制进去,启动项目 python run_server.py,测试 http://127.0.0.1:8000/api/departments,如果有相应数据,代表程序已安装完成并正常启动)
sqlite是轻量级的数据库,可以用在移动端,使用SQLiteStudio连接工具查看详细的数据表结构
任何系统都可以归纳为【数据 + 数据操作】,而数据操作无非就是增删改查,即表的增删改查操作
5. RESTful 风格
规范了URL的实现方式,提交的数据的实现方式,响应数据的实现方式
从程序的易读性、可维护性方面所做的考虑
增
要素1:URL + POST
要素2:多个数据(方式1:键=值&键=值,方式2:JSON格式)
要素3: 200|201 + 添加后的记录
删
要素1:URL + GET | DELETE
要素2:多个数据(方式1:键=值&键=值)
要素3:200|204 + 无
改
要素1:URL + POST | PUT
要素2:多个数据(方式1:键=值&键=值,方式2:JSON格式)
要素3:200|201 + 修改后的记录
查
要素1:URL + GET
要素2:多个数据(方式1:键=值&键=值)
要素3:200 一条/多条记录
404 资源路径有误
505 服务器异常
6. JSON
- JSON 是一种数据载体
- 互联网的本质:数据传输,数据传输需要数据载体,例如html存储页面信息,但是html和xml等标签标记语言,有效数据占有率低,而json 则大大优化了数据传输的效率,所以部分场景下使用JSON替换html 和XML
- Json 的缺点:数据太简洁,描述性太差,因此部分场景还是需要采用 html 和 XML(ajax) 等标签标记语言实现
- 如果传递的是少量数据,可能使用json
语法:
格式1(JSON对象):{“key1”:”value1”, “key2”:”value2”, “key3”:”value3”, … … “keyN”:”valueN” }
格式2(JSON数组):[{“key1”:”value1”, “key2”:”value2”, “key3”:”value3”, … … “keyN”:”valueN” }],[],[],… …[]
格式3(对象和数组复合){“key1”:”value1”,”key2”:”value2”,[],[]…}
- 前端网页的局部刷新,如注册账号检测账号是否重复时,用的就是ajax异步刷新技术
7. 接口文档的生成
- 需求分析:了解项目具体细节,编写文档
- 概要设计:项目的大致框架,划分项目模块(如人事模块、税务模块),设计数据库表结构
- 详细设计:制定每一个流程的每一个细节应该如何实现,写伪代码,声明方法和参数,生成api文档
- 开发阶段:开发+单元测试
- 测试阶段:接口测试
POST 请求新增数据时,数据格式是JSON格式的,必须设置浏览器的 http 请求头(Content-Type: application/json;),不然会当成普通文本处理,为了不让提交的数据格式显示乱码,可以在HTTP头字段中增加编码集(charset=utf-8,支持世界所有字符)
8. Jmeter
- Jmeter 支持多协议,如FTP文件传输协议
- Jmeter 不支持IP欺骗,第三方接口测试无法做
- Jmeter 不支持前端测试
思考:使用 Jmeter做高并发,对某一个查询接口,执行100次,如何去做?50个用户同时请求,如何操作?
下载并解压Jmeter 后必须确保本机上有Java 运行环境,否则运行不了(这也是Java 做不出像QQ、迅雷这样的C/S客户端程序的原因)
9. 性能测试和压力测试的区别
性能:内在 -- 程序的算法,重点关注程序的响应时间
压力:外在 -- 服务器的配置、负载能力
10. Jmeter支持数据库测试
如何确认接口返回的数据有没有遗漏?-- Jmeter
Jmeter支持Java 程序测试
Jmeter安装路径不能有空格,不能有中文字符,如D:\develop\JDK,D:\develop\JRE
11. Jmeter 目录结构
backups:缓存备份,防止数据、脚本丢失
bin:存储了Jmeter的可执行程序,如启动程序ApacheJMeter.jar、jmeter.bat(Windows启动,黑窗口不可关闭) 、jmeter.sh(Linux启动,黑窗口不可关闭)
docs:存储了Jmeter整合的功能(java的API文档,可进行Java程序的拓展)
extras:额外的功能
lib:存储的是库文件
licences:版权证书
printable_docs:Jmeter使用帮助文档
12. Jmeter 使用
创建测试计划 > 在计划上创建线程组 > 在线程组上添加sampler,创建HTTP 请求 > 在计划上添加监听器察看结果树(即查看响应)> 工具栏绿色三角执行
13. Jmeter 组件:线程组
- 进程、线程和线程组
进程:正在运行中的程序
线程:进程中的执行线索(一个进程中可以有多个执行线索,如口型和声音对不上)
线程组:按照线程的性质,对线程进行分组
- 三者关系:1个进程有多个线程组,1个线程组有多个线程
Jmeter 中,进程 – 测试计划,线程组 – 线程组,线程 – 线程组属性中的线程数
- 并发执行与顺序执行
并发执行:多个线程同时执行,特点是执行结束的顺序和线程的启动顺序不一定一致
顺序执行:按照线程的启动顺序,依次执行
- 基本使用
默认情况下,线程组中的线程是并发执行的,每一个线程都要执行组内的 http 请求
勾选测试计划属性中的“独立运行每个线程组”复选框,则线程将顺序执行
-
在Jmeter 中,万物皆组件,当想要实现某个功能的时候,找组件
添加Content-Type:添加配置元件 > 信息头管理器
抽取共同的ip、端口号、协议、编码集:测试计划 > 添加配置元件 > HTTP 请求默认值,通过服用属性,简化实现,提高效率 -
高级使用(初始化与销毁线程组,属性与调度器)
线程组属性1:线程数 – 模拟用户数
线程组属性2:时间值Ramp-Up Period(in seconds) – 在指定时间内启动所有线程
线程组属性3:单个用户访问的次数 -
调度器(计时器):可以用于间隔一段时间做某个操作
1) 循环次数设置为永远
2) 设置启动延迟x和持续时间y:在延迟x秒后访问服务器,并且持续y秒
3) 设置启动时间S和结束时间E:在M时开始访问,E时结束
注意:2)和3)不能同时使用,否则会有冲突
14. Jmeter 参数化
- 用于批量操作时,从外部获取数据
线程组设置循环次数 > HTTP请求负责插入数据 > 创建文本文档 > 添加配置元件CSV Data Set Config
setUp Thread Group :用于程序主体执行所需的资源加载(初始化)操作
tearDown Thread Group:用于程序正式关闭之前,将数据保存至内存(本地磁盘)