继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

慕的地10843
关注TA
已关注
手记 1081
粉丝 201
获赞 962

本节内容

  • 接口及接口测试

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

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

  • HTTP协议

接口及接口测试

这里插播一个段子


webp

app随手机壳变色


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

接口的概念

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

简单概括为以下3点:

  • 程序代码(函数方法)

  • 屏蔽实现细节

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

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

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

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

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

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

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

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

  • 身份证需与本人一致

  • 专业需与报考岗位符合

  • 报名时间 2024.8.22-2024.8.30
    现场会给出是否报名成功   --- 接口响应信息

软件中的接口

webp

接口处理过程


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


webp

接口交互场景

常见接口类型?
-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接口


    webp

    相互关系

什么是接口测试?

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

为什么要做接口测试?

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

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

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

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

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

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

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

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

接口测试点参考:


webp

服务端接口测试

怎样掌握接口测试?

  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协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址

webp

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 Trueprint(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

webp

端口查看

解决端口占用问题

  • 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

webp

域名及ip

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

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

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

OSI七层模型

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

webp

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的特点如下:

  1. 无链接

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

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

  4. UDP没有拥塞控制

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

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

  • TCP的特点:

  1. TCP是面向连接的

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

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

  4. TCP提供全双工通信

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

参考:TCP和UDP协议的对比

HTTP协议

HTTP:超文本传输协议,是用于从WWW服务器传输超文本到本地浏览器的传输协议。
HTTP协议是一种无状态协议,主要包含请求和相应两大部分:

请求(Request)

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

webp

抓包请求


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

GET https://www.sojson.com/open/api/weather/json.shtml?city=%E5%8C%97%E4%BA%AC HTTP/1.1Host: www.sojson.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36Accept: 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

如: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



作者:韩志超
链接:https://www.jianshu.com/p/9d3f991c901a


打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP