web 接口测试基本概念

2021-09-29  本文已影响0人  D_w

这篇是参考了临渊的博客 https://www.cnblogs.com/superhin/p/10338915.html

接口概念

接口又称API(Application Programming Interface,应用程序编程接口),是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
(通俗的来说):
首先我有一些功能(功能函数)
你不用关心我怎么实现的(屏蔽细节)
我会给你一个我的地址(接口地址)
你按照地址找到我,按照我规定的格式(请求类型)告诉我所需要的信息(参数)就行
我会给你个反馈(响应信息)

常见接口类型

什么是接口测试?

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个
子系统之间的交互点。测试的重点是要检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
为什么要做接口测试?

接口测试和业务测试在设计测试和执行测试过程中的差异点:在接口测试中,我们通过单个接口测试完成了全部异常状态的覆盖;而在业务流程中,我们更需要关心业务流和数据流的关系,并不需要再过度关心如何用业务流的方法覆盖更多的代码逻辑异常。
接口测试的思维先从单个接口的测试开始,保障单个接口的正确性和健壮性,然后通过单个接口的测试完成多个接口的业务逻辑串联,站在业务逻辑的角度完成业务逻辑的正确性检测。

网络基础知识:IP,域名, DNS及端口

IP地址

IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址。

image.png
查看IP命令
Windows: ipconfig
Linux: ifconfig
tip num.isdigit()可以判断num是否只由数字组成

端口

"端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。
如果把IP地址比作一间房子,端口就是出入这间房子的门。一个IP地址的端口可以有65536(即:2^16)个
公认端口:从0到1023,紧密绑定于一些服务
注册端口:人1024到49151,许多服务绑定这些端口,这些端口同样用于许多其它目的。
动态或私有端口:从49152到65535。理论上,不应为服务分配这此端口。实际上,机器通常从1024起分配动态端口。
常见软件默认端口
Apache/Nginx(HTTP服务): 80
Tomcat: 8080
Oracle: 1521
MySQL: 3306
SQL Server: 1433
PostgreSQL: 5432
MongoDB: 27017
Redis: 6379
Memcached: 11211
查看端口命令
Windows: netstat -ano
Linux: netstat -ntlp
解决端口占用问题
Windows: netstat -ano | findstr "8080",找到占用端口的程序的PID -> 打开任务管理器 -> 设置显示PID -> 找到并结束对于程序
Linux: netstat -ntlp | grep "8080", 找到对应的程序 -> ps -ef | grep "程序名" 找到对于的pid -> kill 相应的id

域名及DNS

由于IP地址不容易记忆,为IP地址赋予了一个利于记忆的别名,称为域名
如,百度的ip为: 61.135.169.125,对应的域名为 www.baidu.com
如何查看域名所对于的ip?
Windows/Linux: ping www.baidu.com

DNS

DNS即域名解析系统,域名和IP地址相互映射的一个分布式数据库,提供域名转到对应ip的服务

网络基础知识:OSI七层模型及TCP协议

OSI七层模型

OSI即开放系统互连参考模型,一种网络架构,分为7层。


image.png
TCP及UDP协议

TCP和UDP都是传输层的协议

  1. UDP没有拥塞控制
  2. UDP支持一对一、一对多、多对一和多对多的交互通信
  3. UDP的首部开销小,只有8字节
  1. TCP是面向连接的
  2. 每条TCP连接只能用于两个断点,一对一
  3. TCP提供可靠交付的服务:连接传输数据、无差错、不丢失、不重复、并且按序到达
  4. TCP提供全双工通信
  5. 面向字节流。TCP根据对方给出的窗口和当前网络拥塞的程度来决定一个报文应该包含多少个字节

三次握手和四次挥手

三次握手

简单理解,不一定准确:

  1. client首先将SYN标志位置1并指明客户端打算连接的服务器的端口,然后发送给服务端,客户端进入SYN_SENT状态等待服务端确认。
  2. 服务端收到SYN=1的信号后知道要连接,将标志位SYN和ACK都置为1,产生一个随机序列一并都发送回客户端确认连接,服务端进入SYN_RCVD状态。
  3. 客户端收到服务端信号后确认ACK是否为1,为1后将TCP标志位ACK置1发送回服务端,服务端确认后连接成功。
    三次握手的意义
    若不采用三次握手,那么只要server发出确认,新的连接就建立了,但有可能这个信号是client在很早之前发出的请求信号,在某个网络节点滞留了,不需要连接时才到达server,这样导致client不会理睬server的这次确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。
    四次挥手
    挥手请求可以是Client端,也可以是Server端发起的,我们假设是Client端发起:

HTTP协议

HTTP:超文本传输协议,是用于从WWW服务器传输超文本到本地浏览器的传输协议。
HTTP协议是一种无状态协议,主要包含请求和相应两大部分:
请求原始格式-GET(Raw格式:Fiddler抓包得到)

GET https://www.sojson.com/open/api/weather/json.shtml?city=%E5%8C%97%E4%BA%AC HTTP/1.1
Host: www.sojson.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: __cfduid=dccd65c484a7657b468327b66023fefc41534934250; yjs_id=59d1c42afa817b578b4b562d1f72651f; ctrl_time=1


POST http://openapi.tuling123.com/openapi/api/v2 HTTP/1.1
Content-Type: application/json
cache-control: no-cache
Postman-Token: 1a39439e-61c8-4e59-82a1-736a362c5962
User-Agent: PostmanRuntime/7.2.0
Accept: */*
Host: openapi.tuling123.com
accept-encoding: gzip, deflate
content-length: 468
Connection: keep-alive

{
    "reqType":0,
    "perception": {
        "inputText": {
            "text": "附近的酒店"
        },
        "inputImage": {
            "url": "imageUrl"
        },
        "selfInfo": {
            "location": {
                "city": "北京",
                "province": "北京",
                "street": "信息路"
            }
        }
    },
    "userInfo": {
        "apiKey": "ec961279f453459b9248f0aeb6600bbe",
        "userId": "206379"
    }
}

URL

URL:统一资源定位符,接口的访问地址(包含服务器地址+接口地址)
URL组成格式
*协议\: 服务器地址:端口号\资源路径?参数1=值1&参数2=值2
如:https://www.sojson.com/open/api/weather/json.shtml?city=北京

请求方法

序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体
2 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)数据被包含在请求体中
3 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容
5 DELETE 请求服务器删除指定的页面
6 CONNECT 预留给能够将连接改为管道方式的代理服务器
7 OPTIONS 允许客户端查看服务器的性能
8 TRACE 回显服务器收到的请求,主要用于测试或诊断

请求参数(URL参数)

上个url中的city=北京,参数为"city",值为"北京"。

请求Headers(请求头)

请求头说明

请求数据(又称为Request Body 或 Data)

请求数据类型(Content-Type)(重点)
application/x-www-form-urlencoded: 网页表单格式(默认)
application/json:REST接口常用格式
text/xml:xml格式,RPC接口,Dubbo接口常用格式
test/html: html格式
multipart/form-data: 混合表单,支持上传图片
数据编码就不再赘述

响应(Response)

接口返回的信息,包含HTTP状态码,响应头和相应信息
原始相应数据(Raw格式,Fiddler抓包)

HTTP/1.1 200 OK
Date: Thu, 23 Aug 2018 06:32:26 GMT
Transfer-Encoding: chunked
Connection: keep-alive

{"intent":{"actionName":"","code":10005,"intentName":"","parameters":{"lon":"","checkout_date":"2018-08-25","star":"0","city":"北京","days":"1","order":"","price_range":"","nearby_place":"酒店","brand":"","checkin_date":"2018-08-24","place":"信息路","lat":"","needgeo":"0"}},"results":[{"groupType":1,"resultType":"url","values":{"url":"http://m.elong.com/hotel/0101/nlist/#indate=2018-08-24&outdate=2018-08-25&keywords=%E4%BF%A1%E6%81%AF%E8%B7%AF"}},{"groupType":1,"resultType":"text","values":{"text":"亲,已帮你找到相关酒店信息"}}]}

HTTP状态码

HTTP与HTTPS

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

Cookie和Session

授权与加密

常见的接口安全策略:

缓存

HTTP 缓存机制作是 web 性能优化的重要手段,当用户第一次请求服务器资源时,服务器将资源缓存到客户端本地,在一定时间内(缓存有效期内)当用户再次向服务器请求同样的资源时,可以直接从缓存中读取,而不用从服务器下载。
接口测试中缓存相关注意点

上一篇 下一篇

猜你喜欢

热点阅读