Python接口测试软件测试-接口测试接口测试

Python接口测试实战1(上)-接口测试理论

2018-08-22  本文已影响600人  韩志超

接口测试理论(第1天 上午)

接口测试基础

什么是接口?

这里插播一个段子


app随手机壳变色

上图中,程序员口中提到的接口是什么意思呢?
手机壳有没有颜色这个属性(功能)? --- 有
手机壳有没有提供让程序获取它颜色的途径? --- 没有,这个途径就是接口

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

简单概括为以下3点:

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

举个栗子:
西虹市公考报名处 --- 接口名称
报名地址: 西虹市街口区带莫路3号 --- 接口地址
现场需填写资料: 姓名,身份证证号码,专业,报考岗位等等 --- 接口参数
验证规则: --- 参数验证规则

软件中的接口

接口处理过程

软件项目中,接口是系统与系统之间,模块与模块之间或者服务于服务之间相互调用的入口。
从开发者角度,接口是分工协作的产物,不同开发者实现自己的功能之后,封装成接口,供其他开发者调用。其他开发者只要按规定格式发送一些必要参数,就能使用该功能


接口交互场景

常见接口类型?
-HTTP接口,RPC接口,Web Service接口, Dubble接口,RESTful接口,其中RESTful接口是基于HTTP接口的,Web Service及Dubble属于RPC接口

什么是接口测试?

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

为什么要做接口测试?

接口测试都测什么?
接口测试一般有以下岗位实施:

接口测试点参考:


服务端接口测试

怎样掌握接口测试?

  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日子查询和筛选命令

接口测试重难点

  1. 动态变量参数化
  2. 接口依赖及中间变量问题
  3. 异步接口结果验证问题
  4. 相应参数及嵌套很多的验证问题
  5. 接口测试框架的稳定性问题
  6. 资源清理问题
  7. 多接口场景测试
    ...

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

IP地址

就像每个人都有一个身份证号码
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址

ip地址

查看IP命令

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)个
端口类型

查看端口命令

端口查看

解决端口占用问题

域名及DNS

由于IP地址不容易记忆,为IP地址赋予了一个利于记忆的别名,称为域名

如,百度的ip为: 61.135.169.125,对应的域名为 www.baidu.com

域名及ip

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

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

网络基础知识:OSI七层模型

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

OSI网络模型

TCP及UDP协议

TCP和UDP都是传输层的协议

TCP和UDP的区别

  1. 无链接
  2. UDP使用尽最大努力交付,不保证可靠性
  3. UDP是面向报文的,UDP对应用层交付下来的报文,既不合并,也不拆分,而是保留这些报文的边界。应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文
  4. UDP没有拥塞控制
  5. UDP支持一对一、一对多、多对一和多对多的交互通信
  6. UDP的首部开销小,只有8字节
  1. TCP是面向连接的
  2. 每条TCP连接只能用于两个断点,一对一
  3. TCP提供可靠交付的服务:连接传输数据、无差错、不丢失、不重复、并且按序到达
  4. TCP提供全双工通信
  5. 面向字节流。TCP根据对方给出的窗口和当前网络拥塞的程度来决定一个报文应该包含多少个字节

参考:TCP和UDP协议的对比

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


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

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

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

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

链接:URL编码/解码工具(http://tool.chinaz.com/Tools/urlencode.aspx)

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

GET请求和POST请求的区别

请求参数(URL参数)

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

请求Headers(请求头)

常见Headers

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

请求数据类型(Content-Type)(重点)

数据编码

指定请求数据编码(解决中文乱码):
请求Headers设置Content-Type: application/json; charset=utf-8

Base64在接口中的的使用

参考: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

常见的响应格式有:

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

HTTP状态码(重点)

常见HTTP响应码

HTTP与HTTPS

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

Cookie和Session

Cookie和Session的区别

授权与加密

常见的接口安全策略:

  1. Session/Cookie机制: 即需要登录,登录后可访问各个接口,最常用的一种策略,适用于内部接口。
  2. 固定appid模式: 用户注册时会生成一个唯一的appid,用户调用接口时需要携带appid,适用于公开接口,安全性较差。
  3. 动态token模式: token即身份令牌,用户访问接口需要使用个人appid临时申请一个token,token有一定有效期,适用于公开接口,安全性较appid模式好。
  4. 开放协议: Basic Auth/ Oauth1.0 / Oauth2.0: 适用于开放接口。
  5. 数字签名: 将所有请求参数及参数值进行排列拼接,加上用户私钥,再进行Md5或其他加密生成一个请求的签名(sign),请求是需要携带签名,服务器收到请求后,会对请求重新计算签名并核实与请求所携带签名是否一致。安全性较高,可以有效防止请求被篡改。适用于内部接口及微服务接口。
    常见的加密算法
    在接口数据传输过程中常对一些敏感数据(如密码)进行Base64编码或MD5加密,以增加安全性。
    加密算法分为对称式加密算法和非对称式加密算法,对称式加解密使用同一个秘钥,非对称式使用不同的秘钥。

缓存

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

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


个人微信号: lockingfree, 如有问题,欢迎交流

上一篇下一篇

猜你喜欢

热点阅读