接口测试
分层自动化测试
UI自动化测试:主要通过模拟用户在界面的操作完成测试
Unit层自动化测试:主要验证程序代码的正确性和语法的正确性
Service层测试:主要测试模块之间的调用关系的正确性
接口
- 接口全称为应用编程接口,简称为API
- 接口的本质是程序员开发的函数或方法,是完成一定功能的代码集合
- 两个不同的系统或一个系统中两个不同的功能,相互连接的部分称为接口
接口的类型
- 接口是指外部系统与系统之间以及内部各个子系统之间的交互点
- 包含外部接口、内部接口
- 内部接口又分为上层服务与下层服务接口,同级接口
- 常用接口为HTTP协议接口
服务器与客户端
- 服务器:被测软件或被测接口程序
- 客户端:个人计算机,一般会安装Postman、Fiddler、Charles、APIfox、JMeter
请求与响应
- 客户端要用服务器上的某个软件或功能,需要把要处理的数据发送给服务器,服务器上的接口程序会处理数据,然后把结果发送给客户端
- 客户端将数据发送给服务器的过程叫做请求
- 服务器将处理的结果发送给客户端的过程叫做响应
请求的组成
- 请求头
- 编码方式、语言、Cookie、地址、重定向地址、设备信息、浏览器信息、操作系统、系统位数等
- 请求体
- 也叫请求正文,对于POST方法来讲,要发送给服务器的数据存放在请求体中
响应的组成
- 响应头
- 主要是指响应的附加信息、比如响应类型、响应状态码、cookie、session等
- 响应体
- 响应正文,相当于接口的返回值
Web 接口的组成要素
- 接口地址
协议://服务器的ip地址或域名:端口号/项目名称/功能名? 参数名1=参数值1&参数名2=参数值2
- 协议
- http 端口号 80
- https 端口号443
- https 是基于SSL的超文本传输协议,比http更加安全
协议名称 | 解释 |
http | 超文本传输协议 |
https | 基于SSL或安全的超文本传输协议 |
FTP | 文件传输协议。用于下载上传文件 |
SMTP | 邮件传输协议,用于发送邮件 |
POP | 邮局协议 |
面试题: http与https区别?
1、HTTPS的服务器需要到CA申请证书,以证明自己服务器的用途;
2、HTTP信息是明文传输,HTTPS信息是加密传输;
3、HTTP默认端口是80,HTTPS默认端口号是443;
4、https采用混合加密算法(对称加密和非对称加密)
5、https 比 http 协议更加安全,但是https协议传输效率没有http效率搞。
- 域名
- 端口号
- 一台服务器会提供很多服务,用不同的端口号区分不同的应用程序或接口
- 端口号是可以修改的
- ?
- 用于分割接口地址或参数的标志
- 一般地址栏中含有?的请求是GET请求方法
- &
- 用于连接多个参数,固定写法
- URL叫做统一资源定位器,表示一个完整的网址或接口的地址
- URI 叫做统一资源标识符,一般用来表示网址或接口中具体位置或名称,是URL的一部分
- 请求方法
- 表示如何发送和处理数据
- 常用的请求方法
请求方法 | 方法介绍 |
GET | 主要用于获取数据/查询 |
POST | 主要用于增加、修改、删除资源 |
PUT | 主要用于修改资源(全部更新) |
PATCH | 主要用于修改资源(部分更新) |
DELETE | 主要用于删除资源 |
HEAD | 主要获取头部信息 |
- 注意测试时,使用哪种方法要根据接口文档
- 请求参数
- 需要接口程序处理的数据
- 参数名、参数类型、参数长度、参数约束、那些必填、那些选填
- 响应头
- 响应状态码、简称为状态码
- 200 成功响应,服务器把结果发送给客户端,但是内容是否正确不确定
- 301 永久重定向,比如网址发生永久改变,但是旧网址不能删除,访问旧网址时,自动的跳转至新网址
- 302 临时重定向,网页跳转,比如登录后自动跳转首页
- 401 需要授权(cookie、session、token)
- 403 客户端错误,比如客户端IP被禁,客户端没有写权限、客户端无读权限、客户端证书错误
- 404 接口地址错误 服务器没有找到相应资源
- 500 服务器错误,服务器关闭、服务器重启、服务器忙碌、服务器上代码有错误
- 相应类型
- text/html 网页版文本格式
- JSON
- XML
- 响应正文
- 接口返回值中最核心的部分
- 最终测试是否通过都要检查响应正文
- 数据库
- 如果接口涉及到数据库,必须要验库
面试题:Get与Post区别
- Get请求可以被缓存的,Post不可以
- Get请求会保存在浏览器的历史记录中,Post不会
- Get请求可以被收藏为书签,Post不会
- Get请求时,发送数据的长度一般都有限制(与浏览器有关),Post没有限制
- Get发送的数据一般会在URL中,Post发送的数据放在请求体中
- Post方法相对于Get方法更加安全
- Get请求一般用于获取数据,Post请求主要用于提交数据
接口测试
接口测试的含义
- 对接口的功能、性能、安全性等方面进行验证的一种测试类型
- 接口功能测试主要用于验证接口是否正确实现或处理需要的各种业务,将不同的数据传递给同一个接口,判断各个返回值是否正确
为什么进行接口测试
- 前后端分离
接口测试的方法
- 自动化测试初级:测试工具,例如:Postman、JMeter、Fiddler、Charles等工具使用
- 自动化测试高级:自动化测试脚本,Python、Requestes库、pytest/unittest、pandas,pymysql等
接口自动化测试含义
- 通过编写脚本实现接口测试
自动化脚本能做什么
- 自动准备初始化数据
- 自动执行测试用例
- 自动验证接口返回结果的正确性
- 自动验证数据库数据的正确性
- 自动生成测试报告
接口测试的步骤
- 分析需求
- 编写测试用例
- 部署接口测试环境
- 编写/制作测试脚本(使用工具或编码)
- 执行测试脚本
- 记录测试结果
- 生成测试报告
Postman
- 是一款功能强大的网页调试和模拟发送HTTP请求的谷歌插件
- 可以使用各种方法发送网页HTTP请求,能够运行测试用例
Postman接口测试环境部署
詳細的安裝步驟在此文章:https://blog.51cto.com/u_16239770/7599444
- node.js
- 主要是使用nodo.js提供的npm命令,使用npm命令安装一些软件
- 启动命令行(运行--cmd--输入命令)
node -v
- cnpm
- 是npm的中国版
# 安装 cnpm
npm install cnpm -g --registry=https://registry.npm.taobao.org
# 验证cnpm
cnpm -v
- xmysql
- 是node.js提供的连接MySQL的工具
cnpm install -g xmysql
- newman
- 是Postman的一个插件,用于再命令行中执行测试
cnpm install -g newman
- newman-reporter-html
- 是Postman的一个插件,用于生成HTML测试报告
cnpm install -g newman-reporter-html
- 查看所有安装内容
npm list -g --depth 0
项目流程
- 售前技术支持、商务、销售--沟通客户,制作解决方案
- 投标、竞标(技术解决方案、商务分、商务分、价格分)
- 立项
- 产品经理、需求、设计与客户沟通需求,产品原型图、需求文档
- 项目经理、架构师、后端开发、前端开发、测试、DBA根据需求进行开会讨论
- 产出:需求文档、原型图、ER图(数据库设计)
- 排期--一个版本的周期
- 任务、人员、时间分配
- 开发人员编写代码
- 测试人员
- 测试经理指定测试计划
- 测试人员根据计划要求、熟悉自己任务模块(需求)
- 编写测试用例
- 用例评审:组织测试、开发、产品、项目经理等人
- 查缺补漏、修改错误用例
- 开发提测
- 组织开会:收case会议:有开发经理介绍本轮研发的功能及修改过的功能
- 冒烟测试:发现问题直接提出,记录问题
- 收case通过后,开发提测
- 测试经理/组长/负责部署环境的人员进行测试环境部署
- 测试经理发送邮件:通知人员展开测试工作
- 环境信息
- 任务信息
- 时间安排
- 测试人员执行测试,记录测试结果,发现问题,提交缺陷报告,跟踪管理缺陷,编写总结
被测系统环境搭建(wa_test测试案例)
- 云服务器(腾讯云、阿里云、百度云、华为云、天翼云)---属于硬件
- 操作系统:Linux操作系统(Centos7.6 )
- 容器虚拟化:Docker容器
- 数据库:MySQL
- 语言:PHP
- Apache服务
Docker
- 容器技术,快速部署应用
- 对比产品--VMware对比
- 一个镜像包含一个应用程序,可以达到隔离效果
- 支持自己创建镜像
Postman使用流程
- 创建工作区
- 创建测试集
- 创建多个文件夹进行分组
- 添加请求:编写接口测试用例/接口测试脚本
- 脚本名称、请求方法、接口地址
- 请求参数、请求头、请求体、前置代码块、后置代码块、cookie管理器、
- 发送请求获得响应
- 响应猪蹄、响应cookie、响应头、测试结果、响应状态码、响应时间、响应文件大小、相应类型
Postman实现接口测试流程
- 数据库初始化
- 请求脚本
- 添加断言(业务层、数据层)
- 参数化
- 运行测试
Postman实现接口测试流程
Get方法发送请求
Demo01
使用Get方法访问百度首页
接口地址:http://www.bai.com
请求方法:Get
参数:无
返回格式:text/html
预期包含文本:百度一下,你就知道
- 请求
- 响应
- body响应体、相应正文
- Pretty可以让JSON和XML相应内容显示的更美观完整
- Raw显示的是最原始的数据
- Preview把HTML页面自动解析显示出来
- Visuallze可视化,需要在tests中编码
- 响应头
- Content-Type响应类型
- Set-Cookie服务器发送的cookie值
- Get方法访问接口时,运用?连接参数,多个参数之间使用&连接
- Get方法请求参数写入Params,会自动同步到接口地址中
Post方法发送请求
Post数据提交方式
- 参数需要在Body部分填写
- x-form-urlencoded 类型
- 将表单数据转换为key=value的形式,放入请求体中
- Raw
- 可以发送任意格式的就扣数据,如text、json、xml、html、java、javascript
- form-data
- raw中JSON
- bianry
- 发送二进制数据,只能上传一个文件
Demo01
Post发送表单数据
接口功能:判断登录是否成功
接口地址:http://接口服务器IP/apitest/text-login/
请求方法:post
请求类型:form表单
数据库表:wa_test.users
响应类型:text/html
预期包含文本:用户**登录验证成功
Postman脚本执行顺序
点击Send后执行顺序
- pre-requests script 请求前脚本
- 请求
- tests 请求后脚本
Pre-requests Script
- 在发送测试请求之前所要执行的代码
- 常用于设置域名、IP、保存多个请求供用户的数据等
Environment
- 环境变量
- 实质是局部变量,理论上只能在某个请求中使用
- 使用代码添加当前环境变量
pm.environment.set("环境变量名",变量值)
- 变量名必须添加引号
- 此类环境变量只能用于当前请求
- 通常放在Pre-requests Scrip、Tests中
- 使用代码添加全局变量
pm.globals.set("全局变量名",变量值)
- 此类变量可以使用于所有请求
- 通常放在pre-requests script 中
- 使用环境变量和全局变量
{{环境或全局变量名}}
pm.environment.set("环境变量名")
pm.globals.get("环境变量名")
- 获取当前环境变量或全局变量
- 用于代码中
注:环境变量需要选择,全局变量不需要
Demo01
要求:IP使用环境变量进行设置
接口功能:验证账号和密码是否正确
接口地址:http://接口服务器IP/apitest/login/
请求方式:post
请求参数类型:form表单
请求参数说明:
username 账号
password 密码
数据库表:wa_test.users
返回格式:json
返回值形如:{"Status":1000,"Result":"Usercheck ok","Message":登录成功}
将IP设置为环境变量后就将地址中的IP换成自己命名的,要用{{ }}括起来
#向console终端输出数据
console.log("要打印的内容")
#查看数据类型
typeof(数据/变量)