接口测试学习笔记1

一、行业背景和测试分层

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

www.360buy.com www.jd.com

www.xiaomi.com www.mi.com

www.tarena.com.cn www.tedu.cn

说明:万网 注册域名 全球域名解析服务器有十几台

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地址 + 端口号进行访问。

比如:

http://172.166.0.10:8080

http://172.166.0.10:8081

作用:通过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++ 支持大量源代码的关键词着色加亮

实体:表示空格 &nbsp;

文件协议

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 记忆主要的几个即可

https://www.w3school.com.cn/

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

www.baidu.com

:端口号 使用的端口号,默认端口号一般就省略

比如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工具,提前安装;

https://www.postman.com/

接口来源:

https://www.idataapi.cn/

需要提前注册

https://www.juhe.cn/

聚合,也需要提前注册,个人认证时,需要上传身份证照片(正反面)

相关推荐
路有瑶台几秒前
MySQL数据库学习(持续更新ing)
数据库·学习·mysql
zmd-zk1 小时前
flink学习(2)——wordcount案例
大数据·开发语言·学习·flink
Chef_Chen1 小时前
从0开始学习机器学习--Day33--机器学习阶段总结
人工智能·学习·机器学习
hopetomorrow2 小时前
学习路之压力测试--jmeter安装教程
学习·jmeter·压力测试
hopetomorrow2 小时前
学习路之PHP--使用GROUP BY 发生错误 SELECT list is not in GROUP BY clause .......... 解决
开发语言·学习·php
/**书香门第*/2 小时前
Cocos creator 3.8 支持的动画 7
学习·游戏·游戏引擎·游戏程序·cocos2d
美式小田3 小时前
单片机学习笔记 9. 8×8LED点阵屏
笔记·单片机·嵌入式硬件·学习
猫爪笔记3 小时前
前端:HTML (学习笔记)【2】
前端·笔记·学习·html
_不会dp不改名_3 小时前
HCIA笔记3--TCP-UDP-交换机工作原理
笔记·tcp/ip·udp
-一杯为品-4 小时前
【51单片机】程序实验5&6.独立按键-矩阵按键
c语言·笔记·学习·51单片机·硬件工程