python+pytest接口自动化(1)-接口测试基础
接口定义
一般我们所说的接口即API,那什么又是API呢,百度给的定义如下:
API(Application Programming Interface,应用程序接口)是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。
有点绕口,但我们看下定义里面这些关键字:预先定义的接口 (如函数、HTTP接口)、基于软件或硬件得以访问、无需访问源码、无需理解内部工作机制,大概就明白了。
举例说明:
电脑或手机上提供了各种物理硬件接口,如:USB接口、充电接口、耳机接口、麦克风接口等。这些不同的接口有不同的功能,比如通过USB接口插入U盘就可以拷贝数据,插入耳机接口可以听音乐,我们无需关心这些接口的工作原理,只需通过这些接口满足我们的使用需求即可。
在中国天气网网上查询某个城市天气,输入城市名称,即可获取对应城市的天气。查询背后的本质也是调用了网站后台接口来获取数据,这里的接口是Web服务软件接口。用户不需要关注数据在网站后台是怎么查询的,只需要得到返回结果即可。
接口分类
软件接口分类的维度有很多,类型比较难以界定,也可能经常会被搞混淆。
以接口所使用的协议不同可做如下分类:
HTTP 接口,使用 HTTP 协议
Web Service 接口,使用 soap
WebSocket 接口,使用 TCP、UDP 协议
Dubbo 接口,使用 Dubbo 协议
当然,以使用协议不同进行分类其实也是不严谨的,例如 soap 协议也是基于 HTTP 协议的封装,Dubbo 协议基于 TCP 协议,所以这个分类也仅供参考。
以接口设计风格不同可做如下分类:
RPC 类型接口,RPC 面向过程调用(Remote Procedure Call Protocol),主要是基于 TCP/IP 协议
REST 类型接口,REST 面向资源调用(Representational State Transfer),主要是基于 HTTP 协议
至于这两种风格的具体内容,这里不做过多说明,有兴趣的同学可以自行查找资料。
常见接口
接口测试即对接口进行校验性测试,测试工作过程中常遇到的接口有HTTP、Dubbo两种,两者对比如下 (理解有误的话欢迎评论指正):
| HTTP接口 | Dubbo接口 | |
|---|---|---|
| 设计风格 | REST | RPC |
| 协议层区别 | 应用层协议 | 传输层协议 |
| socket连接区别 | http1.1协议默认使用短连接,每次请求均需要进行三次握手(http2.0协议开始将默认socket连接改为了长连接) | 默认使用长连接,即首次访问建立连接以后,后续网络请求使用相同的网络通道 |
| 应用区别 | 广泛运用于客户/服务器模式中 | 阿里分布式服务框架Dubbo |
目前绝大部分公司的接口测试都是针对HTTP接口。
以登录TesterHome网站为例,我们在网页上输入用户名、密码,点击【登录】按钮后,网页就会请求登录接口 (该接口为HTTP接口) 向服务端发起登录请求。
输入错误的用户名或错误,登录接口(sign_in)就会返回错误,如下:

输入正确的用户名和密码,登录接口校验通过,登录成功且跳转至首页,如下:

通过示例,我们对客户端跟服务端之间怎样通过接口的形式进行数据的交互有个大致的印象。
测试分层
通常把软件测试分为三层金字塔模型,由上至下依次为:UI测试、接口测试、单元测试。

