本节内容

接口及接口测试

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

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

HTTP协议

接口及接口测试

接口的概念

接口又称API(Application Programming Interface,应用程序编程接口),是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

简单概括为以下3点:

程序代码(函数方法)

屏蔽实现细节

可以被访问/调用来获取信息或实现某些功能(提供访问地址,定义了访问规则)

接口自述(通俗的来说):

首先我有一些功能(功能函数)

你不用关心我怎么实现的(屏蔽细节)

我会给你一个我的地址(接口地址)

你按照地址找到我,按照我规定的格式(请求类型)告诉我所需要的信息(参数)就行

我会给你个反馈(相应信息)

举个栗子:

西虹市公考报名处 --- 接口名称

报名地址: 西虹市街口区带莫路3号 --- 接口地址

现场需填写资料: 姓名,身份证证号码,专业,报考岗位等等 --- 接口参数

验证规则: --- 参数验证规则

身份证需与本人一致

专业需与报考岗位符合

报名时间 2024.8.22-2024.8.30

现场会给出是否报名成功 --- 接口响应信息

软件中的接口

接口处理过程

软件项目中,接口是系统与系统之间,模块与模块之间或者服务于服务之间相互调用的入口。

从开发者角度,接口是分工协作的产物,不同开发者实现自己的功能之后,封装成接口,供其他开发者调用。其他开发者只要按规定格式发送一些必要参数,就能使用该功能

接口交互场景

常见接口类型?

HTTP接口,RPC接口,Web Service接口, Dubble接口,RESTful接口,其中RESTful接口是基于HTTP接口的,Web Service及Dubble属于RPC接口

HTTP接口:通过HTTP协议传输的接口,可以传输文本表单数据,也可以传输Json类型的对象数据或xml类型的数据

RPC: 远程方法调用,随着分布式系统的出现,当你需要调用部署到其他服务器上的方法时,需要用到RPC。RPC只是提出了这样一个问题,有很多种解决方案,比如WebService(基于SOAP协议), REST(基于HTTP协议)。

SOAP: 简单面向对象协议,基于HTTP,使用xml作为默认传输格式

Web Service: 基于SOAP协议的一种RPC实现方案。相比传统的HTTP接口只传输文本请求和文本相应,通过Web Service可以直接拿到远程的一个对象,并能够直接调用该对象的属性和方法,比HTTP更高级。

REST/RESTful API: REST,表述性状态转移。一种HTTP接口的设计风格,将一切接口视为资源,要求接口路径同意管理,分版本管理,规定了GET/POST等请求以及HTTP状态码的使用规范,默认使用JSON格式传输。RESTful API即满足REST风格即设计规范的API接口

相互关系

什么是接口测试?

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个

子系统之间的交互点。测试的重点是要检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系等。

为什么要做接口测试?

接口测试介于单元测试与系统测试之间,单元测试一般由开发完成(不要相信开发)

接口是各种系统功能的基础,一旦接口出现问题可能会引起许多系统功能的问题并且不容易定位

开展接口测试可以及早发现问题,有效降低测试成本

接口一般较UI相对稳定,利于进行自动化和持续集成

接口测试都测什么?

接口测试一般有以下岗位实施:

手工测试岗:先提测接口再提出功能,兼做接口自动化

服务端测试岗:梳理代码,审核接口实现逻辑是否与业务设计一致,技术实现逻辑的合理性,异常流测试,接口压测及安全性测试

测试开发岗:专职做接口(或UI)的自动化用例开发,测试工具开发

接口测试点参考:

服务端接口测试

怎样掌握接口测试?

了解OSI网络模型,TCP/UDP协议,掌握HTTP/HTTPS协议,了解RPC, Web Service及REST,理解Session和Cookie

掌握常用的接口测试工具如curl命令,Postman,Jmeter,LR,SoupUI,AB等

掌握基本的抓包工具如Chrome开发者工具,Fiddler,Charles,Wireshark,tcpdumps等

掌握一门编程语言Python或Java

了解Nginx, Apache, Tomcat等服务器中间件

掌握数据库基本查询命令,及一些NoSQL(如Redis)操作,用于检查响应结果

掌握基本的Linux日子查询和筛选命令

接口测试重难点

动态变量参数化

接口依赖及中间变量问题

异步接口结果验证问题

相应参数及嵌套很多的验证问题

接口测试框架的稳定性问题

资源清理问题

多接口场景测试

...

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

IP地址

就像每个人都有一个身份证号码

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

ip地址

查看IP命令

Windows: ipconfig

Linux: ifconfig

Python练习:检查字符串是否ip

