一、Web介绍
1、Web技术
实现B/S架构的全套技术规范,包括Web前端、Web后端技术;
2、Web前端
以浏览器为代表的技术,比如HTML(网页语言)、JavaScript(前端动态脚本)、CSS(层叠样式表),都是在浏览器端执行,出现美观的、可视化的、带有交互的UI界面。
3、Web后端
由后台服务器开发技术构成,比如Java Web开发技术、数据库、SQL、接口程序,都在后台执行,比如以Wa服务器运行接口程序。
3、关联关系
浏览器/服务器(Browser/Server)通过接口将Web前端、Web后端进行连接,通过前端访问后端。
二、分层测试技术
1、金字塔模型
(1)UI层:用户界面(User Interface)直观便于测试,但发现问题的能力较弱
(2)Service层:服务层,也就是接口层,可以进行接口测试,要求接口测试技术,提前介入测
试,发现问题的能力较强(调研数据表明:目前接口测试占比在提升,大概占25%~50%左右)
(3)Unit层:单元层,可进行单元测试,更早介入,更底层,发现问题能力强,技术要求高
不同层级对比如下图所示:
2、Service层(接口)测试
接口测试既靠近”UI“(便于开展测试),又靠近“底层”(便于发现根源问题)----属于”灰盒测试“。
三、接口原理
1、接口定义
1)一般特指软件接口,以Web项目为背景,主要是Web接口
2)接口也叫API(Application Programming Interface)应用程序编程接口
2、接口本质
本质上是开发方编写的函数或方法(程序),是对某业务功能的设计和实现
四、接口测试
1、接口测试原理
在没有用户界面时,使用专业的接口测试工具充当界面,从而进行系统组件间的接口测试,系统与外部其他系统之间的接口测试、系统内部各个子模块之间的接口测试。
以某公司采购系统为例:
1)内部接口:公司内部开发提供的:http://152.108.128.133/apitest/get-json/
2)外部接口:如京东商城根据商品类别编号查询商品页面类别编号存于数据库(由其它机构提供的)
https://list.jd.com/list.html?cat=9156,753,425 查询空调商品页面
https://list.jd.com/list.html?cat=370,271,872 查询电脑商品页面
2、访问接口三要素
请求方法(Get或Post)、接口地址、请求参数
以Get方法为例:
接口地址:https://list.jd.com/list.html
请求参数:类别编号 cat 值 6587,353,655category product
目的:根据商品类别编号(手机类别)查询和手机有关的商品页面
2、客户端(客户机)
(1)PC(个人电脑)
(2)安装浏览器,比如:Chrome、Edge、Firefox、IE等
(3)安装测试工具,比如:Postman、Fiddler、SoupUI、JMeter、Python等
例如:一般运用Postman+Fiddler组合
(4) 通过某种网络协议、规则访问服务器
3、服务器
(1)分为Web服务器、数据库服务器
(2) Web服务器:Web中间件(提供Web常用服务的软件)运行接口程序的载体,是Web应用程序的“容器”,内部安装了许多接口程序
4、请求(Request)
客户端向服务器发送HTTP请求(HTTP Request),为了获取服务器的资源、访问服务器的接口程序,进而可能访问到数据库。
请求是将客户端的数据发给服务器,由某接口程序接收并处理。
请求包分为请求头部 和 请求主体:
(1) 请求头:header
请求的附加信息,如客户端的操作系统、客户端使用的浏览器、客户端能够接受的字符编码、授权
客户端是否携带Cookie信息(小数据消息)等。
(2) 请求主体:body
Get方法,主体部分没有内容(0字节)
Post方法,发送的数据主要放在主体中携带
5、响应(Response)
响应:服务器将接口程序处理的数据结果 返回给客户端的过程;
响应包分为响应头部 和 响应主体:
(1)响应头:header
响应的附加信息,如HTTP响应状态码、响应内容类型(网页HTML、JSON文本、XML文本)、是否要求客户端设置Cookie信息等;
(2)响应主体:body
响应的正文部分,是接口的返回值,是测试时最关心的的部分。
五、接口构成要素
1、接口地址
API:URL地址(统一资源定位),实际上也可看做是一个网址
1)构成样式:
http://152.108.128.133:8080/sign/add_event/
协议名://服务器主机名:端口号/应用名/接口名
2 、协议名
HTTP(超文本传输协议)、HTTPS(安全的HTTP)、FTP(文件传输协议)、SMTP(简单邮件传输协议)、POP3(邮局协议第3版本)...
测试时,用什么协议,看需求和接口设计文档!
3、服务器主机名
服务器主机名 :IP地址 或 域名
测试时,服务器IP地址是什么,就写什么;
局域网:内部接口访问,一般使用IP地址;比如:152.108.128.133
互联网:外部接口访问,一般使用域名; 比如:list.jd.com
4、 端口号
例如:8080、443、8000
端口号是用一个数字表示使用服务器上的哪个软件 或 服务;
测试时,使用哪个端口号,是由环境搭建人员指定;
常用默认端口:
HTTP服务:默认80,一般可以省略不写(1024内)
HTTPS服务:默认443,一般可以省略不写(1024内)
http://www.baidu.com:80 (80可省略不写)
https://www.baidu.com:443 (443可省略不写)
注明:非默认端口,比如规定为8000,那就必须要写!
5、 应用名
被测软件的名称或简称,由接口程序开发者设计的;
测试时,应用名是什么,要看需求与接口设计文档;
6、 接口名
接口名也是接口文档设计好的,由大量程序员实现接口程序,我们测试;
实际测试时,接口名字很多,需要查看接口文档!
接口名末尾一般会带 / ,是否可以省略,要看接口设计文档。
六、接口请求
1、请求方法
1)如何发送和处理数据
2)常见的请求方法
get:主要用于获取资源 (索取) 常用于查询、删除操作
post: 主要用于提交资源(给予) 常用于增加、修改、删除
put: 主要用于更新资源 一般是全部更新
patch: 主要用于更新资源 一般是部分更新
delete: 主要用于删除资源
connect: 在HTTPS安全通信时,先建立安全的连接通道
测试时:选取哪种方法,取决于接口设计文档和需求!
2、请求类型
Get方法不用考虑,在遇到Post方法时需要区分以下类型:
1)form表单:x-www-form-urlencoded
把要发送的数据a=1&b=2 的形式放在请求主体(body)中
名称=值&名称=值&...
2)json: application/json
把要发送的数据以 {"a": 1, "b":2} 的形式放在请求主体(body)中
3)form-data: multipart/form-data
表单数据,用于发送文件,把客户端要提交的文本、文件放入请求主体(body)中携带!
测试时:选择哪种请求数据类型,取决于需求和接口设计文档;
3、请求参数
客户端发送给服务器,提供的一些条件数据;
本质:要求服务器上的接口程序处理的数据
比如:登录接口需要提交用户名和密码
1) 对于Get方法
参数放在URL地址中,属于请求头部
http://152.108.128.133:8080/sign/add_event/?id=1&name=zhanzhan
URL地址后 ?参数名=参数值&参数名=参数值&...
(QueryString 查询字符串)
id 和 name都是参数名
1 和 zhanzhan都是参数值
名值对 & 拼接多对数据,表示"与"、"和"的意思and
2) 对于Post方法
参数放在请求主体(body)中
具体形式,参考请求类型
测试时,接口是否有参数,参数的含义,名称和值,哪些是必须的,哪些是可选的,参数类型是什
么,是否有约束,都要看接口设计文档和需求!
4、响应结果(返回值)
4.1 HTTP响应状态码
根据Web规范规定:通过不同的响应码表示不同的问题,使用3位整数表示
200:成功响应 OK,表示服务器成功把结果返回给客户端,但内容有待查验
301:永久重定向,如网址发生了永久改变,访问旧网址时自动跳转到新网址
302:临时重定向,如登录成功后,跳转到新页面
400:域名/服务器地址 不存在或 请求错误(主要是参数错误)
401:客户端错误,需要授权,必须先提供有效认证,才能访问接口
403:客户端错误,如客户端IP被封禁、客户端无读写权限、客户端证书错误
404:客户端错误,资源找不到 访问接口的地址写错了,比如应用名、接口名
Not Found 找不到
500:服务器端错误,如服务器后台接口程序执行出现异常Exception、错误Error
后台接口程序出现bug的重要依据!
比如:NullPointerException 空指针异常 访问空的内容!
总结归纳如下:
1xx: 信息 正在传输中,可先不关注
2xx: 成功 不代表结果内容一定正确
3xx: 重定向 重新开始一个请求
4xx: 客户端错误 要关注
5xx: 服务器端错误 要重点关注!
4.2响应类型
text/html: 网页源代码 文本
json: json文本、字符串
xml: XML配置文本
4.3 响应体(响应文本)
测试时,必须验证响应文本中的数据是否正确(符合需求)!
接口测试:为了测试请求包 和 响应包 和实际是否一致!
比如,返回json文本:{"age":22,"isNul":null,"isVip":true,"name":"Balla_战战"}
5、对数据库影响
测试时,必须确保数据库的数据操作也是正确的
例如:登录时,确保数据库中有此记录;注册后,确保数据库中添加了一条新记录(验库)
七、UI测试与接口测试区别
1、UI测试
有用户界面,更直观,让用户更好上手测试,更容易发现UI界面的问题,但难以发现后端问题
2、接口测试
在没有用户界面时,使用专业的接口测试工具充当界面,完成系统内部及系统与外部接口测试,便于发现后端问题。