功能测试:手工测试、UI测试 业务+技术
前端 后端
C/S Client --网络--Server
B/S Browser --网络--Server
接口测试:Interface Testing
相对于界面UI测试、单元Unit测试,属于基于服务层Service测试;
http://www.baidu.com/s?word=%E5%8C%97%E4%BA%AC%E5%A4%A9%E6%B0%94&tn=50000167_hao_pg&ie=utf-8
http://www.baidu.com/s?word=北京天气&tn=50000167_hao_pg&ie=utf-8
协议:Protocol 网络通信的规则、规范、标准
比如:HTTP 超文本传输协议
FTP 文件传输协议
TCP 传输控制协议
C:UserszhangAppDataRoamingMicrosoftWindowsStart MenuPrograms
一、教学环境准备
https://www.postman.com/
Download the App
下载
https://www.postman.com/downloads/
1、Postman: 接口测试工具、接口自动化工具
需要注册
右上角 Sign in 进行登录
点击 Create Account 注册
填入邮箱或用户名、密码
需要注册,否则有一些功能限制,比如工作区无法使用
2、Fiddler:Web调试代理工具(抓包工具、包的分析、调试报文)属于接口测试的辅助调试工具
以上两个软件是有冲突的,都是以代理方式工作。
检查一下工具环境
比如Fiddler4 版本不一定越新越好,比如不够稳定
每次启动时有Update 升级声明,平时点击No,不需要升级
无需注册,即可使用
如果安装Fiddler时提示无法安装,需要先安装.Net插件;
打开Google浏览器,尝试是否可以使用:
https://www.baidu.com
访问过程中,查看到列表,就是上网的信息包,重点在于分析
3、被测系统
目前使用免费的第三方的系统:聚合数据 www.juhe.cn
需要注册、登录、认证(个人认证,上传身份证正反面照片 需要审核,需要等待一两天)
注意:一个账号只能申请一个免费接口,练习时接口需要申请才可访问。
申请比较快,认证稍慢些
二、接口测试招聘需求
1、自动化:功能自动化 QTP Selenium
性能自动化 LoadRunner JMeter
接口自动化 Postman Fiddler JMeter...
手机自动化 adb monkey monkeyrunner Appium ...
2、分层的手工测试:
黑盒测试、白盒测试、灰盒测试
1)黑盒测试:一般也称为功能测试,把测试的程序看作是一个黑盒子,在程序界面输入数据,进行操作,检查程序是否按照需求规格说明书的规定正常实现。
投入产出比 较低,就是编写用例发现的缺陷不是很多;
2)白盒测试:又称为结构测试,在单元测试阶段完成,对代码要求较高
通过检查代码来发现程序的错误,需要测试人员掌握被测系统所用的编程语言,熟悉程序结构和处理过程,所以一般由程序员自己来做,在单元测试阶段应用较多。
目前需求量较小:航空航天、医疗、银行等
比如神州6号飞船控制系统代码120万行,测试代码写了150万行
Win7操作系统5000万行,Linux系统2000万行
白盒测试精确度非常高,发现bug的修复成本非常低
让测试人员进行白盒测试,难以推广,要求很高。
3)灰盒测试:结合了白盒测试和黑盒测试的要素,是介于白盒测试与黑盒测试之间的测试。灰盒测试像黑盒测试那样,检查输出结果对于输入的数据
是否正确;同时也像白盒测试那样,检查程序的代码,但这种检查不像白盒测试那样详细、完整,一般只对程序模块之间的调用、核心代码进行检查,
在集成测试时经常采用,一般也是程序员大量采用。
在集成测试时,采用,取一个折中的办法
三、接口测试基础
1、测试金字塔模型
基本观点:应该有更多低级别的单元测试,而不仅仅是通过用户界面运行高层端到端的测试。
整个测试分为三层: UI Service Unit
1)UI层(User Interface 用户界面)
在用户界面上进行操作完成测试--黑盒测试(功能测试)
2)Server层:服务层测试
主要在集成测试阶段,测试模块间的调用关系
(一个模块给另一个模块提供调用,就说提供服务)
-- 主要测试代码之间的调用关系,也是接口测试的核心
3)Unit层:单元层,主要在单元测试阶段,使用白盒和黑盒的方法,测试某个模块的功能是否正确。
金字塔测试模型认为:UI层的测试效率低,发现Bug的能力弱,投入与产出比低(事倍功半),应该逐步减少采用;而更多采用Server层和Unit层的测试
(更多的代码级测试)
基本理念:1.越底层,越稳定
2.越底层,越高效
3.越底层,越低成本
4.越底层,越难实施
代码级测试特点:
精准度高、发现Bug能力强,发现Bug后解决的成本低
要求会代码,测试的人力成本、时间成本比较高--目前很难推广
世界范围的难题,目前还是大部分靠开发完成
-- 所以目前采用折中的办法——接口测试
UI层自动化测试:
功能自动化测试:使用Selenium、QTP等自动化工具对系统进行测试,主要通过模拟用户在界面的操作完成测试。
...
2、分层的自动化测试
基本观点:每一层都应该开展自动化测试
1)UI层:QTP、Selenium 功能自动化测试工具
主要应用在回归测试、大数据量测试,代替测试员的重复手工测试;
缺点:投入产出比低,发现Bug能力弱
2)Unit层:
Java测试:JUnit、JTest
Python测试:Unittest 自带的白盒测试工具
C/C++测试:C/C++ Test
使用工具测试代码的正确性和语法正确性、规范性
缺点:难度太大,找不到合适的人员,成本高;
3)Service层:接口自动化测试
测试模块间的集成示范正确:
接口测试就是测试模块间的调用关系的正确性。
目前主要指Web接口测试,主要测试网页和后台服务器之间的数据传递的正确性。
接口测试产生的背景:
(Web前端技术:HTML5、CSS3、JavaScript)
Web页面做得越来越复杂,交互数据越来越多,在前端页面和后台服务器之间有大量数据传递(函数调用),为了降低前端工程师和后台程序员的难度
,前端和后端采用“接口”来传递数据。接口测试主要考察传递的数据是否正确。
Web规范:构建基于B/S架构程序的一套行业规范
1)Web前端技术:HTML5、CSS3、JavaScript
-- 越来越炫酷、丰富、用户体验好 前端开发工程师
2)Web后端:Web服务器、应用服务器、数据库服务器、缓存服务器...
技术:以Java为例
JavaSE 标准版、JavaEE 企业级开发版本
JDBC:对数据库访问的规范
Servlet、JSP等Web规范
大数据、缓存...
-- 越来越稳定、高效、大数据、集群、分布式..
3)Web接口将前后端连接:表达客户端的请求,也能表达服务器的反馈,使用特殊文本,比如JSON、XML进行信息传递;目前主流的接口--Web接口
逻辑:要符合某种前提,根据前提完成后续流程,称为是一种逻辑;
Web开发的经典模型:MVC架构模型
1)Model: 模型层 业务逻辑
满足业务功能主要程序,对后台数据库进行访问
2)View: 视图层 显示逻辑
满足用户不同的显示效果,提供更加丰富的界面
3)Controller: 控制器层 控制逻辑
在V和M之间进行调度,指派某个M完成业务逻辑,将结果交给某个V显示界面效果;
需求:用户登录 界面
Username: Tom
Password: 123
Login 提交登录表单,向服务器发送请求
API:应用编程接口,可以理解为大量可用重用的功能、服务、函数...
写程序离不开API,是对已有大量功能调用、重组而成;
3、接口测试的概念
1)日常生活中的接口
通过接口连接,将传输的内容将一处传送到另一处。
2)程序的接口 API
Application Programming Interface 应用编程接口
接口本质上是程序开发的函数或方法,提供参数和返回值
函数的三要素:(C/Java语法)
功能名 加入的数据
返回值类型 函数名(参数表, ...)
int add(int a, int b) {
return a + b;
}
调用时:add(1, 2); 结果为3
add(3, 5); 结果为8
C,C++,JS Java,Python
4、函数:也称为方法 function、method
函数 方法
1)程序由大量的函数调用组成,有些编程语言把函数称作方法;
2)函数就是实现某个功能的代码,写在一个整体中,然后让自己或别人调用;call、invoke
3)函数编写和调用示例:
函数定义:
A. 实现两个数相加
1 2 实参
def add(x, y): 形参 变量就是代词,指代所用的值
z=x+y
return z
说明:定义一个加法函数,函数名称叫add,使用x、y接收两个参数,进行加法计算,最后将计算结果返回给调用者;
B. 实现减法函数
def sub(m, n):
t=m-n
return t
说明:定义一个减法函数,函数名称叫sub,使用m、n接收两个参数,进行减法计算,最后返回减法计算结果;
把函数理解成一个加工机器,接受一定的参数(被加工的数据),进行处理,处理完以后,把结果返回给调用者;
函数调用:
a=10
b=20
sum=add(a,b)
调用加法函数add,同时传递a=10给x,b=20给y
res=sub(2000,1000)
调用减法函数,传递参数2000给m,1000给1000
说明:通过函数名称进行函数调用,本质就是要跳转到函数定义的位置去执行,并且把所需参数传递过去,达到重复使用代码,简化开发的目的。
函数核心要点:
函数名称、需要的参数、返回结果、函数实现的功能
函数必须先定义再调用
一个函数定义一次可以被多次调用(重复利用)
5、Web接口测试
现在企业说的接口测试,一般指的是Web接口测试或Http接口测试,主要指的是基于B/S架构的接口测试(B/S架构主要基于HTTP 超文本传输协议,
所以也叫HTTP接口测试)
1)B/S架构使用的协议:
HTTP 超文本传输协议
HTTPS 安全版的HTTP协议
2)在客户端(Browser浏览器)和服务器端(Server)之间传输的数据主要包括:HTML(静态网页)、视频、音频、图片、CSS(样式表)、JavaScript等。
6、为什么采用Web接口?
项目分工:
产品经理、需求分析师
开发人员:系统架构师、Web前端工程师、程序员
测试人员
为什么人员使用Web接口?
程序是分层设计的,各层之间有数据传递
表示层 <-> 业务逻辑层 <-> 数据访问层 <-> 数据库
View Controller Model DB
几乎所有管理系统的共性:
对xxx信息的CURD操作:增删查改
Create Update Read Delete
1)程序开发是分层的,一般至少分为3层:
A. 界面层:提供程序的界面,要求美观,吸引客户,有美工或前端开发工程师完成;
B. 业务逻辑层和数据访问层:完成程序的实际业务处理功能和数据读取、写入等数据操作功能,一般由程序员完成。
在各个层之间有大量的数据传递。
2)随着Web前端技术的兴起,用户交互界面越来越复杂、美观,同时显示的数据越来越多,数据在前端和后端传递难度比较大——解决方案:前端和后端
采用Web接口传递数据;
7、采用Web接口的好处:
各司其职,各尽所能,应用广泛
1)前端专业性越来越高,重点关注显示逻辑;
2)后端由程序员完成,重点关注业务和数据逻辑;
3)Web接口应用广泛,既可满足Web页面调用,也可满足移动App调用,即可提供公司内部系统调用,也可提供给公司外系统调用。
8、什么是Web接口测试?
Web接口测试就是测试前端和后端之间的Web接口的正确性。
为什么做Web接口测试?
1)可以更早的介入测试;
2)更好的验证系统的安全性和性能;
3)发现底层的问题。
接口:简称为API,是对大量可复用功能的统称;
如何访问到某接口,对API的访问;
Python API: int() str() print() 函数
Mysql函数:sum() avg() max() min() count()
C函数: strcmp() 字符串比较
Java方法:System.out.println(); 打印...
共同点:都有函数名(功能名)、参数表(加入计算的数据)、返回结果;
Web接口:也有地址URL、参数,响应结果一般JSON格式;
接口测试思路:
1)获取需求 -- 需求规格说明书
2)获取接口文档 -- 开发方在设计阶段编写的 核心依据
3)编写接口测试用例
4)使用工具执行用例 比如:Postman
5)编写接口测试报告
重点分析接口文档的内容:
1)接口名称:通用酒店数据接口
2)子接口:
<1> 通用酒店数据接口
<2> 酒店房型
<3> 酒店评论
3)接口简介:
多个酒店平台数据汇总,通过访问该接口可获取详细的酒店数据。从各大酒店平台采集的酒店数据,包含酒店名称,评论数,联系方式以及房型报价等数据
,支持使用经纬度+距离查询,也支持关键词查询,两种方法可以单独使用,亦可以结合使用。
4)请求方式 : 满足 HTTP、HTTPS协议
以GET方式发请求
5)请求URL:统一资源定位 就是“地址”
http://api01.idataapi.cn:8000/hotel/idataapi
6)携带的参数:
?apikey=自己API调用凭证&kw=广州
语法:Query String 查询字符串
规则:?参数名=参数值&参数名=参数值&...
目的:URL后携带请求的参数 给服务器
参数名: 含义: 参数值: 是否必填:
apikey API调用凭证 查阅文档xxx 是
kw 搜索关键词 广州、上海... 否
lon 经度 113.829 否
lat 维度 23.333 否
distance 距离 5km 否
...
kw: 搜索关键词 比如:广州
请求示例 : URL 通过以下地址访问某接口,发送参数信息
协议名://域名:端口号/应用名/资源名?参数名=参数值&...
http://api01.idataapi.cn:8000/hotel/idataapi?apikey=您的apikey&lon=11&lat=22&distance=33&kw=广州
7)接口返回结果:一段封装了酒店结果信息、错误提示信息的JSON文本;
Postman的基本使用:
1)安装并注册、登录
注意:登录后才可创建属于自己的工作区
Postman的后台服务会保存之前工作区
2)创建一个工作区 WorkSpace
-> Create New 创建新的
名称:TSDxxxx上课案例
说明:针对一些接口进行测试
类型Type: 个人 Personal
3)在工作区中创建一个用例集:Collections
-> New Collection 新建集合
名称:通用酒店数据接口测试
描述:
多个酒店平台数据汇总,通过访问该接口可获取详细的酒店数据。从各大酒店平台采集的酒店数据,包含酒店名称,评论数,联系方式以及房型报价等数据,
支持使用经纬度+距离查询,也支持关键词查询,两种方法可以单独使用,亦可以结合使用。
-> Create 创建
4)在用例集下可创建子接口:(子目录)
-> Add Folder 新建文件夹、目录
目录名 描述
<1> 通用酒店数据接口 xxxxxx
<2> 酒店房型 查看酒店房型信息
<3> 酒店评论 查看酒店评论信息
5)考虑请求的不同协议、方式:
在"通用酒店数据接口"目录下,新建子目录:
目录名 描述
<1> HTTP 针对HTTP协议的请求进行测试
<2> HTTPS 针对HTTPS协议的请求进行测试
6)在HTTP子目录下,新建请求:依据接口文档设计 填写
-> Add Request 思路:一个请求对应一条用例
<1> 请求名称:通用酒店数据-HTTP-GET-001
(用例名称) 接口名-协议-方法-编号
<2> 描述:
基于HTTP请求,以GET方式访问,使用有效数据kw查询,看能否返回正常的结果;
-> 添加
<3> 请求方法:GET
<4> URL:统一资源定位 请求的地址
http://api01.idataapi.cn:8000/hotel/idataapi
<5> Params: 请求的参数 作为查询字符串写的
Query String
Key参数名 Value参数值
kw 广州
apikey xxxxxxxx 自己查文档
7)保存请求:Save Ctrl+s
8)发送请求:Send
9)查看返回数据包结果:
Status: 200 OK 成功 HTTP响应状态码
Time: 5.68s 请求响应时间
Size: 537.27 KB 响应包大小
重点关注:响应的主体,目前是一段JSON格式文本
{
"data": ....
}
{ 消息 没有API key 在请求的头部 或
"message": "No API key found in headers or querystring" 查询字符串中找到 ?apikey=xxx
}
HTTP响应码:401 Unauthorized
属于客户端错误,和未授权有关
401 - 未授权: 由于凭据无效,访问被拒绝。
{ 消息 无效 认证号
"message": "Invalid authentication credentials",
"retcode": "100700"
接口设计的状态码 查看接口文档
}
100700 Invalid authentication credentials 授权失败
HTTP响应码:403 Forbidden 访问被禁止
?kw=广州& apikey=m3s5sF0pghf7HFyrT2O3PuL7Rv
面向对象基本理解:
类: 对一类事物的抽象、看法、概念
属性--数据抽象 有什么?
方法--业务抽象 会什么?行为
对象:类的具体代表、个体、实例 “万物皆对象”
找到某类,创建某对象,通过属性区分不同对象,通过调用方法完成不同业务行为;
其它:面向对象三大特性--封装、继承、多态
JSON和XML的区别?
1)XML:可扩展标记语言 标签可以自定义
HTML:超文本标记语言 是一种特殊的XML
大量标记、标签由Web规范规定的
<html 属性名="属性值"></html>
XML文本第一行:声明
<?xml version="1.0" encoding="utf-8"?>
<country> 根标记 代表一个国家
<name>中国</name> 子标记 国家名称
...
</country>
普通文本:city:北京,city:上海,....
内容结构过于简单,无法胜任复杂格式
但是内容更精简
2)JSON:JavaScript对象定位、表示法
介于普通文本和XML文本之间,比普通文本复杂,又比XML格式简单(表达、生成、解析),跨语言(多种开发语言都能读懂JSON)、
跨平台(不同操作系统也支持),常用于表达较为复杂的信息,是一种轻量化的、面向对象思想的文本数据格式;
Web前端 ---网络、接口协议--- Web服务器程序
HTML、JS、CSS Java程序
将JSON信息 <--- 查询结果=> JSON
解析并表达到界面中
界面中的信息
封装为JSON文本 ---> 解析并存入数据库中
比如:{}表示一个JSON对象
{ "属性名" : 属性值 目前都是字符串
"message": "Invalid authentication credentials",
"retcode": "100700"
}
9、接口测试核心技术点
1)协议:
Web接口主要使用Http、Https协议
2)数据格式(用什么方式存储、传递这些参数)
JSON(JavaScript对象表示法)
10、接口测试的主要测试点
1)功能测试
业务流程(业务功能)测试、
参数测试(必填参数、选填参数、参数组合、特殊字符、最大值、最小值)
2)性能测试
响应时间、用户数、吞吐量(每秒处理多少字节)
3)安全性测试
敏感信息加密、核心数据前后端都要验证、防止恶意请求