def is_ip(ip):

num_list = ip.split(".")

for num in num_list:

if not num.isdigit() or not 0 <= int(num) <=255:

return False

return True

print(is_ip("101.1.0.201"))

使用map函数实现方法(参考)

def check_ipv4(str):

ip = str.strip().split(".")

return False if len(ip) != 4 or False in map(lambda x:True if x.isdigit() and 0<= int(x) <= 255 else False, ip) else True

端口

"端口"是英文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

如何查看域名所对于的ip?

Windows/Linux: ping www.baidu.com

DNS

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

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

OSI七层模型

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

OSI网络模型

上三层---应用层,控制软件方面

应用层:文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet

表示层:数据格式化,代码转换,数据加密

会话层:解除或建立与别的接点的联系(会话)

下四层---数据流层,用来管理硬件

传输层:提供端对端的接口 TCP,UDP

网络层:为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP

数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU

物理层 以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2

OSI七层模型及各层协议

TCP及UDP协议

TCP和UDP都是传输层的协议

TCP:传输控制协议

UDP: 数据报文协议

TCP和UDP的区别

UDP的特点如下:

无链接

UDP使用尽最大努力交付,不保证可靠性

UDP是面向报文的,UDP对应用层交付下来的报文,既不合并,也不拆分,而是保留这些报文的边界。应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文

UDP没有拥塞控制

UDP支持一对一、一对多、多对一和多对多的交互通信

UDP的首部开销小,只有8字节

TCP的特点:

TCP是面向连接的

每条TCP连接只能用于两个断点,一对一

TCP提供可靠交付的服务:连接传输数据、无差错、不丢失、不重复、并且按序到达

TCP提供全双工通信

面向字节流。TCP根据对方给出的窗口和当前网络拥塞的程度来决定一个报文应该包含多少个字节

HTTP协议

HTTP:超文本传输协议,是用于从WWW服务器传输超文本到本地浏览器的传输协议。

HTTP协议是一种无状态协议,主要包含请求和相应两大部分:

请求(Request)

请求是我们发送给接口的数据对象,包含接口地址(URL),请求方法,参数,请求头(Headers), Cookies, 数据等

真实抓包一个请求:

抓包请求

请求原始格式-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

第1行: 请求方法 接口地址 HTTP协议版本

第2-N行:请求headers(如果有Cookie,最后一行为Cookie)

空一行

请求数据(POST等方法使用,此处为空)

请求原始格式-POST请求(Raw格式:Fiddler抓包得到)

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

注意:?号要使用英文?,不能使用中文?

URL编码:

URL编码是一种浏览器用来打包请求参数及表单参数的格式, 参数和参数之间使用&分割,非ASCII码使用%加16进制编码替换

如:https://www.sojson.com/open/api/weather/json.shtml?city=北京

编码后为:

https://www.sojson.com/open/api/weather/json.shtml?city=%E5%8C%97%E4%BA%AC

请求方法

序号方法描述

1

GET

请求指定的页面信息,并返回实体主体

2

POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)数据被包含在请求体中

3

HEAD

类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头

4

PUT

从客户端向服务器传送的数据取代指定的文档的内容

5

DELETE

请求服务器删除指定的页面

6

CONNECT

预留给能够将连接改为管道方式的代理服务器

7

OPTIONS

允许客户端查看服务器的性能

8

TRACE

回显服务器收到的请求,主要用于测试或诊断

GET请求和POST请求的区别

GET请求:

GET请求可被缓存

GET请求保留在浏览器历史记录中

GET请求可被收藏为书签

GET请求不应在处理敏感数据时使用

GET请求有长度限制

GET请求只应当用于取回数据

POST请求:

POST请求不会被缓存

POST请求不会保留在浏览器历史记录中

POST不能被收藏为书签

POST请求对数据长度没有要求

请求参数(URL参数)

如:https://www.sojson.com/open/api/weather/json.shtml?city=北京

中的city=北京,向接口传递一个参数“city”,参数值为“北京”

不同的参数之间用&隔开,非ASCII码参数会自动url encode

请求Headers(请求头)

常见Headers

常见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: 混合表单,支持上传图片

数据编码

ASCII码: 单字节,美国信息交换标准码, 包含数字,字母,英文标点及一些控制字符

ISO-8859-1:又称Latin1,单字节,向下兼容ASCII,用于支持部分于欧洲使用的语言

ANSI编码:单字节表示英文,双字节表示汉字,对ASCII的扩展,不同的国家和地区制定了不同的标准,中文中的GBK,GB2312属于ANSI编码

