目录:

 

一. 什么是接口

二. 网络基础知识

三. HTTP协议

四. 什么是接口测试

五. 抓包工具Fiddler的使用

六. Postman的使用

 

一. 什么是接口

接口是能为其他程序提供服务的一组代码

接口即服务

为其他模块或UI提供数据或资源

接口是提供访问途径的程序代码

1.提供访问地址(接口地址)

2.提供访问方式(规定的参数及数据格式)

3.一般需要身份验证

 

 

 

接口的基本流程

 

 

 接口场景(例如:商城)

 

常见的接口分类:

HTTP接口:使用HTTP(超文本传输)协议来进行请求和响应的接口

    RESTful(简称REST)接口:一种规范的接口设计风格,基于HTTP协议传输

RPC接口:远程方法调用(像调用本地方法一样调用远程服务器上的程序方法)

    Web Service接口:基于SOAP协议,使用HTTP传输的一种RPC解决方案

    Dubbo:一种适用于微服务的RPC解决方案

 

一个资源类接口的大致过程:

1.用户在浏览器访问http://www.baidu.com

2.浏览器自动重定向到http://www.baidu.com/

3.查询本地是否有该域名相应的cookies

4.查询本地缓存是否有该资源(无)

5.查询本地hosts中是否有www.baidu.com域名

6.查询DNS服务器www.baidu.com指向的ip

7.向服务器请求资源

8.查询CDN(内容分发服务)是否有对应资源

9.服务器重定向到https://www.baidu.com/

10.返回资源(网页源代码)及请求并下载相关引用资源(css/js/图片等)

11.浏览器渲染出页面

 

 另一个动态接口的大致过程:

1.用户在页面上填写用户名、密码,点击登录

2.页面组装,编码并发送POST请求

3.查询本地是否有该域名相应的cookies

4.查询本地hosts相关域名

5.查询DNS域名所对应的IP地址

6.向服务器发送请求

7.Nginx反向代理收到请求(根据匹配规则或负载均衡策略)转发给指定的应用服务

8.应用服务(Tomcat / phpfpm / wsgi)将请求翻译给程序代码

9.在程序代码路由中查询到对应的接口方法

10.接口方法处理请求

        1)一些安全过滤及验证

        2)获取请求数据中用户名及密码

        3)向数据库验证用户名和密码(成功)

        4)为用户生成并维持session(会话)

        5)组装登录成功信息并携带session_id返回响应

11.前端页面成功请求跳转响应的页面,并把session_id设置到用户本地的cookies中(标识用户已登录)

二、网络基础知识:IP地址

IP地址是用来唯一标识互联网上计算机的逻辑地址,让电脑之间可以相互通信,每台连网计算机都依靠IP地址来互相区分、相互联系。

查看百度IP地址:ping www.baidu.com

 

 网络基础知识:端口

 端口(Port):是计算机与外界通讯交流的出口。

    为了应对不同类型或大量的访问请求,一般一个IP会拥有很多个端口(通常为65535个)。

按端口号可分为3大类:

    1.公认端口:从0到1023。互联网标准协议接口,如HTTP:80,HTTPS:443,FTP:21,SSH:22,SMTP:25等

    2.注册端口:从1024到49151。一些常见软件注册绑定的端口,如Tomcat:8080,MySQL:3306,Redis:6379等

    3.动态或私有端口:从49152到65535。一般为临时动态绑定的一个接口,如selenium webdriver启动是会临时绑定一个动态接口提供服务。

 

 网络基础知识:域名

1. 由于IP地址是数字标识,使用时难以记忆和书写,因此在IP地址的基础上又发展出一种符号化的地址方案,来代替数字型的IP地址。每一个符号化的地址都与特定的IP地址对应,这样网络上的资源访问起来就容易的多了。这个与网络上的数字型IP地址相对应的字符型地址,就被称为域名。

2. 使用ping查看域名对应的ip地址:61.135.169.125  <=>  http://www.baidu.com/

 

 网络基础知识:DNS(了解)

1. DNS是Domain Name System的缩写,即域名系统。提供网站域名与IP地址的相互转换服务。

2. 域名与IP地址之间是呈一一对应的关系。

3. 本地HOSTS配置:

    1)Win:C:\Windows\System32\drivers\etc\HOSTS

    2)  Linux/Mac:/etc/hosts

    3)  格式:ip域名

    4)一般Nginx反向代理接口都需要配置hosts,然后通过域名访问接口

    5)SwitchHosts

 练习:给出一个字符串, 判断其是否是是合法的IP(IPv4)地址,分割split 数字是否在0--255之间

