如何用 python +ddt+excel 实现接口自动化测试

🍅 视频学习:文末有免费的配套视频可观看

🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快

 接口自动化测试是指通过编写代码或使用工具,模拟用户发送请求,验证接口是否符合设计规范和功能需求的过程。

如何用 python +ddt+excel 实现接口自动化测试

接口自动化测试可以提高测试效率和质量,节省测试成本和时间,保证测试覆盖率和可维护性。

让我带你入门如何用 python +ddt+excel 实现接口自动化测试,请瞧如下内容:

一、准备工作

1. 安装 python 环境

python 是一种简洁、优雅、易学的编程语言,它有丰富的第三方库和社区支持,非常适合用来进行接口自动化测试。安装 python 的3.0以上的版本),并配置好环境变量,以便在命令行中使用 python 命令。

2. 安装相关库

为了进行接口自动化测试,我们需要安装以下几个库:

  • requests:用来发送 HTTP 请求,支持各种方法、参数、头部、身份验证等。

  • xlrd:用来读取 excel 文件中的数据,支持 xls 和 xlsx 格式。

  • openpyxl:用来写入 excel 文件中的数据,支持 xlsx 格式。

  • ddt:用来实现数据驱动测试,可以从 excel 文件中读取多组数据,并生成多个测试用例。

  • unittest:用来编写和执行测试用例,支持断言、前置后置条件、测试套件等。

  • HTMLTestRunner_api:用来生成 HTML 格式的测试报告,支持图表、日志、截图等。

我们可以使用 pip 命令来安装这些库,例如:

pip install requests

二、设计测试

1. 编写 excel 文件

我们需要在 excel 文件中填写接口的相关信息,包括:

  • 接口名称

  • 请求地址

  • 请求方法

  • 请求参数

  • 预期结果

例如:

图片

我们可以将这个 excel 文件保存为 test_data.xlsx,并放在项目的 test_datas 目录下。

2. 封装 excel 操作

为了方便地读取和写入 excel 文件中的数据,我们需要封装一些 excel 操作的函数,例如:

  • 打开表单

  • 获取表头

  • 获取所有数据

  • 写入数据

我们可以将这些函数定义在一个类中,并保存为 excel_handler.py,并放在项目的 Lib 目录下。具体代码如下:

from openpyxl import load_workbook
from openpyxl.worksheet.worksheet import Worksheet

class ExcelHandler():
    '''操作Excel'''
    def __init__(self, file):
        '''初始化函数'''
        self.file = file
    
    def open_sheet(self, sheet_name) -> Worksheet:
        '''打开表单'''
        wb = load_workbook(self.file)
        sheet = wb[sheet_name]
        return sheet
    
    def read_rows(self,sheet_name):
        '''读取除表头外所有数据(除第一行外的所有数据)'''
        sheet = self.open_sheet(sheet_name)
        rows = list(sheet.rows)[1:]
        data = []
        for row in rows:
            row_data = []
            for cell in row:
                row_data.append(cell.value)
            data.append(row_data)
        return data
     def read_key_value(self,sheet_name):
        '''获取所有数据,将表头与内容结合整....'''                ...
        return data

3. 封装 requests 请求

为了方便地发送 HTTP 请求,我们需要封装一些 requests 请求的函数,例如:

  • 初始化 session

  • 发送请求

  • 关闭 session

我们可以将这些函数定义在一个类中,并保存为 requests_handler.py,并放在项目的 Lib 目录下。具体代码如下:

import requests

class HTTPHandler:
    # 初始化
    def __init__(self):
        self.session = requests.Session()
    
    # 定义一个方法,接收访问http请求的方式
    def visit(self, url, method, params=None, data=None, json=None, **kwargs):
        res = self.session.request(method, url, params=params, data=data, json=json, **kwargs)
        try:
            return res.json()
        except ValueError:
            print('return not json')
    
    # 关闭session会话
    def close_session(self):
        self.session.close()

三、执行测试

1. 编写测试用例

我们需要使用 unittest 和 ddt 来编写和执行测试用例,具体步骤如下:

  • 导入相关库和模块

  • 定义一个测试类,继承 unittest.TestCase

  • 定义一个类方法,用来初始化 session 和读取 excel 文件中的数据

  • 使用 @ddt.data 装饰器,传入 excel 文件中的数据

  • 定义一个测试方法,用来发送请求,并断言响应结果是否符合预期

我们可以将这些代码保存为 test_api.py,并放在项目的 test_cases 目录下。具体代码如下:

from Lib.excel_handler import ExcelHandler
from Lib.requests_handler import HTTPHandler
import requests
import ddt
import unittest

data = ExcelHandler('test_datas/test_data.xlsx').read_key_value('Sheet1')

@ddt.ddt
class TestAPI(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.s = HTTPHandler()
    
    @ddt.data(*data)
    def test_api(self,params):
        print('params:%s' % params)
        case_name = params.get('接口名称')
        url = params.get('请求地址')
        args = eval(params.get('请求参数')) if isinstance(params.get('请求参数'), str) else params.get('请求参数')
        method = params.get('请求方法')
        expct_res1 = params.get('预期结果')
        
        # 发起请求,获取返回数据
        result = self.s.visit(url, method, params=args)

        # 分析返回数据
        response_data = result['name']

        
        # 断言响应结果是否符合预期
        self.assertEqual(expct_res1, response_data)

    @classmethod
    def tearDownClass(cls):
       cls.s.close_session()

2. 生成测试报告

我们需要使用 HTMLTestRunner_api 来生成 HTML 格式的测试报告,具体步骤如下:

  • 导入相关库和模块

  • 定义一个测试套件,添加测试用例

  • 定义一个测试报告的文件名和路径

  • 定义一个测试运行器,传入测试报告的文件对象和相关参数

  • 使用测试运行器来运行测试套件

我们可以将这些代码保存为 run.py,并放在项目的根目录下。具体代码如下:

import unittest
from HTMLTestRunner_api import HTMLTestRunner
from test_cases.test_api import TestAPI

# 定义一个测试套件
suite = unittest.TestSuite()
# 添加测试用例
suite.addTest(unittest.makeSuite(TestAPI))

# 定义一个测试报告的文件名和路径
report_file = 'reports/test_report.html'

# 定义一个测试运行器,传入测试报告的文件对象和相关参数
with open(report_file, 'wb') as f:
    runner = HTMLTestRunner(f, title='接口自动化测试报告', description='用例执行情况')
    # 使用测试运行器来运行测试套件
    runner.run(suite)

四、查看结果

运行 run.py 文件后,我们可以在 reports 目录下看到生成的 test_report.html 文件,打开它,我们可以看到以下内容:

图片

我们可以看到,共有 11 个测试用例,通过 6 个,失败 5 个。我们还可以看到每个测试用例的详细信息,包括用例名称、请求地址、请求参数、预期结果、实际结果等。我们还可以看到一些图表、日志、截图等。

这样,我们就完成了用 python +ddt+excel 实现接口自动化测试的过程。

我相信学习不是一朝一夕形成的,学习是一生的事业,坚持不懈,持续进步,为自己创造更美好的未来。

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接【点击文末小卡片免费领取资料文档】

【2024最新版】Python自动化测试15天从入门到精通,10个项目实战,允许白嫖。。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux中重定向是怎么一回事?

Linux中重定向是怎么一回事? 输出重定向追加重定向输入重定向 输出重定向 Linux下一切皆文件,当我们写下echo命令字符串时,相当于在显示器文件中写入数据 而输入echo 字符串 > filename时,相当于把原本应该写入显示器当中的数…

Linux进程控制:进程创建与等待

目录 一、fork函数 1.1fork函数的调用与功能 1.2fork函数的返回值与写实拷贝 1.3fork的常规用法与失败原因 二、进程终止 2.1进程的退出场景和常见退出方法 2.2_exit函数与exit函数 2.2.1_exit函数 2.2.2exit函数 2.3return退出 三、进程等待 3.1wait及waitpid的方法…

ElementUI Form:InputNumber 计数器

ElementUI安装与使用指南 InputNumber 计数器 点击下载learnelementuispringboot项目源码 效果图 el-radio.vue &#xff08;InputNumber 计数器&#xff09;页面效果图 项目里el-input-number.vue代码 <script> export default {name: el_input_number,data() {re…

Lua脚本

1.准备 1.简介 1.Lua是一种轻量小巧的脚本语言&#xff0c;用标准C语言编写并以源代码形式开放 2.目标 1.其设计目的是为了嵌入应用程序中&#xff0c;从而为应用程序提供灵活的扩展和定制功能 3.特点 1.轻量级&#xff1a;用标准C语言编写并以源代码形式开放&#xff0c;编译后…

嵌入式中屏幕能够显示汉字的原理方法

LCD是嵌入式常见设备&#xff0c;如何在LCD上显示汉字和英文&#xff1f;矢量字体和点阵字体有何不同&#xff1f;同一个字符为何有多种编码&#xff1f; GB2312、GB18030指什么&#xff1f;他们之间有关系吗&#xff1f;嵌入式设备如何支持多国语言&#xff1f;从哪里获取字库…

QGIS 矢量对齐工具-VectorBender

VectorBender 是一个QGIS Python 插件&#xff0c;允许转换矢量图层以匹配另一个几何图形。根据定义的输入点的数量&#xff0c;插件选择三种变换类型&#xff1a;平移、均匀或弯曲。 前两个允许快速对齐非地理参考数据&#xff0c;而第三个允许匹配具有复杂的非均匀和非线性变…

ElementUI 组件:Container 布局容器实例

ElementUI安装与使用指南 Container 布局容器 点击下载learnelementuispringboot项目源码 效果图 el-container-example.vue&#xff08;Container 布局容器实例&#xff09;页面效果图 项目里el-container-example.vue代码 <script> export default {name: el_cont…

【Spring Boot 源码学习】BootstrapRegistry 详解

《Spring Boot 源码学习系列》 BootstrapRegistry 详解 一、引言二、往期内容三、主要内容3.1 源码初识3.2 register 方法3.3 registerIfAbsent 方法3.4 isRegistered 方法3.5 getRegisteredInstanceSupplier 方法3.6 addCloseListener 方法3.7 InstanceSupplier 内部接口类3.7…

Python基础小知识:format函数用法

format优点 format是python2.6新增的一个格式化字符串的方法&#xff0c;相对于老版的%格式方法&#xff0c;它有很多优点。 1.不需要理会数据类型的问题&#xff0c;在%方法中%s只能替代字符串类型 2.单个参数可以多次输出&#xff0c;参数顺序可以不相同 3.填充方式十分灵…

【深入浅出SpringCloud原理及实战】「Netflix系列之Hystrix」针对于限流熔断组件Hystrix的回退降级实现方案和机制

针对于限流熔断组件Hystrix的回退降级实现方案和机制 依赖隔离依赖隔离之线程&线程池高延迟请求的例子 线程池的优势线程池的弊端线程池的开销线程池开销 信号量 依赖隔离 Hystrix通过使用『舱壁模式』&#xff08;注&#xff1a;将船的底部划分成一个个的舱室&#xff0c;…

项目01《游戏-03-开发》Unity2D

基于 项目01《游戏-02-开发》Unity2D &#xff0c; 继续制作游戏&#xff1a; 首先要做的时切割人物Idle空闲状态下的动画&#xff0c; 在切割之前我们需要创建一个文件夹&#xff0c;用来存放动画控制器AnimatorContoller&#xff0c; 再创建一个人物控制器文件夹…

沁恒微WCH32v003驱动ST7735S硬件spi+DMA调试小坑

最近项目需要&#xff0c;要用wch32v003驱动ST7735S&#xff0c;用硬件spiDMA方式可以提高屏幕刷新率&#xff0c;但是使用过程遇到一下问题&#xff0c;分享出来&#xff0c;有清楚的大佬可以指点指点。 这篇文章并不是给着急移植程序使用的人看的&#xff0c;因为在赶进度的时…

如果我要访问一个网址,那么在网络中会有哪些过程

访问一个网址是我们日常网络使用中非常常见的操作&#xff0c;背后涉及到一系列精密而复杂的步骤。这个过程包括DNS解析、建立TCP连接、发起HTTP请求、服务器处理请求、服务器响应、浏览器渲染等环节。在这篇文章中&#xff0c;我们将深入探讨这些步骤&#xff0c;并解释它们在…

力扣hot100 跳跃游戏 II 贪心 思维

Problem: 45. 跳跃游戏 II 思路 &#x1f468;‍&#x1f3eb; 参考 每次在上次能跳到的范围&#xff08;end&#xff09;内选择一个能跳的最远的位置&#xff08;也就是能跳到max_far位置的点&#xff09;作为下次的起跳点 &#xff01; Code ⏰ 时间复杂度: O ( n ) O(n…

猫什么时候发腮?性价比高的发腮主食冻干推荐

猫什么时候发腮&#xff1f;发腮是猫咪成长过程中一个重要的体征&#xff0c;也是猫父母们非常关心的问题。想要让猫咪拥有可爱的肉嘟嘟脸型&#xff0c;主人需要在适龄的年龄段加强营养补给&#xff0c;不要错失最佳发腮期。猫什么时候发腮呢&#xff1f;应该怎样喂养才能让猫…

TypeScript实战教程(一):表单上传与后端处理

TypeScript实战教程&#xff08;一&#xff09;&#xff1a;表单上传与后端处理 文章目录 TypeScript实战教程&#xff08;一&#xff09;&#xff1a;表单上传与后端处理一、前言1、TypeScript介绍2、TypeScript的关键特性包括&#xff1a;3、使用场景4、编译过程 二、环境配置…

张维迎《博弈与社会》多重均衡与制度和文化(1)多重均衡问题

什么是多重均衡 我曾经在课堂上做过这样一个实验&#xff1a;随机选择男女两位同学参加一个选数字的游戏。游戏的基本规则为&#xff1a;每一个同学随机地从1到10十个数字中任意选择5个。如果两人选择的数字没有任何重复的话&#xff0c;则每人可以得到50元&#xff1b;如果两人…

不同核函数高斯过程回归算法与不同因子输入情况下对长江流域蒸散发量应用研究_杨梓涵_2023

不同核函数高斯过程回归算法与不同因子输入情况下对长江流域蒸散发量应用研究_杨梓涵_2023 摘要关键词 0 引言1 材料与方法1.1 数据资料1.2 参考作物腾发量( ET0 ) 计算方法1.2.1 FAO&#xff0d;56 Penman&#xff0d;Monteith 模型1.2.2 Hargreaves&#xff0d;Samani 模型1.…

apisix多节点搭建

文章目录 前言一、介绍1. 端口介绍2. APISIX节点介绍3. apisix单机安装配置教程(选看) 二、准备1. 配置集群免密登录2. 搭建etcd集群 三、安装apisix节点1. 复制脚本2. 增加执行权限3. 分发脚本4. 执行脚本5. 配置apisix的etcd集群地址 四、安装apisix-dashboard1. 复制脚本2. …

【GEE】基于GEE批量下载Landsat8 L1C数据(整幅)

之前发过一篇使用GEE下载Landsat8的文章&#xff0c;然后有很多小伙伴私信我各种问题&#xff0c;如L1C、L2数据代码怎么修改&#xff0c;如何镶嵌&#xff0c;如何去云、 如何裁剪等一系列问题。正好快过年了&#xff0c;手头的事也没有多少了&#xff0c;所以这两天整理了一下…