Unicode编码: 采用二个字节编码(英文和中文的字符都以双字节存放),与ANSI码不兼容

UTF-8:是目前互联网上使用最广泛的一种Unicode 编码方式,又称万国码

指定请求数据编码(解决中文乱码):

请求Headers设置Content-Type: application/json; charset=utf-8

Base64: 一种用64个字符来表示任意二进制数据的方法。

Base64编码的作用:由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。

而且base64特别适合在http,mime协议下快速传输数据。

Base64在接口中的的使用

响应(Response)

接口返回的信息,包含HTTP状态码,响应头和相应信息

原始相应数据(Raw格式,Fiddler抓包)

HTTP/1.1 200 OK

Date: Thu, 23 Aug 2018 06:32:26 GMT

Transfer-Encoding: chunked

Connection: keep-alive

22b

{"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":"亲,已帮你找到相关酒店信息"}}]}

0

常见的响应格式有:

html

json

xml

响应编码:有时需要根据不同的编码来正确解析响应内容

HTTP状态码

1** 信息,服务器收到请求,需要请求者继续执行操作

2** 成功,操作被成功接收并处理

3** 重定向,需要进一步的操作以完成请求

4** 客户端错误,请求包含语法错误或无法完成请求

5** 服务器错误,服务器在处理请求的过程中发生了错误

常见HTTP响应码

200: 成功

301/302: 请求重定向到另外一个接口

400: 请求语法错误

403:资源没有访问权限

404:资源不存在(有可能是请求url错误或参数不正确)

405:请求方法不被允许(比如接口只允许Post,使用Get请求接口)

500:服务器内部错误(通常是服务器挂了或接口Bug)

502: 网关失效

504: 网关请求超时

HTTP与HTTPS

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

HTTPS和HTTP的区别

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

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

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

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

Cookie和Session

Cookie/Cookies: 是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

Session:服务端为客户端访问所建立和维持的会话,通常会生成一个唯一的id,会话有一定的有效期。

由于HTTP是无状态的,即服务器不知道用户上一次做了什么,默认也无法识别用户身份。

比较流行的做法是:

用户访问时服务端建立会话(Session)

将会话id(Session ID)随响应返回,并保存在客户端的Cookies里

后续的访问中,服务器通过辨识,客户端请求时携带的Cookies内容来识别用户

用户首次访问服务器向客户端设置Cookie

后续访问时携带Cookie

Cookie和Session的区别

cookie是存在客户端(浏览器)的进程内存中和客户端所在的机器硬盘上

cookie只能能够存储少量文本,大概4K大小

cookie是不能在不同浏览器之间共享

Session存在服务器端,存在网站进程的内存中

Session在初次设置session的时候,会在session池中实例化一个session对象,以sessionid 的值作为key,同时会将key以cookie的形式保存到客户端的内存中

Session的作用域只存在当前浏览器的会话中,当浏览器关闭以后就会将sessionid丢失,但是服务器的Session对象要20分钟以后才会回收

授权与加密

常见的接口安全策略:

Session/Cookie机制: 即需要登录,登录后可访问各个接口,最常用的一种策略,适用于内部接口。

固定appid模式: 用户注册时会生成一个唯一的appid,用户调用接口时需要携带appid,适用于公开接口,安全性较差。

动态token模式: token即身份令牌,用户访问接口需要使用个人appid临时申请一个token,token有一定有效期,适用于公开接口,安全性较appid模式好。

开放协议: Basic Auth/ Oauth1.0 / Oauth2.0: 适用于开放接口。

数字签名: 将所有请求参数及参数值进行排列拼接,加上用户私钥,再进行Md5或其他加密生成一个请求的签名(sign),请求是需要携带签名,服务器收到请求后,会对请求重新计算签名并核实与请求所携带签名是否一致。安全性较高,可以有效防止请求被篡改。适用于内部接口及微服务接口。

常见的加密算法

在接口数据传输过程中常对一些敏感数据(如密码)进行Base64编码或MD5加密,以增加安全性。

加密算法分为对称式加密算法和非对称式加密算法,对称式加解密使用同一个秘钥,非对称式使用不同的秘钥。

对称式加密

DES: 数据加密标准,速度较快,适用于加密大量数据的场合

AES: 高级加密标准,速度快,安全级别高

非对称式加密

RSA: 是一个支持变长密钥的公共密钥算法, 分公钥和私钥,SSH协议使用该算法

MD5: 最常用的一种加密方法,是一种摘要算法。

缓存

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

接口测试中缓存相关注意点

在更新或调试接口是,注意是否需要清理缓存(或临时禁用缓存)