"""
思路:
1.将字符串按"."分割成4段得到一个列表
2.逐个判断列表中的字符串是否数字格式并且在0~255之间, 是在新列表对应位置保存True, 不是保存False
3.判断新列表中是否有False
注: 因为True==1, [1, 1, 1, 1] 相当于[True, True, True, True]
"""
# import sys


def is_ipv4(ipAddr):
"""
检查ip是否合法
:param: ip ip地址
:return: True 合法 False 不合法
"""
addr = ipAddr.strip().split('.') # 切割IP地址为一个列表
print(addr)
if len(addr) != 4: # 切割后列表必须有4个参数
print("check ip address failed!")
for i in range(4):
try:
addr[i] = int(addr[i]) # 每个参数必须为数字,否则校验失败
except:
print("check ip address failed!")
if addr[i] <= 255 and addr[i] >= 0: # 每个参数值必须在0-255之间
pass
else:
print("check ip address failed!")
i += 1
else:
print("check ip address success!")


is_ipv4("192.168.1.2")

strip()函数介绍
声明:s为字符串,rm为要删除的字符序列
    s.strip(rm)删除s字符串中开头、结尾处,位于 rm删除序列的字符
    s.lstrip(rm)删除s字符串中开头处,位于 rm删除序列的字符
    s.rstrip(rm)删除s字符串中结尾处,位于 rm删除序列的字符
注意:
    1. 当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' ')
    例如:
    >>> a = ' 123'
    >>> a.strip()
    '123'
    >>> a='\t\tabc'
    'abc'
    >>> a = 'sdff\r\n'
    >>> a.strip()
    'sdff'
    2.这里的rm删除序列是只要边(开头或结尾)上的字符在删除序列内,就删除掉。
    例如 :
    >>> a = '123abc'
    >>> a.strip('21')
    '3abc' 结果是一样的
    >>> a.strip('12')
    '3abc'

 三、 HTTP协议

HTTP:即超文本传输协议,应用层通讯协议。

1. 两个主要应用场景

    传输网页及图片等资源

    接口数据通讯

2.主要组成

    请求 Request

    响应 Response

    处理

 

HTTP协议:请求 Request

请求方法(Method):请求要做什么操作

URL:请求的服务器及接口地址和查询参数

请求头(Headers):请求数据辅助信息(内容类型Cookie等)

请求体(Request Body):请求数据

 

请求:请求方法

 

Chrome开发者工具抓包

打开浏览器按下F12,打开浏览器开发工具,地址栏输入https://www.baidu.com/

 

请求及抓包练习:查看请求

1. 浏览器访问 http://www.baidu.com 使用Chrome开发者工具查看请求详情

2. 浏览器访问 http://www.tuling123.com/openapi/api?key=ec961279f453459b9248f0aeb6600bbe&info=你好 使用Fiddler抓包查看请求原始(Raw)格式

3.使用Postman发送Post请求:http://115.28.108.130:5000/api/user/login/ 数据:name=张三,password=123456

思考:Post请求与Get请求有什么区别?

 

不同请求方法练习

任务列表:GET  http://115.28.108.130:5000/todos

新建任务:POST  http://115.28.108.130:5000/todos  数据:{"task":"吃大象"}

任务详情:GET  http://115.28.108.130:5000/todos/todo1

更新任务:PUT  http://115.28.108.130:5000/todos/todo1 数据:{"task":"温柔的打开冰箱门"}

删除任务:GET  http://115.28.108.130:5000/todos/todo1

HEAD http://115.28.108.130:5000/todos

OPTIONS http://115.28.108.130:5000/todos

 

GET方法和POST方法的区别

 GET方法

1. GET用于取回获取数据或资源

2. GET请求没有请求体

3. GET请求通过URL参数查询数据(URL有长度限制),请求体(请求数据)为空

4. 请求可被缓存及保存浏览器历史记录中(不适合敏感数据,安全性较差)

POST请求

1. POST请求用于新建及更新数据

2. POST请求数据一般放在请求体中,无长度限制

3. POST请求一般后台发送,不会被缓存和记录,安全性较好

4. POST请求是非幂等的,可能会影响之后的请求

        POST请求一般每次都会新建资源,如使用POST请求新建一个id为2的用户,下次再发送同样的POST请求建立id为2的用户会出错

 

请求:URL

 基本格式

    <scheme>://user:password@<host>:<port>/<path>?<query>

    scheme   协议 ftp、http、https

    host   主机/域名

    port 端口

    path 路径

    ?query  查询参数key=value&key=value

