一、行业背景和测试分层
1、招聘需求
1)手工测试:业务需求、业务逻辑
2)自动化测试:业务逻辑 + 技术规范
功能自动化 QTP、Selenium
性能自动化 LoadRunner、JMeter
接口自动化 Postman、Fiddler、JMeter、SoapUI...
手机自动化 adb monkey monkeyrunner Appium ...
2、分层的手工测试:黑盒测试、白盒测试、灰盒测试
1)黑盒测试:一般也称为功能测试,把测试的程序看作是一个黑盒子,在程序界面输入数据,进行操作,检查程序是否按照需求规格说明书的规定正常实现。
说明:投入产出比较低,就是编写用例发现的缺陷不是很多;
2)白盒测试:又称为结构测试,在单元测试阶段完成,对代码要求较高;
通过检查代码来发现程序的错误,需要测试人员掌握被测系统所用的编程语言,熟悉程序结构和处理过程,所以一般由程序员自己来做,在单元测试阶段应用较多。
说明:目前需求量较小,常用于航空航天、医疗、银行等行业;
比如神州6号飞船控制系统代码120万行,测试代码写了150万行;
Win7操作系统5000万行,Linux系统2000万行;
白盒测试精确度非常高,发现bug的修复成本非常低;
让测试人员进行白盒测试,难以推广,要求很高。
3)灰盒测试:结合了白盒测试和黑盒测试的要素,是介于白盒测试与黑盒测试之间的测试。灰盒测试像黑盒测试那样,检查输出结果对于输入的数据是否正确;同时也像白盒测试那样,检查程序的代码,但这种检查不像白盒测试那样详细、完整,一般只对程序模块之间的调用、核心代码进行检查,在集成测试时经常采用,一般也是程序员大量采用。
说明:在集成测试时采用,取一个折中的办法。
3、测试金字塔模型
基本观点:应该有更多低级别的单元测试,而不仅仅是通过用户界面运行高层端到端的测试。
整个测试分为三层: UI Service Unit
1)UI层(User Interface 用户界面)
在用户界面上进行操作完成测试--黑盒测试(功能测试)
2)Server层:服务层测试
主要在集成测试阶段,测试模块间的调用关系
(一个模块给另一个模块提供调用,就说提供服务)
-- 主要测试代码之间的调用关系,也是接口测试的核心
3)Unit层:单元层,主要在单元测试阶段,使用白盒和黑盒的方法,测试某个模块的功能是否正确。
金字塔测试模型认为:UI层的测试效率低,发现Bug的能力弱,投入与产出比低(事倍功半),应该逐步减少采用;而更多采用Server层和Unit层的测试(更多的代码级测试)
基本理念:
1.越底层,越稳定
2.越底层,越高效
3.越底层,越低成本
4.越底层,越难实施
4、分层的自动化测试
基本观点:每一层都应该开展自动化测试
1)UI层:QTP、Selenium 功能自动化测试工具
主要应用在回归测试、大数据量测试,代替测试员的重复手工测试;
缺点:投入产出比低,发现Bug能力较弱
2)Unit层:
Java测试:JUnit、JTest
Python测试:Unittest 自带的白盒测试工具
C/C++测试:C/C++ Test
使用工具测试代码的正确性和语法正确性、规范性
缺点:难度太大,找不到合适的人员,人力成本高;
3)Service层:接口自动化测试
测试模块间的集成示范正确:
接口测试就是测试模块间的调用关系的正确性。
目前主要指Web接口测试,主要测试网页和后台服务器之间的数据传递的正确性。
二、接口的概念
1、日常生活中的接口
通过接口连接,将传输的内容将一处传送到另一处。
2、程序的接口 API
Application Programming Interface 应用编程接口
接口本质上是程序开发的函数或方法,提供参数和返回值
3、函数:也称为方法 function、method
函数 方法
1)程序由大量的函数调用组成,有些编程语言把函数称作方法;
目的:提高软件可复用性、易维护性
2)函数就是实现某个功能的代码,写在一个整体中,然后让自己或别人调用;call、invoke
3)函数编写和调用示例:
函数的定义三要素:(C/Java语法)
功能名 加入的数据
返回值类型 函数名(参数表, ...)
形参
int add(int a, int b) {
return a + b;
}
实参
调用时:add(1, 2); 结果为3
add(3, 5); 结果为8
函数定义:
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给n
说明:通过函数名称进行函数调用,本质就是要跳转到函数定义的位置去执行,并且把所需参数传递过去,达到重复使用代码,简化开发的目的。
函数核心要点:
函数名称、需要的参数、返回结果、函数实现的功能
函数必须先定义再调用
一个函数定义一次可以被多次调用(重复利用)
类比:接口理解为大量可以重用的服务、功能
接口测试主要是通过某种途径访问接口功能,通过参数传入需要的数据、条件,之后判断结果是否符合预期、需求。
接口需要开发方设计、实现,由测试方进行测试。
三、Web接口测试
1、Web接口测试概念
Web接口测试就是测试前端和后端之间的Web接口的正确性。
现在企业说的接口测试,一般指的是Web接口测试或Http接口测试,主要指的是基于B/S架构的接口测试(B/S架构主要基于HTTP 超文本传输协议,所以也叫HTTP接口测试)
1)B/S架构使用的协议:
HTTP 超文本传输协议
HTTPS 安全版的HTTP协议
2)在客户端(Browser浏览器)和服务器端(Server)之间传输的数据主要包括:HTML(静态网页)、视频、音频、图片、CSS(样式表)、JavaScript等;
接口测试返回的结果大多是JSON格式文本。
2、接口测试产生的背景:
(Web前端技术:HTML5、CSS3、JavaScript)
Web页面做得越来越复杂,交互数据越来越多,在前端页面和后台服务器之间有大量数据传递(函数调用),为了降低前端工程师和后台程序员的难度,前端和后端采用"接口"来传递数据。接口测试主要考察传递的数据是否正确。
Web规范:构建基于B/S架构程序的一套行业规范
1)Web前端技术:HTML5、CSS3、JavaScript
网页代码 层叠样式表 动态页面处理
-- 越来越炫酷、丰富、用户体验好 前端开发工程师
富客户端 Rich Client
2)Web后端:Web服务器、应用服务器、数据库服务器、缓存服务器...
技术:以Java为例
JavaSE 标准版、JavaEE 企业级开发版本
JDBC:对数据库访问的规范
Servlet、JSP等Web规范
大数据、缓存...
-- 越来越稳定、高效、大数据、集群、分布式..
3)Web接口将前后端连接:表达客户端的请求,也能表达服务器的反馈,使用特殊文本,比如JSON、XML进行信息传递;目前主流的接口--Web接口
3、Web开发的经典模型:MVC架构模型 各司其职、各尽所能 分层为了分工
1)Model: 模型层 业务逻辑
满足业务功能主要程序,对后台数据库进行访问
2)View: 视图层 显示逻辑
满足用户不同的显示效果,提供更加丰富的界面
3)Controller: 控制器层 控制逻辑
在V和M之间进行调度,指派某个M完成业务逻辑,将结果交给某个V显示界面效果;
逻辑:要符合某种前提,根据前提完成后续流程,称为是一种逻辑;
4、为什么采用Web接口?
1)项目分工:
产品经理、需求分析师
开发人员:系统架构师、Web前端工程师、程序员
测试人员
目的:各司其职,各尽所能,应用广泛
<1> 前端专业性越来越高,重点关注显示逻辑;
<2> 后端由程序员完成,重点关注业务和数据逻辑;
<3> Web接口应用广泛,既可满足Web页面调用,也可满足移动App调用,即可提供公司内系统调用(内部接口),也可提供给公司外系统调用(外部接口)。
2)为什么开发人员使用Web接口?
程序是分层设计的,各层之间有数据传递
表示层 <-> 业务逻辑层 <-> 数据访问层 <-> 数据库
View Controller Model DB
几乎所有管理系统的共性:
对xxx信息的CURD操作:增删查改
Create Update Read Delete
5、为什么做Web接口测试?
Web接口测试就是测试前端和后端之间的Web接口的正确性。
1)可以更早的介入测试;
2)更好的验证系统的安全性和性能;
3)发现底层的问题。
接口:简称为API,是对大量可复用功能的统称;
如何访问到某接口,对API的访问;
Python API: int() str() print() 函数
Mysql函数:sum() avg() max() min() count()
C函数: strcmp("abc", "abc") 字符串比较
Java方法:System.out.println(); 打印...
共同点:都有函数名(功能名)、参数表(加入计算的数据)、返回结果;
Web接口:也有地址URL、参数,响应结果一般JSON格式;
(满足Web协议-HTTP)
A国 ----- B国
秘书 ----- 秘书
机要 ----- 机要
电信 ----- 电信
设备 ----- 设备
四、网络协议
网络协议:网络通信的规则、规范、约定
协议要分层:不同层面负责不同功能,具有不同规则
上下层有联系,同层关系是对等
1、OSI7层模型:理论模型 参考模型
从上到下:
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
记忆方式:从下到上 物数网传会表应
2、TCP/IP 4层模型:现实中的网络模型 更实用
TCP/IP协议簇 cu4 簇拥 花团锦簇
将同类协议聚在一起管理
从上到下 作用
1)应用层 满足用户不同功能需求 应用程序、用户直接面对!
<1> HTTP 超文本传输协议 看网页、访问Web接口
<2> HTTPS 安全的HTTP 确保安全交易,内部多验证 基于SSL
<3> FTP 文件传输协议 文件上传、下载 传输文件
<4> SMTP 简单邮件传输协议 邮件收发
<5> POP3 邮局协议第3版本 和邮件有关
<6> SSH 安全的shell 远程控制Linux系统
<7> Telnet 远程登录 远程登录服务器
<8> DNS 域名解析服务 将域名->IP地址
<9> TFTP 简单文件传输协议 比FTP效率高,但不可靠
2)传输层 传输是否可靠 TCP和UDP
面试题:TCP和UDP有何区别?
<1> TCP 传输控制协议 可靠的、面向有连接,效率较低
原理:建立连接时3次握手,传输时进行2次握手,断开连接时4次握手
"握手"就是信号的确认
--相见时难别亦难
用途:大量应用层协议的传输层一般都是TCP,可靠
HTTP、FTP、SMTP...
三次握手细节:
通过三次握手保证数据传输时网络的连通性,在发送每个数据包之前,都会进行三次握手(确认):
第一次由客户端向服务器发送SYN请求;
第二次由服务器向客户机发送ACK应答信号;
第三次由客户机向服务器发送ACK应答信号;
三次握手完成后,再传递真正的数据包,到达率更高。
<2> UDP 用户数据报协议 不可靠的、面向无连接,效率较高
原理:只管发,不管确认
用途:对效率要求高,对可靠性要求较低的应用
比如:视频会议
比如:应用层TFTP 简单文件传输协议 传输层用UDP
3)网络层 寻找对方主机 IP
<1> IP协议:网际协议 IP地址、MAC地址、子网掩码
ipconfig /all 查看到 IPv4 IPv6
<2> ARP:地址解析协议 将网卡地址MAC -> 报文
<3> RARP:反向地址解析协议 报文 -> 网卡地址
<4> ICMP:Internet控制消息协议 网络连接检查有关
比如ping命令 判断网络是否可以连通
具体细节和关系:
a. 计算机要想上网,必须具备一个唯一的IP地址;
b. 目前采用IPv4版,使用32位二进制表示的一个地址,实际中,采用4个十进制数表示,
比如:192.168.0.100 4个字节,共32位表示地址
1个字节的数据范围? 1Byte=8bit
二进制:00000000 ~ 11111111
十进制:0 ~ 255
IP地址1: 172.166.0.122 主机名
IP地址2: 172.166.0.123
子网掩码:255.255.255.0 判断两个IP是否在同一子网中
两个IP分别和子网掩码进行按位与操作,如果结果一致,说明在同一网段中;172.166.0.0 结果一致
c. IP地址可以分为静态IP和动态IP,静态IP就是人为设置一个固定的IP;
动态IP是由服务器动态分配的。
d. 使用ipconfig命令查看IP地址,会使用"网络和共享中心"配置IP;
e. IP地址不易记忆使用,所以一般采用域名来代替IP;
但是需要DNS(Domain Name System 域名解析系统)解析解析:
由域名找到对应的IP地址主机
www.baidu.com --- 61.135.169.125 公网IP
说明:万网 注册域名 全球域名解析服务器有十几台
f. IPv4的限制:数量有限,不够使用 2的32次方种
目前公司、企事业单位都采用代理方式上网,也就是一台机器具有唯一IP,其他机器采用代理地址(172.168.xxx.xxx 192.168.xxx.xxx 作为局域网中出现),未来升级成IPv6版,128位二进制数表示; 2的128次方种IP地址
物联网
g. 除了IP地址之外,还必须有物理硬件地址(网卡地址、MAC地址),IP + MAC地址才能唯一找到网络中的一台计算机;
使用命令:ipconfig /all 查看MAC地址
ipconfig -all
h. IP协议负责封装/解封装目标机器的IP地址,ARP/RARP协议负责封装/解封装MAC地址;
i. ICMP:控制网络层的一些数据传递,主要用于网络的检查,比如检查与目标机器是否连通;
比如:ping 目标机器IP或域名
ping 172.166.0.20 请求超时
ping www.baidu.com
j. 小结:通过网络层,可以找到目标机器的IP地址和MAC网卡地址,确定数据的目标地;
以上协议和访问接口的关系:
URL地址格式: DNS
含有主机名 域名、IP地址
http://主机名:端口号/应用名/资源路径
应用层 网络层 应用层
传输层
TCP
4)物理层 将信息变为各种信号发送和接收 物理设备
底层比特流、二进制的处理
bit
<1> PPP 点对点协议
将各种光、电...信号 <-> 计算机二进制信号
过于底层,不作为应用分析的细节
综上所述:主要关注应用层协议(HTTP为主 功能),附带了解传输层(TCP为主 可靠); 涉及主机寻址,需要关注 网络层 IP(寻址)
Postman主要模拟:HTTP、HTTPS、FTP
JMeter能够模拟更多协议:HTTP、JDBC、shell... 甚至通过二次开发可扩展
LR也支持大量协议 可以测试大多接口的性能
3、端口
1)端口作用:主要解决一台计算机中提供两个及以上同类型服务冲突问题,用来区别应用层的协议;
Tomcat
比如:一台服务器中提供两个Web网站,就需要把两个网站指定不同的端口号进行区别,以便客户端通过IP地址 + 端口号进行访问。
比如:
作用:通过IP地址寻址一台主机,通过占用的端口号找到不同服务;
2)常见默认端口号:(面试题)
当服务使用默认端口号时,访问时可以省略,比如http://...
HTTP 80 大多基于TCP :80可以省略
HTTPS 443 :443也可以省略
FTP 21
SSH 22
Telnet 23
SMTP 25
DNS 53
TFTP 69 基于UDP
POP3 110
常用服务默认端口:
Oracle 1521
Mysql 3306 my.ini配置文件可修改
Sqlserver 1433
Tomcat 8080 conf/server.xml可修改
3)安装完一个服务,如果不能正常启动,一种可能就是该电脑中有同类型服务已经启动,并占有了端口号,可以使用命令查看端口号占有情况:可以停止已经启动的服务进程,或者修改不同的端口号
netstat -ano
netstat -ano |more
分屏显示,回车继续、空格翻页、q退出
定位技巧:
通过 端口号 --> pid 进程号
3306 1233 随机
再通过任务管理器 pid --> 进程名
1233 mysqld.exe
可进一步管理,比如关闭进程、服务
右击"计算机" -> 管理 -> 服务和应用程序 -> 服务
五、HTTP协议
1、属于应用层协议,默认端口80,负责浏览器/服务器之间传递数据;
2、采用"请求响应"方式工作; B/S架构
HTTP Request: B -> S 客户端向Web服务器发请求
HTTP Response: B <- S Web服务器向客户端返回响应
3、HTTP的请求方法 (重要面试题)
对请求对象(网页、文件、图片...)进行的操作,就是一些命令,程序员在编程的时候使用,在接口文档中会指明,测试人员测试接口的时候,按照说明选择正确的方法。
Get: 请读取一个Web资源(页面、图片、视频、音频、css、js、JSON、XML...)
比如:点击一个超级链接、进行搜索查询...
Post: 向服务器附加一些资源,或者提交一些数据;
比如:提交表单指定post方式,提交表单的数据。
其它:
Delete:删除Web页面
Head:请求读取一个Web页面的首部
设计一个登录页面:
浏览器标题:用户登录页面
正文: 用户登录
有必要设计表单form,将客户端填写的信息一起提交給Web服务器,表单是一种块级元素,表示一块区域的内容:
点击登录,就会发请求访问URL 请求的方法 get、post
<form action="URL地址" method="get">
用户名:__________ 单行文本框
密 码:__________ 密码框
登 录 提交按钮
</form>
备份p1.html,重命名login.html
使用记事本编辑login.html
或专业的纯文本编辑器:EditPlus UE Notepad++ 支持大量源代码的关键词着色加亮
实体:表示空格
文件协议
file:///C:/Users/tren/Desktop/day01/p1.html?username=Tom&password=123
网页中设计好的请求的参数名 用户填写的参数值
名值对
p1.html?username=Tom&password=123
查询字符串 Query String
?参数名=参数值&参数名=参数值&...
面试题1:HTTP常见请求方式、方法?
Get、Post、Head、Put、Delete、Options、Connect...
面试题2:Get和Post方式有何区别?
1)Get: 适合向服务器索取Web资源 -- 索取
比如:Html网页、css样式表、JavaScript代码、图片jpg png gif、视频mp4、音频、接口返回的结果json文本、xml文本...
常见发送方式:什么样的请求是get请求?
<1> 浏览器地址栏写URL直接回车;
<2> 网页中自动获取图片、css、js等;
<img src="图片资源路径"/>
<3> 点击超级链接 <a href="请求URL">链接文本</a>
<4> 表单提交可设置为get方式 -- 不推荐
<form action="URL" method="get">
<5> Ajax发送异步请求可指定为get方式
特点:
<1> 请求的参数在Http请求包头部header发送
经常在URL后,以查询字符串方式 ?参数名=参数值
<2> URL后携带的信息有限,比如一般不超过2KB
无法提交大量信息;
<3> 信息在URL后直接显示,不安全;
2)Post:适合向服务器提交大量信息 -- 给与
比如:注册时通过表单向服务器提交大量文本、文件等资源 可以上传文件
常见发送方式:什么样的请求是post请求?
<1> 表单提交可设置为post方式 -- 推荐
<form action="URL" method="post">
<2> Ajax发送异步请求可指定为post方式
特点:
<1> 请求的参数和数据在Http请求包的主体body中携带;
信息量大、安全性好,但不是绝对安全,密码需要加密处理才安全;
<2> Post方式适合客户端向服务器提交大量的、综合的信息,比如文件上传等;
4、HTTP响应状态码
响应报文状态中包含的一个3位数字,指明HTTP请求响应的结果,如请求是否成功、失败或其他情况等。
HTTP响应码主要分为5类:
1xx 通知信息
2xx 成功 比如200 请求成功OK
3xx 重定向 比如302 重定向响应 正常的技术手段
4xx 客户端错误 比如404 资源找不到 重点关注错误
5xx 服务器端错误 比如500 服务器端程序错误、异常
通过分析后台服务器日志文件: XxxError XxxException
比如: OutOfMemoryError 内存溢出的错误 就是内存满了,不够用了
FileNotFoundException 文件找不到异常 文件名写错了
在Java、Python中专门为处理错误、异常设计了类型;
通过不同异常类型反映不同的问题,便于问题发现、分析和解决;
参考HTTP状态码.txt 记忆主要的几个即可
W3CSchool文档:
HTML -> 参考手册 -> HTTP消息
Web开发面试题:请求转发和重定向有何区别? 开发工程师常见面试题
1)转发 forward
多个组件协作完成一个任务,能共享请求中的数据
现象:地址栏显示 小花 地址
小强 小花 如花
请求1 ----> 转发给 --->
响应1 <--------------- 响应码:200 OK
2)重定向 redirect 重新开始一个新的任务
现象:地址栏显示 如花 地址
小强 小花 如花
请求1 ---->
响应1<---- 重定向响应 302 响应内容是如花的地址
请求2 ----------------->
响应2 <--------------- 响应码:200 OK
后续通过Fiddler抓包工具都能捕捉到;
5、URL
1)全称 Uniform Resource Locator 统一资源定位
简单理解:网址,网络中资源(图片、网页、视频等)存储的位置(服务器、路径)
客户只有知道资源的URL,才能够请求
2)格式:
http://主机名:端口号/路径
http 使用的协议,有可能是https
:// 固定分隔符
主机名 资源所在的机器IP地址或域名
如:170.223.2.30
:端口号 使用的端口号,默认端口号一般就省略
比如HTTP :80 https :443
/路径 资源所在的具体位置
指定那个Web应用、哪个模块、功能点
http://192.168.0.23:8080/JT/order/create.do
协议名 主机名 端口号 项目名 模块名 功能名
方式:Post 参数数据可以用JSON格式提交
功能:京淘购物系统中,订单模块,创建订单
jdbc:mysql://localhost:3306/testing
JDBC协议 本地主机 端口号 数据库名
说明:JDBC协议 通过Java访问Mysql数据库的URL
表示:使用jdbc:mysql协议,访问本地主机中的mysql数据库(端口3306),对其中testing数据库进行连接访问;
后续使用Postman、Fiddler工具,提前安装;
接口来源:
需要提前注册
聚合,也需要提前注册,个人认证时,需要上传身份证照片(正反面)