缓存有一定的有效期

接口性能测试中会关注缓存的命中率

python通信测试_Python接口测试实战1(上)- 接口测试理论相关推荐

  1. 【接口测试实战(零)】接口测试简介

    文章目录 1)什么是软件接口? 软件接口的功能 2)接口自动化测试 2.1 测试点范围 1.业务功能(正常,异常场景是否实现) 正常业务的用例: 异常场景: 2.性能测试(响应时间,吞吐量,并发数,资 ...

  2. python绘画_python学画画(上)

    下载W3Cschool手机App,0基础随时随地学编程 导语 本来想用神经网络让计算机学会画铅笔画和素描的,后来发现其实不用神经网络效果也还可以,那么系列上就从简单的入手! 先放图哈! 沙画: 铅笔画 ...

  3. python 随机数_python项目实战:实现蒙特卡罗方法,求物体阴影面积

    前言 蒙特卡罗方法是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法.与它对应的是确定性算法.蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算.量子热力学计算.空气动力学计 ...

  4. 蒙特卡洛实现python过程_python项目实战:实现蒙特卡罗方法,求物体阴影面积

    前言 蒙特卡罗方法是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法.与它对应的是确定性算法.蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算.量子热力学计算.空气动力学计 ...

  5. python花数_Python数据分析实战,尾鸢花数据集数据分析

    本节所使用的尾鸢花数据集是Python中自带的数据集,常用于机器学习分类算法模型,其中sepal_length_cm.sepal_width_cm.petal_length_cm.petal_widt ...

  6. python学生分布_Python数据分析实战之分布分析

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:严小样儿 分布分析法,一般是根据分析目的,将数据进行分组,研究各组别 ...

  7. python喜马拉雅_Python爬虫实战案例:取喜马拉雅音频数据详解!

    前言 喜马拉雅是专业的音频分享平台,汇集了有声小说,有声读物,有声书,FM电台,儿童睡前故事,相声小品,鬼故事等数亿条音频,我最喜欢听民间故事和德云社相声集,你呢? 今天带大家爬取喜马拉雅音频数据,一 ...

  8. 程度性数据python分析_python数据分析实战之AQI分析

    文章目录 1.数据分析的基本流程 2.明确需求和目的 2.1 需求和目的 3.数据收集 4.数据预处理 4.1 数据整合 4.1.1 加载相关库和数据集 4.1.2 数据总体概览 4.2 数据清洗 4 ...

  9. python接口自动化测试框架实战从设计到开发_Python接口自动化测试框架实战 从设计到开发...

    第1章 课程介绍(不要错过) 本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用 本章重点讲解如何抓app\web的h ...

最新文章

  1. Linux下修改mysql默认最大连接数,查看当前设置的最大连接数
  2. K-Means聚类算法进行压缩图片
  3. Halcon知识: 矩形测量
  4. ARM64的启动过程之(三):为打开MMU而进行的CPU初始化
  5. 通过相似性或相异指数的数值分布比较群落Beta多样性高低
  6. 不装oracle进行远程连接解决办法 .
  7. 数据结构之线性查找和折半查找
  8. UE4 AnimMontage
  9. 如何添加评论_亚马逊评论数据分析
  10. messagehub讲解,如何获取MessageHub的其余管理API的API密钥?
  11. Spring AOP 浅析
  12. Linux配置多个tomcat
  13. 令牌桶限流-java实现
  14. h2ouve下载 insyde_H20UVE_100.00.9.2 Insyde H2OUVE (UEFI Variable Editor) - 下载 - 搜珍网
  15. Day04 关键字、标识符、变量及运算符
  16. ios手机python编译器免费_适用与IOS手机的python编辑器,让你不限空间,地点都能玩转pyhton代码 !...
  17. flickr的奇怪的认证过程
  18. memcpy越界引起的segment fault
  19. html5城堡防御游戏《小英雄呼呼》截图
  20. hdmi接口线_VGA、DVI、HDMI、DP接口,您真的了解吗

热门文章

  1. ubuntu下安装与卸载软件方法
  2. 如何处置你的竞争对手
  3. eBook 功能模块二之设置模块
  4. ASP.NET 开发小技巧 (持续更新)
  5. 比特币前首席开发人员:LN可能还需要18个月
  6. Salesforce平台支持多租户Multi tenant的核心设计思路
  7. .net core出现Http Error 502.5 - Process Failure
  8. 通过RMAN克隆11g数据库(基于active database)
  9. RHEL7 单独安装图形 X11
  10. 模仿SDWebImage实现异步加载图片