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

news2024/12/26 13:12:40

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

🍅 关注公众号【互联网杂货铺】,回复 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个项目实战,允许白嫖。。。

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

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

相关文章

计算机网络——网络层(3)

计算机网络——网络层(3) 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU)1 网络层——控制平面因特网中自治系统内部的路由选择总括考虑因素总结 ISP之间的路由选择:BGP考虑因素总结 SDN控制层面重要组件和功能总结 ICMP主要功能和特点…

Mysql单行函数练习

数据表 链接:https://pan.baidu.com/s/1dPitBSxLznogqsbfwmih2Q 提取码:b0rp --来自百度网盘超级会员V5的分享 单行函数练习 单行函数(一行数据返回一个结果) #1.显示系统时间(注:日期时间) #2.查询员工工号,姓名,工资以及提高百分之20后的结果(new…

消费观念升级,品牌又有哪些新的营销玩法?

一方面在传统消费升级的背景下,国民的消费预期不断改善,购买力持续增强,另一方面,随着Z时代成为消费时代的主力军,他们的需求推动了消费行业向个性化、细分化、多样化的方向发展。那在这一消费环境下,品牌又…

深入解析企业培训教育系统开发:源码探秘与技术实践

当下,为了提高员工的技能水平、促进团队的协同合作,企业培训教育系统成为了一个不可或缺的组成部分。本篇文章,小编将为大家讲述企业培训教育系统的开发,揭示其源码背后的奥秘以及相关的技术实践。 一、概述 企业培训教育系统通常…

时间序列预测模型实战案例(三)(LSTM)(Python)(深度学习)时间序列预测(包括运行代码以及代码讲解)

目录 引言 LSTM的预测效果图 LSTM机制 了解LSTM的结构 忘记门 输入门 输出门 LSTM的变体 只有忘记门的LSTM单元 独立循环(IndRNN)单元 双向RNN结构(LSTM) 运行代码 代码讲解 引言 LSTM(Long Short-Term Memory)是一种常用的循环神经网络&a…

本地搭建Plex私人影音网站并结合内网穿透实现公网远程访问

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

网址的静态码和活码怎么做?学会在线制作更快捷

现在获取信息大多都是在手机上搜索的,所以将现在很多推广信息的链接都会选择生成二维码之后,通过扫码在手机上获取传递的信息,那么如何将网址制作二维码使用呢?其实方法很简单,接着网址二维码生成器就可以轻松完成在线…

小程序定制开发前,应该考虑些什么?

引言 在移动互联网时代,小程序已经成为许多企业和个人推广业务、提供服务的理想平台。然而,在进行小程序定制开发之前,开发者和业务方需要细致入微地考虑一系列关键因素,以确保最终的小程序既能满足用户需求,又能够顺…

【附安装包】Java/JDK介绍、下载、安装、配置与使用(保姆级教程)

目录 一、概述 1、Java历史 2、Java介绍(JDK、JRE、JVM) 3、Java运行机制 4、Java跨平台性 5、JDK版本选择 二、下载安装 1、JDK下载 2、JDK安装 三、配置环境变量 四、测试与使用 1、测试 2、使用 一、概述 1、Java历史 Java语言诞生于SU…

R语言韦恩图的绘制

韦恩图是一种用于展示多个集合之间的交集和并集关系的图形工具。它由英国数学家约翰韦恩于1880年首次引入,因此得名为"韦恩图"。韦恩图利用圆形的重叠区域来表示集合之间的交集,而圆形的非重叠区域则表示各个集合的独立部分。 韦恩图通常用于…

项目管理中,如何识别和管理依赖关系?

项目过程中,很少有任务是独立存在的。因此,在整个项目管理过程中查看完整的项目时间表、依赖关系和所需资源尤为重要。这将有助于团队直观地了解项目进展的全貌,并评估何时以及如何分配任务和资源。 如何识别项目依赖关系? 就像…

matlab中的图窗属性和坐标轴的属性

图窗的Position和Outerposition Position 指定窗口的尺寸和窗口在屏幕中的位置。 Outerposition 指定窗口外轮廓的大小和位置。 两者都是用一个4维向量来定义,格式为[左 底 宽 高]。 可通过set函数修改Position和Outerposition,如下:在屏幕左…

小程序能做视频二维码吗?具体的制作步骤有哪些?

当我们用手机拍摄视频之后,想要快速的将视频传播,除了直接群发或者发送到聊天群的方式之外,现在很多人会将视频生成二维码图片之后,将二维码分享给其他人扫码看视频。 选择这种方式的原因在于,现在活码二维码类型可以…

牛客——字符串(尺取法与滑动窗口)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 小N现在有一个字符串S。他把这这个字符串的所有子串都挑了出来。一个S的子串T是合法的,当且仅当T中包含了所有的小写字母。小N希望知道所有的合法的S的子串中&#xff0c…

喜讯| 触想智能荣获2023年度“技术创新·金品奖”!

触想智能又迎开年喜讯!1月25日,由数字标牌网联合视听网举办的2023年度数字标牌及视听行业年度荣誉评选名单重磅揭晓,触想智能扫码安卓工业平板一体机(TPC-A14)斩获2023年度技术创新金品奖,标志着触想智能品牌创新与技术实力再获专业权威机构认…

Backtrader 文档学习- Broker - Cheat-On-Open

Backtrader 文档学习- Broker - Cheat-On-Open 1.概述 V1.9.44.116增加了Cheat On Open的支持。对于全押的人来说,这似乎是一个必需的功能,用bar的收盘价后进行计算,希望与开盘价相匹配。 当开盘价差距(上涨或下跌,取…

虚拟机(VMware)ubuntu16.04 直接连接网口设备 USRP 吊舱

编辑虚拟网络编辑器 点击之后 选择网卡之后,点击确定。 电脑配置 使用了:192.168.2.56 虚拟机内部配置 和PC的配置一致

全链跨链协议 Omnity|章鱼网络构建真正 100% 去中心化的跨链网络

2024年1月31日,章鱼网络正式发布全链跨链协议 Omnity 的 Lightpaper,支持比特币铭文、符文,以及以太坊、Layer2 和应用链的跨链互操作,计划于2024年4月发布。 Omnity Lightpaper: https://docs.google.com/document/d/…

人工智能网络安全挑战赛(AIxCC):超亿元大奖等你来拿!

2023年底,DARPA开启了一项前所未有的挑战——人工智能网络安全挑战赛(AIxCC),旨在通过技术竞赛探索AI时代下网络安全的新格局。该赛事希望孕育出一种创新的网络安全通用人工智能(AGI)系统,该系统…

3款日本云服务器推荐,最低一款只需15.8元

当今的互联网时代,云服务器已经成为企业和个人进行业务部署和数据存储的重要工具。而在全球范围内,日本云服务器市场也越来越受到关注。今天,我们将为大家推荐3款日本云服务器,最低的一款仅需15.8元/月。 1.恒创科技 一家非常受…