接口测试学习笔记1

avatar
作者
猴君
阅读量:0


一、行业背景和测试分层
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/   
聚合,也需要提前注册,个人认证时,需要上传身份证照片(正反面)

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!