就项目质量而言,金字塔的每一层都无法被替代,我们平常测试可能更多的是关注UI测试,但对于满足满足被测系统的质量而言这往往是不能够的,除此之外还需要对接口进行测试 (单元测试一般由开发完成)。
接口测试的必要性及优势如下:
比UI测试更接近底层,越早发现底层的问题,解决成本越低。
相对于UI测试而言,接口测试更容易发现后端隐藏的bug。
在前后端分离的设计模式下,容易绕过前端篡改或伪造数据进行接口请求,因此需要对接口的异常处理能力及安全性方面进行测试。
在并发的情况下,需要对接口的稳定性进行性能测试,否则容易造成系统问题。
相对于单元测试而言,接口测试更接近用户使用场景,且投入成本更低。
相对于UI测试,接口测试可以进行维护成本更低、效率更高的自动化测试。
测试左移和右移
近些年测试行业越来越多地提及测试的左移与右移,它们的定义如下。
测试左移
测试左移 ,即让测试介入开发提测之前的部分测试工作。比如,在架构设计阶段或开发阶段,测试人员就介入开始考虑产品的可测试性,并管理开发自测等。此外,测试可以更进一步扩展到需求评审阶段,让测试人员不仅仅是了解需求,还要评估需求的质量。
测试右移
测试右移,即让测试介入应用上线后的部分工作。比如,产品上线过程中后上线后,测试人员可进行线上巡检。此外,产品上线后,测试人员仍需要关注线上情况,发现问题需及时跟进,将影响降到最低。
测试的左移与右移是为了更好的把控项目的质量,而不管是左移还是右移,在实践的过程中,对接口的质量关注仍然是重点。
总结
就当前软件测试招聘的市场需求以及趋势而言,接口测试是测试人员必须掌握的技能,而接口自动化测试则是加薪利器。
工作过程中更多的是对HTTP协议的接口做接口测试,后续博客针对的也是HTTP类型的接口。
python+pytest接口自动化(1)-接口测试基础的更多相关文章
- python+pytest接口自动化(11)-测试函数、测试类/测试方法的封装
前言 在python+pytest 接口自动化系列中,我们之前的文章基本都没有将代码进行封装,但实际编写自动化测试脚本中,我们都需要将测试代码进行封装,才能被测试框架识别执行. 例如单个接口的请求代码 ...
- python+pytest接口自动化(6)-请求参数格式的确定
我们在做接口测试之前,先需要根据接口文档或抓包接口数据,搞清楚被测接口的详细内容,其中就包含请求参数的编码格式,从而使用对应的参数格式发送请求.例如某个接口规定的请求主体的编码方式为 applicat ...
- python+pytest接口自动化(9)-cookie绕过登录(保持登录状态)
在编写接口自动化测试用例或其他脚本的过程中,经常会遇到需要绕过用户名/密码或验证码登录,去请求接口的情况,一是因为有时验证码会比较复杂,比如有些图形验证码,难以通过接口的方式去处理:再者,每次请求接口 ...
- python+pytest接口自动化(12)-自动化用例编写思路 (使用pytest编写一个测试脚本)
经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路. 我们在百度搜索天气查询,会出现如下图所示结果: 接下来,我们以该天气查询接口为例,编写接 ...
- python+pytest接口自动化(13)-token关联登录
在PC端登录公司的后台管理系统或在手机上登录某个APP时,经常会发现登录成功后,返回参数中会包含token,它的值为一段较长的字符串,而后续去请求的请求头中都需要带上这个token作为参数,否则就提示 ...
- python+pytest接口自动化(16)-接口自动化项目中日志的使用 (使用loguru模块)
通过上篇文章日志管理模块loguru简介,我们已经知道了loguru日志记录模块的简单使用.在自动化测试项目中,一般都需要通过记录日志的方式来确定项目运行的状态及结果,以方便定位问题. 这篇文章我们使 ...
- python+pytest接口自动化(4)-requests发送get请求
python中用于请求http接口的有自带的urllib和第三方库requests,但 urllib 写法稍微有点繁琐,所以在进行接口自动化测试过程中,一般使用更为简洁且功能强大的 requests ...
- python+pytest接口自动化(10)-session会话保持
在接口测试的过程中,经常会遇到有些接口需要在登录的状态下才能请求,否则会提示请登录,那么怎样解决呢? 上一篇文章我们介绍了Cookie绕过登录,其实这就是保持登录状态的方法之一. 另外一种方式则是通过 ...
- python pytest接口自动化框架搭建(一)
1.首先安装pytest pip install pytest 2.编写单测用例 在pytest框架中,有如下约束: 所有的单测文件名都需要满足test_*.py格式或*_test.py格式. 在单测 ...
随机推荐
- java有四种访问权限
Java面向对象的封装性是通过对成员变量和方法进行访问控制实现的,访问控制分为4个等级:私有.默认.保护和公有,具体规则如下表:
- java 坐标练习
定义一个三维空间的点,有三个坐标 实现以下目标: 1.可以生成特定坐标的点对象 2.提供可以设置三个坐标的方法 3.提供可以计算该点到特定点距离的平方的方法 class Point { double ...
- 如何在pyqt中在实现无边框窗口的同时保留Windows窗口动画效果(一)
无边框窗体的实现思路 在pyqt中只要 self.setWindowFlags(Qt.FramelessWindowHint) 就可以实现边框的去除,但是没了标题栏也意味着窗口大小无法改变.窗口无法拖 ...
- AT2395 [ARC071C] TrBBnsformBBtion
基于观察,可以发现以下两条性质: A 可以到 BB,BB 也可以到 A,对 B <-> AA 也是同理的. 可以通过这两个操作交换相邻元素. 对于前者,只需证明 BB 可以到 A 即可,不 ...
- G1垃圾收集器
G1(Garbage-First) G1是一种服务端应用使用的垃圾收集器,目标是用在多核.大内存的机器上,它在大多数情况下可以实现指定的GC暂停时间,同时还能保持较高的吞吐量. 特点 压缩空闲空间不会 ...
- python基础篇-爬虫urlparse使用及简单示例
>>> from urllib.parse import urlparse >>> o = urlparse('http://www.cwi.nl:80/%7Egu ...
- Java线程--BlockingQueue使用
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11871704.html Java线程--BlockingQueue使用 阻塞队列就是内容满了之 ...
- iOS block的用法 by -- 周傅琦君
X.1 初探Block X.1.1 宣告和使用Block 我们使用「^」运算子来宣告一个block变数,而且在block的定义最后面要加上「;」来表示一个完整的述句(也就是将整个block定义视为前面 ...
- 关于增强for循环的使用
1 class MultipleQUestion extends Question{ //多选题类 2 3 private char[] answer; //多选题答案属性 4 5 public ch ...
- python办公自动化系列之金蝶K3自动登录(二)
接上一篇博文python办公自动化系列之金蝶K3自动登录(一),我们接着聊聊利用python脚本实现金蝶K3 Wise客户端自动登录这一需求. 如上图所示,自动选择[组织机构]后,我们还需要驱动[当前 ...