带参数GET请求练习(Chrome/Postman)

   1. https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15801396646

   2. http://www.tuling123.com/openapi/api?key=ec961279f453459b9248f0aeb6600bbe&info=你好

   3. http://115.28.108.130:8080/DemoController/getUserByIdAuth?id=1

 

 请求:常见请求头

 

 

请求头:内容类型Content--Type

内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。

常见的媒体格式类型如下:

    text/html : HTML格式

    text/plain :纯文本格式

    image/gif :gif图片格式

    image/jpeg :jpg图片格式

    image/png:png图片格式

以application开头的媒体格式类型:

    application/xml : XML数据格式 webservice 协议采用的就是xml格式的数据请求

    application/json : JSON数据格式

    application/pdf :pdf格式

    application/msword : Word文档格式

    application/octet-stream : 二进制流数据(如常见的文件下载)

    application/x-www-form-urlencoded : 表单(纯文本)

    multipart/form-data: 复合表单(可以含有上传的文件)

 

 请求:请求数据

 不同内容类型请求数据发送练习(Postman)

  1. 无请求数据(GET)

  2. application/x-www-form-urlencoded : 表单(纯文本)

   http://115.28.108.130:5000/api/user/login/

  3. application/json: JSON数据格式

  4. application/xml : XML数据格式 webservice 协议采用的就是xml格式的数据请求

  5. multipart/form-data 复合表单(可以含有上传的文件)

 

HTTP协议:响应 Response

状态码及说明:返回请求的状态(成功还是失败)

响应头(Headers):响应数据辅助信息(内容类型,Cookie等)

响应体(Request Body): 响应数据

 

 

响应:状态码

每条 HTTP 响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作。 http://www.w3school.com.cn/tags/html_ref_httpmessages.asp

 

 常见状态码

  1. 200: OK

  2. 302: http://115.28.108.130:8080/forWard.jsp?id=1 重定向:从响应的location里看

      http://115.28.108.130:8080/DemoController/getUserByIdForWard?id=1

  3. 401:未授权

      使用Postman 发送GET http://115.28.108.130:8080/DemoController/getUserByIdAuth?id=1

  4. 404:资源未请求到或者没有

      http://115.28.108.130:8080/DemoController/getUserByIdForWard1?id=1

  5. 405: 请求方法不对 GET http://115.28.108.130:5000/api/user/reg/

  6. 415 数据类型不对 POST http://115.28.108.130:5000/api/user/reg/ 使用表单格式

  7. 500: 服务器内部错误 GET http://115.28.108.130:5000/add?a=1.1&b=2

 

 响应:常见响应头

 

 

响应:响应数据

常见响应内容类型:

1. Text

2. HTML

3. JSON

4. XML

 

HTTP协议:HTTP与HTTPS的区别

HTTP与HTTPS

      HTTP协议传输的数据都是未加密的,HTTPS协议是由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。

HTTPS和HTTP的区别

    1. HTTPS协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

    2. HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。

    3. HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 

    4. HTTP的连接很简单,是无状态的;HTTPS协议是由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。

 

HTTP协议:处理

接口处理一般流程:

  1. 身份验证(接口安全策略)

  2. 提取参数

  3. 处理业务

  4. 组装并返回响应

常见接口安全策略

  1. Cookie/Session: 服务器维持用户Session会话模式(用户登录模式)

  2. Appid/Token: 通过算法生成/校验身份令牌(token)模式

  3. 开放协议(Basic Auth/Oauth): 标准开放协议

  4. 数字签名: 对参数整体生成签名(sign),防止请求篡改

 

 Cookie与Session的区别

 

 Cookie和session都是由服务器生成,维持会话的作用。Cookie保存在客户端,session保存在服务端。Jsessionid为cookie和session结合使用(tomcat下),若客户端禁止掉cookie则通过在url后面增加sessionid实现。每次会话结束,sessionid都会注销,故需要关联。通过抓包实例介绍。

 

 四、什么是接口测试

    测试系统组件间接口的一种测试。

    检测外部系统与系统之间以及内部各个子系统之间的交互点。

    测试的重点是要检查数据的交换,传递和业务逻辑处理的过程,以及系统间的依赖关系。
 
为什么要做接口测试?

 

接口测试用例设计

 

 知识点:在C:\Windows\System32\drivers\etc\hosts文件下新增:47.94.156.36 www.baidu.com (同时删除imhosts.sam文件):访问www.baidu.com会进入47.94.156.36页面

 

五、抓包工具Fiddler的使用

1. 抓包

    代理:Tools -> options -> Connections -> Allow Remote Compute to connect

    手机抓包:手机与电脑同一WIFI,查看电脑ip,手机WIFI选高级 -> 手工配置代理:电脑ip:8888

    HTTPS抓包:查看电脑ip,访问http://ip:8888,下载并安装证书(iPhone需要信任证书)

 

 2. 查看请求

    查看: Inspector: 按WebForm/JSON/XML/Raw格式查看请求

    查找: Ctrl + F/在列中查找

    过滤: 快速命令/Filter (修改后需要重启)

3. 调试

    Composer: 发送请求

    修改HOSTS: Tools -> HOSTS

    断点/重发/简单压测 Rules -> Automatic breakpoints/拦截后修改请求/会话上点击右键->Replay -> shift + Replay Request

    Auto Responder: 重定向请求

    弱网模拟(不能设置具体网速, 需要通过Fiddler Script实现): Rules ->Performance->Simulate Modem Speeds

 

Fiddler介绍

主界面

  1. 工具栏

  2. 会话区

  3. 监控区

  4. 状态栏

 

 

Fiddler常见资源类型

会话区

 

 

Fiddler的使用

Inspector:

    Raw:请求的原始格式

    WebForm:请求的表单格式

    Json:请求的Json格式请求

    XML:请求的XML格式

过滤:Filter

    Hosts:按服务器过滤

    Clients Process:按客户端程序过滤

    Request Headers:按请求头过滤

    Breakpoints:设置断点

    Response Status Code:按状态码过滤

    Response Type and Size:按响应类型及大小过滤

    Response Headers:按响应头过滤

 

 

 

 

 

 

 

 

 

 

六、Postman的使用

请求

    不同内容类型的请求(Form/JSON/XML/文件上传)

    需登录接口(3种策略)/需授权接口(Basic Auth)

    其他(批量编辑/转为代码/Cookies管理器/控制台)

响应

查看格式/默认解析格式设置/Ctrl+F搜索

参数化

变量/环境管理/关联(接口依赖)

断言

状态码/包含文本/JSON断言

集合

导入导出/集合运行/使用数据文件进行参数化

其他

捕获(抓包)/Mock Server/监视器

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 知识点:

    var v_a = pm.variables.get("a"); // 获取项目变量
    var g_a = pm.globals.get("a"); // 获取全局变量
    var e_a = pm.environment.get("a"); // 获取环境变量
    pm.variables.set("a", "c3"); //设置集合变量
    pm.globals.set("a", "g3"); // 设置全局变量
    pm.environment.set("a", "e3"); //设置环境变量
    变量重名时,优先级:环境变量>Collection变量>全局变量(Globals)
    环境变量>全局变量(所有都生效)>集合变量edit里面https://www.jianshu.com/p/cedbd7e2f3d3

接口测试第一天作业:

写加油卡测试用例并用postman实现
"dataSourceId": "bHRz"
    1. 编写加油卡接口用例并执行(最少一个接口)
    每条用例5条以上00A添加加油卡、01A绑定加油卡、dataSourceId数据库中已存在,相当于datasource库里面(构造1个合法和不合法即可 找另一个生成不是00A的)
    2. 使用Postman建立一个集合,并使用集合变量(非环境变量), 每个请求要求有断言, 导出结果文件(2.1版本)
    绑定添加加油卡各1个子文件夹
    3. 使用Runner执行整个集合, 并导出测试报告(.json格式)
    4. collection运行一下

第二天课前准备:

    1. 安装Python及Pycharm
    2. 安装requests库, pip install requests
    3. 安装navicat

Python基础作业:
    1.写一个计算器,用函数定义加法,减法,除法,乘法
        1)当从键盘选择加法的时候,从键盘输入两个值就能按照加法计算
        2)当从键盘选择减法的时候,接受键盘输入的值进行相减,依次类推,直到输入不合法的字符,退出计算
    2.实现一个通讯录:每个人定义为一个类 ,人有姓名和电话号码两个属性
        数据存储可以是txt,也可以是列表
        方法有增加人信息,修改人信息,删除人信息,查询人信息

补充知识点:

    1. 接口异常情况测试:幂等(重复提交)、并发测试、大数量测试(同时处理大批数据得测试/DB数据量很大时,测试DB操作)重要
    2. 学习MOCKServer模拟假接口
    3. postman_runner数据驱动自学
    4. postman课程最后,接口轮询(post-用户注册(pm.setNextRequest("任务列表")))