puffer 发表于 2019-9-15 17:01:50

Python接口测试

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

1)HTTP接口:通过HTTP协议传输的接口,可以传输文本表单数据,也可以传输Json类型的对象数据或xml类型的数据
2)RPC: 远程方法调用,随着分布式系统的出现,当你需要调用部署到其他服务器上的方法时,需要用到RPC。RPC只是提出了这样一个问题,有很多种解决方案,比如WebService(基于SOAP协议), REST(基于HTTP协议)。
3)SOAP: 简单面向对象协议,基于HTTP,使用xml作为默认传输格式
4)Web Service: 基于SOAP协议的一种RPC实现方案。相比传统的HTTP接口只传输文本请求和文本相应,通过Web Service可以直接拿到远程的一个对象,并能够直接调用该对象的属性和方法,比HTTP更高级。
5)REST/RESTful API: REST,表述性状态转移。一种HTTP接口的设计风格,将一切接口视为资源,要求接口路径同意管理,分版本管理,规定了GET/POST等请求以及HTTP状态码的使用规范,默认使用JSON格式传输。RESTful API即满足REST风格即设计规范的API接口。
3.接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个
子系统之间的交互点。测试的重点是要检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系等
4. 接口测试一般有以下岗位实施
手工测试岗:先提测接口再提出功能,兼做接口自动化
服务端测试岗:梳理代码,审核接口实现逻辑是否与业务设计一致,技术实现逻辑的合理性,异常流测试,接口压测及安全性测试
测试开发岗:专职做接口(或UI)的自动化用例开发,测试工具开发
5. 怎样掌握接口测试?
1)了解OSI网络模型,TCP/UDP协议,掌握HTTP/HTTPS协议,了解RPC, Web Service及REST,理解Session和Cookie
2)掌握常用的接口测试工具如curl命令,Postman,Jmeter,LR,SoupUI,AB等
3)掌握基本的抓包工具如Chrome开发者工具,Fiddler,Charles,Wireshark,tcpdumps等
4)掌握一门编程语言Python或Java
5)了解Nginx, Apache, Tomcat等服务器中间件
6)掌握数据库基本查询命令,及一些NoSQL(如Redis)操作,用于检查响应结果
7)掌握基本的Linux日子查询和筛选命令
6. 接口测试重难点
动态变量参数化
接口依赖及中间变量问题
异步接口结果验证问题
相应参数及嵌套很多的验证问题
接口测试框架的稳定性问题
资源清理问题
多接口场景测试
7. OSI七层模型
1)上三层---应用层,控制软件方面
应用层:文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示层:数据格式化,代码转换,数据加密
会话层:解除或建立与别的接点的联系(会话)
2)下四层---数据流层,用来管理硬件
传输层:提供端对端的接口 TCP,UDP
网络层:为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP
数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
物理层 以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2
8. HTTP状态码
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
常见HTTP响应码
200: 成功
301/302: 请求重定向到另外一个接口
400: 请求语法错误
403:资源没有访问权限
404:资源不存在(有可能是请求url错误或参数不正确)
405:请求方法不被允许(比如接口只允许Post,使用Get请求接口)
500:服务器内部错误(通常是服务器挂了或接口Bug)
502: 网关失效
504: 网关请求超时
9. HTTP与HTTPS
HTTP协议传输的数据都是未加密的,HTTPS协议是由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。
HTTPS和HTTP的区别
HTTPS协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。
HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
HTTP的连接很简单,是无状态的;HTTPS协议是由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
9. Cookie和Session
Cookie/Cookies: 是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
Session:服务端为客户端访问所建立和维持的会话,通常会生成一个唯一的id,会话有一定的有效期。
由于HTTP是无状态的,即服务器不知道用户上一次做了什么,默认也无法识别用户身份。
比较流行的做法是:
用户访问时服务端建立会话(Session)
将会话id(Session ID)随响应返回,并保存在客户端的Cookies里
后续的访问中,服务器通过辨识,客户端请求时携带的Cookies内容来识别用户
Cookie和Session的区别

cookie是存在客户端(浏览器)的进程内存中和客户端所在的机器硬盘上
cookie只能能够存储少量文本,大概4K大小
cookie是不能在不同浏览器之间共享
Session存在服务器端,存在网站进程的内存中
Session在初次设置session的时候,会在session池中实例化一个session对象,以sessionid 的值作为key,同时会将key以cookie的形式保存到客户端的内存中
Session的作用域只存在当前浏览器的会话中,当浏览器关闭以后就会将sessionid丢失,但是服务器的Session对象要20分钟以后才会回收
10.授权与加密
常见的接口安全策略:

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 性能优化的重要手段,当用户第一次请求服务器资源时,服务器将资源缓存到客户端本地,在一定时间内(缓存有效期内)当用户再次向服务器请求同样的资源时,可以直接从缓存中读取,而不用从服务器下载。
接口测试中缓存相关注意点
在更新或调试接口是,注意是否需要清理缓存(或临时禁用缓存)
缓存有一定的有效期
接口性能测试中会关注缓存的命中率
页: [1]
查看完整版本: Python接口测试