掌握 Python 接口自动化测试理论,深度解读测试框架源码

news2025/1/10 20:34:54

目录:导读

引言

一、什么是接口测试、为什么要做接口测试

1、什么是接口测试

2、为什么要做接口测试

二、接口测试的流程

1、接口测试的流程

2、为什么要写测试用例

3、接口测试设计要点

三、python接口自动化-requests的应用

1、requests简介

2、requests安装

3、requests-发送get请求

4、requests-发送post请求

5、response的其他应用

四、python接口自动化-unittest的应用

1、unittest简介

2、unittest的简单应用

结语


引言

Python 是一种易于学习和使用的编程语言,越来越多的软件测试人员开始将其用于接口自动化测试。但要想真正掌握 Python 接口自动化测试,不仅需要理论知识的支持,还需要深入了解各种自动化测试框架的源码实现

接下来文章将为你详细介绍 Python 接口自动化测试的理论知识,包括接口测试中的常见问题和解决方案、自动化测试的设计原则和流程等;

同时,我们还会深度解读主流 Python 自动化测试框架的源码实现,例如 unittest、pytest 和 requests 等。

无论你是初学者还是有一定经验的测试工程师,我们相信这篇文章都能给你带来新的启示和灵感,助你在 Python 接口自动化测试领域更进一步!

一、什么是接口测试、为什么要做接口测试

1、什么是接口测试

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。 
一般来说,测试接口,就是指测试接口的功能,性能和稳定性测试,当然可能还有安全性测试。一般,来说我们听说到的接口基本上都是指HTTP或者HTTPS协议的接口测试,也就是一些web服务请求。一个软件项目中,
有很多接口,少的有几十个,多的有几百上千个接口。这个时候,我们没有软件界面,没有具体的测试场景,只有一个接口描述文档。我们需要把接口这样抽象的东西,通过软件测试的理论和方法去测试接口,找出接口的功能和安全性的缺陷。接口有内部接口和外部接口。内部接口就是开发人员自己开发的接口。外部接口,好比网站调用微信支付和支付宝支付接口。还有一些模块与模块之间的接口。【转至 北京宏哥】

2、为什么要做接口测试

1、现在很多系统前后端架构是分离的,因为不同端(前段,后端)的工作进度不一样,所以我们要针对最开始出来的接口,以及需要调用其他公司的(银行,支付宝,微信,qq等)一些接口进行接口测试及验证数据,从安全层面来说,只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前端太容易了), 需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。在这种情况下就需要从接口层面进行验证。前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等。

2、如今系统越来越复杂,传统的靠前端测试已经大大降低了效率,而且现在我们都推崇测试前移也叫测试左移,希望测试能更早的介入测试,那接口测试就是一种及早介入的方式。例如传统测试,需要等前后端都完成才能进行测试,才能进行自动化代码编写。 而如果是接口测试,只需要前后端定义好接口,那这时自动化就可以介入编写接口自动化测试代码,手工测试只需要后端代码完成就可以介入测试后端逻辑而不用等待前端工作完成。【转至 北京宏哥】

二、接口测试的流程

1、接口测试的流程

接口测试也是属于功能测试,所以跟我们以往的功能测试流程并没有太大区别,测试流程依旧是:
a.测试接口文档(需求文档).
b.根据接口文档编写测试用例(用例编写完全可以按照以往规则来编写,例如等价类划分,边界值等设计方法)
c. 执行测试,查看不同的参数请求,接口的返回的数据是否达到预期。


接口测试和功能测试一样,流程也大致遵守V模型:

一般来说,接口测试左边的每个阶段,每个公司可能都侧重点不同,例如有些公司就没有需求讨论和需求评审这个阶段。不管如何,用例设计,这个是少不了,而且是重点,要花时间的阶段。只有覆盖全面的接口测试用例,才能有比较好的测试接口覆盖率,才会找出更多的接口的Bug,后期接口才能越稳定。

2、为什么要写测试用例

a.理清思路,避免漏测和重复测
b.提高测试效率
c.跟进测试进度
d.告诉领导做过
e.跟进重复性工作
f.更好的记录问题,发现问题,复现问题

3、接口测试设计要点

主要从四个方面来设计接口用例:功能,逻辑业务,异常,安全
功能:
功能是否正常;
功能是否按照接口文档实现
逻辑业务:
是否依赖业务,比如接口调用之前,需要调用登录接口,如果不登录也能请求数据,不符合业务规则。
异常:
参数异常和数据异常
参数异常:关键字参数,参数为空,多,少参数,错误参数
数据异常:关键字数据,数据为空,长度不一致,错误数据
安全:
cookie:有cookie才能获取数据,如果不带cookie还有信息返回,说明有问题
header:正常接口带header信息,删除header看是否能够返回数据。
唯一识别码:app手机识别码,一般是唯一的。

三、python接口自动化-requests的应用

1、requests简介

如果想用python做接口测试,我们首先有不得不了解和学习的模块。
它就是python的第三方模块:Requests。
虽然Python内置有urllib模块用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能。
所以呢更好的方案是使用requests。它也是目前应用最广泛、最方便、功能最强大的一个Python第三方库,
主要用于处理URL资源
ruquests的中文官网:Requests: 让 HTTP 服务人类 — Requests 2.18.1 文档
requests的英文官网:http://www.python-requests.org/en/master/
有兴趣的可以看一下它的很多实用的高级功能

2、requests安装

a.使用pip安装

pip install requests

如果下载比较慢,配置使用国内镜像进行下载 pypi | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

b.使用pycharm安装
步骤1:

步骤2:

步骤3:

步骤4:

3、requests-发送get请求

import requests

# 请求的url,以小望之家的以id查企业接口为例
url = "https://endpoint.xiaowangtech.com/xw-moonlit/moonlit/enterprise/search-detail?enterpriseId=410417"

# header信息
header = {
    "Access-Token": "6693dfed-bbbf-4163-9e59-e21a19ec7195",
    "Accept": "application/json, text/plain, */*",
}

# 使用requests发送get请求
r = requests.get(url=url, headers=header)

# 以text格式打印出参
print(r.text)

# 以json格式打印出参
print(r.json())

4、requests-发送post请求

import requests

# 请求的url,以小望之家的获取企业列表为例
url = "https://endpoint.xiaowangtech.com/xw-moonlit/moonlit/enterprise/list"

# header信息
header = {
    "Access-Token": "6693dfed-bbbf-4163-9e59-e21a19ec7195",
    "Accept": "application/json, text/plain, */*",
}
# 请求入参
json = {
    "enterpriseName": "",
    "current": 1,
    "size": 10
}
# 使用requests发送post请求
r = requests.post(url=url, headers=header, json=json)

# 以text格式打印出参
print(r.text)

# 以json格式打印出参
print(r.json())

5、response的其他应用

-- r.status_code #响应状态码
-- r.content #字节方式的响应体,会自动为你解码 gzip 和deflate 压缩
-- r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回 None
-- r.json() #Requests 中内置的 JSON 解码器,requests的方便之处还在于,对于特定类型的响应,例如JSON,可以直接获取
-- r.url # 获取 url
-- r.encoding # 编码格式,requests自动检测编码
-- r.cookies # 获取 cookie
-- r.raw #返回原始响应体-- r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
-- r.raise_for_status() #失败请求(非 200 响应)抛出异常

四、python接口自动化-unittest的应用

1、unittest简介

java开发小伙伴应该都清楚常见的单元测试框架 Junit 和 TestNG。
python 里面也有单元测试框架,就是unittest,相当于是一个 python 版的 junit。
python 里面的单元测试框架除了 unittest,还有一个 pytest 框架,这个实际上用的比较少。
本次主要介绍unittest,unittest单元测试框架不仅可以适用于单元测试,还可以适用自动化测试用例的开发与执行,该测试框架可组织执行测试用例,
并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。

查看其中文官网:unittest --- 单元测试框架 — Python 3.11.3 文档
英文官网:unittest — Unit testing framework — Python 3.11.3 documentation

安装方法与requests相似,不过多描述。

2、unittest的简单应用

unittest结构代码:

# 导入unittest
import unittest

# 定义一个测试类,并集成unittest.TestCase这个类
class TestCase01(unittest.TestCase):
    # 类装饰器,作用为在用例开始前先执行此函数
    @classmethod
    def setUpClass(cls):
        print("case类开始执行")

    # 类装饰器,作用为在用例结束后执行此函数
    @classmethod
    def tearDownClass(cls):
        print("case类执行结束")

    # 每条用例开始前执行此函数
    def setUp(self):
        print("case开始执行")

    # 每条用例结束后执行此函数
    def tearDown(self):
        print("case执行结束")

    # 测试用例1
    def test_01(self):
        print("case1")

    # 测试用例2
    def test_02(self):
        print("case2")

    # 测试用例3
    def test_03(self):
        print("case3")

    # 测试用例4
    def test_04(self):
        print("case4")


if __name__ == "__main__":
    # 运行用例
    unittest.main()

运行结果分析:

结语

这篇贴子到这里就结束了,最后,希望看这篇帖子的朋友能够有所收获。

 获取方式:留言【接口自动化测试学习】即可

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/482754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Winform从入门到精通(37)——FolderBrowserDialog(史上最全)

文章目录 前言1、Name2、Description3、RootFolder4、SelectedPath5、ShowNewFolderButton前言 当需要获取一个可以通过用户自由选择路径的时候,这时候就需要FolderBrowserDialog控件 1、Name 获取FolderBrowserDialog对象 2、Description 用于指示对话框的描述,如下: …

Doris(22):Doris的函数—地理位置函数

1 ST_AsText(GEOMETRY geo) 将一个几何图形转化为WKT(Well Known Text)的表示形式 SELECT ST_AsText(ST_Point(24.7, 56.7)); 2 ST_Circle(DOUBLE center_lng, DOUBLE center_lat, DOUBLE radius) 将一个WKT(Well Known Text)转化为地球球面上的一个圆。其中center_lng表…

20230502 强化学习与反馈控制_利用自然决策方法设计最优自适应控制器

目录:强化学习与反馈控制_利用自然决策方法设计最优自适应控制器 总体介绍强化学习二级目录三级目录 总体介绍 本文描述了利用强化学习原理为离散和连续系统设计反馈控制器,该控制器结合了自适应控制和最优控制的特点。自适应控制和最优控制代表了设计反…

【ElasticSearch】EQL操作相关

文章目录 EQL操作基础语法数据准备数据窗口搜索统计符合条件的事件事件序列 安全检测数据准备查看数据导入情况获取 regsvr32 事件的计数检查命令行参数检查恶意脚本加载检查攻击成功可能性 EQL操作 EQL 的全名是 Event Query Language (EQL)。事件查询语言(EQL&…

Meta财报预测:市场悲观情绪被过度放大,Meta股价未来将强势反弹

来源:猛兽财经 作者:猛兽财经 4月26日收盘后,Meta(META)将发布2023年第一季度财报。由于全球在线广告支出的减少给Meta这样的广告平台带来了很大的压力,市场对Meta的投资情绪非常悲观,华尔街分析师也预测,…

chatGPT免登录的版本哪里有啊

ChatGPT免费次数 Chat GPT 模型通常通过 API 或 SDK 的方式进行使用,并且有一定的免费使用次数或免费试用期,以便用户可以在部分场景下了解模型的性能和效果。但是,每个机器学习平台或服务商的免费使用次数和试用期都可能不同,您…

ChatGPT回复中断的原因-chatGPT国内中文版免费

ChatGPT回复中断怎么办啊 如果您使用ChatGPT时遇到了中断或错误,以下是一些可能有用的解决方案: 检查输入是否正常:输入文本是否符合语法规范和限制条件,例如输入文本长度是否超过了模型限制等等。如果输入不符合要求&#xff0c…

pikachu靶场-Unsafe Filedownload

不安全的文件下载 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件…

Mysql数据库基础知识总复习

前言 小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ 目录 数据库基础知识 数据,数据…

GPT是什么,GPT-4是什么

GPT是Generative Pre-trained Transformer的缩写,是一种人工智能语言模型。为了实现自然语言生成和文本补全等功能,通过训练大规模数据集,GPT模型可以预测某个词或文本的下一个可能的词或文本。GPT是由OpenAI团队推出的,目前已经推…

如何用 GPT-4 帮你写游戏?

你知道的,GPT-4 发布了。 目前你想要用上 GPT-4,主要的渠道是 ChatGPT Plus 。作为交了订阅费的用户,你可以在对话的时候选择模型来使用。 另一种渠道,就是申请官方 API 的排队。我在申请 New Bing Chat 的时候,耐心被…

完成A轮融资,倍思如何发力场景化为品牌创造广阔未来?

凛冬过后的消费电子正在重新凝聚资本的目光。 近日,深圳市倍思科技有限公司宣布完成由深创投、中金资本联合领投,越秀产业基金、高榕资本跟投,金额数亿元人民币的A轮融资。 分析人士指出,消费电子的行业景气度在逐渐恢复&#x…

LeetCode 1376. Time Needed to Inform All Employees【自顶向下,自底向上(记忆化搜索+空间优化+迭代)】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

Java+springboot开发的医院HIS信息管理系统实现,系统部署于云端,支持多租户SaaS模式

一、项目技术框架 前端:AngularNginx 后台:JavaSpring,SpringBoot,SpringMVC,SpringSecurity,MyBatisPlus,等 数据库:MySQL MyCat 缓存:RedisJ2Cache 消息队列&…

JVM-类的加载机制

目录 一、类的生命周期二、类加载的过程三、类加载的时机四、类加载器五、双亲委派模型六、自定义类加载器 一、类的生命周期 当编写完一个 java 类之后,经过编译就能够得到一个 .class(字节码)文件,这种字节码文件需要在 JVM 中…

递归思路讲解

最近刷到了树这一模块的算法题,树相关的算法题几乎都是用递归来实现的,但递归的思路却有点抽象,每次遇到递归,都是通过递归来深度或广度地遍历树,但对于递归遍历树的遍历路线,却有点抽象难懂,不…

基于simulink使用射频模块集天线块对天线阵列的射频系统进行建模

一、前言 本 例 说明 如何 对 包括 天线 阵列 的 MIMO 接收 和 发射 RF 系统 进行 建模。该设计从单个RF链的预算分析开始,然后扩展到多个天线。RF Blockset 天线模块对天线阵列进行全波分析,支持对效应和缺陷进行高保真建模,并结合射频系统的…

2023年的深度学习入门指南(3) - 前端同学如何进行chatgpt开发

2023年的深度学习入门指南(3) - 前端同学如何进行chatgpt开发 在第二篇,我们使用openai的python库封装,搞得它有点像之前学习的PyTorch一样的库。这一节我们专门给它正下名,前端就是字面意义上的前端。 给gpt4写前端 下面我们写一个最土的…

【Web】前端框架对微软老旧浏览器的支持

零、原因 最近要做一个项目,要能在学校机房运行的,也要在手机上运行。电脑和手机,一次性开发,那最好的就是响应式前端框架了。手机和正常的电脑兼容性问题应该都不大,但是学校机房都是Win7的系统,自带的都…

【Linux内核解析-linux-5.14.10-内核源码注释】MM内存管理内核启动初始化源码解析

源码 这是Linux内核中的mm_init函数的代码,其作用是初始化内存管理相关的组件和数据结构。 static: 这是一个函数声明修饰符,表示该函数只在当前文件中可见。 void __init: 这是函数的返回类型和修饰符,表示该函数是内核初始化代码。 page…