每日热议!领导看了给你加薪!python +ddt+excel 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座!

2023-06-07 19:19:49 来源:博客园

打印 放大 缩小

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

如何用 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_workbookfrom openpyxl.worksheet.worksheet import Worksheetclass 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 requestsclass 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 ExcelHandlerfrom Lib.requests_handler import HTTPHandlerimport requestsimport ddtimport unittestdata = ExcelHandler("test_datas/test_data.xlsx").read_key_value("Sheet1")@ddt.ddtclass 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 unittestfrom HTMLTestRunner_api import HTMLTestRunnerfrom 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 实现接口自动化测试的过程。

总结

以上就是勇哥今天为各位小伙伴准备的内容,如果你想了解更多关于Python自动化测试的知识和技巧,欢迎关注:

我的公众号:百态测试

博客(奈非天的主页 - 博客园 (cnblogs.com))

我会不定期地分享更多的精彩内容。感谢你的阅读和支持!

本文来自博客园,作者:奈非天,转载请注明原文链接:https://www.cnblogs.com/Nephalem-262667641/p/17460169.html

关键词:

责任编辑:ERM523

相关阅读

精彩推送

天天即时看!土耳其里拉持续贬值 再创历史新低 西南证券(600369)6月7日主力资金净卖出1136.53万元
【时快讯】光大银行举办推进粮食安全暨种业振兴会议 环球聚焦:《街头霸王6》全球销量突破百万套 系列销量超5千万套
每日热议!领导看了给你加薪!python +ddt+excel 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座! 和胜股份:在项目研发前沿领域一直与宁德时代深度合作-今亮点
今日热闻!悦达起亚入选“私家车新车上牌免查验试点企业” 汉马科技(600375)6月7日主力资金净卖出1212.85万元
环球今热点:昊华科技(600378)6月7日主力资金净卖出1061.15万元 宁沪高速(600377)6月7日主力资金净买入663.37万元
全球滚动:理想汽车北京顺义工厂最早7月投产?官方回应:确实在积极准备中 七旬村民被村支书打住院,数月无人管?当地副镇长:正处理
预估2024年苹果Vision Pro出货量约20万台 后续消费款才是主打|全球讯息 景津装备:公司产品可用于养殖行业的屠宰、粪便污水及沼渣沼液处理等 世界热点
卡霍夫卡水电站大坝遭破坏,会有哪些影响? 伟思医疗:公司运动康复机器人产品线符合神经康复智能化、标准化的康复需求 属于国内领先水平-全球热闻
2千元装个增程器,宝骏悦也的新技术,抄袭老年代步车? 浙江婺城“输血+造血”,助力四川道孚铺就致富路-环球即时看
海关总署:前5个月民营企业进出口总额同比增长13.1%-世界视点 提醒!端午节假期首日火车票6月8日开售
焦点热讯:青海春天(600381)6月7日主力资金净卖出35.96万元 当前关注:婴儿皮肤有白块是白癜风吗?白癜风会遗传吗?
北京电信多条千兆专线护航通信展览会 全力做好通信保障服务 2023年6月7日纯苯国内市场动态-环球观焦点
新乡投资集团将发行10亿元中票 申购区间3.20%~4.50% 全球球精选 焦点要闻:受贿1992615.31元!陈克祥一审获刑三年半
当前热议!江南高纤(600527)6月7日主力资金净买入42.56万元 BBA车主的下一台车为什么不能是蔚来?比如ES6? | 吴佩频道
岳阳兴长:公司惠州项目预计于2023年9月投产-热点 环球看热讯:4399欢乐斗地主第7期_4399欢乐斗地主
information是什么意思_InstallShield Installation Information是什么意思_全球热闻 世界视讯!摇橹船科技中标西安交通大学科技部人工智能重大专项!
快消息!某酒店有若干间空房_某宾馆有若干间标准房 今亮点!“既独具特色,又可与世界对话”:摩尔多瓦前总统彼得·鲁钦斯基来访,盛赞郎酒庄园之美
恩捷股份:公司现有隔膜产品适用于储能电池 环球热推荐 内蒙古粮食作物播种超亿亩 用节水农业打造“塞上粮仓” 世界简讯
再突破!华为发布GaussDB数据库,给世界一个更优选择 河北为小麦晾晒做足充分准备 确保颗粒归仓-热门
kappa是哪个国家的品牌_kap cad2013怎么快速标注xy坐标_CAD中怎么标注点的XY坐标 如X Y 全球微动态
大型邮轮项目团队攻克多项核心技术 形成一系列科技创新成果 800万元日元等于多少人民币_800万日元等于多少人民币
环球聚焦:各地出台全方面服务保障 营造温馨、舒适高考环境 金坛到常州总站汽车时刻表查询_常州站和常州汽车总站
世界热文:社会公德的主要内容_社会公德的主要内容是什么 世界今日报丨清除上网痕迹和清除缓存一样吗_清除上网痕迹
冰心繁星一五九心中的风雨指什么_心中的风雨指什么_每日视点 第十五届“全国文化企业30强”发布 全球头条
前4月广东自贸试验区进出口同比增长22.3% 速讯:为了“保壳”金科再搞“小动作”,股票于7日起成功停牌
环球滚动:附近火车售票处电话_附近火车售票处 征和工业:公司浙江项目目前已签署《国有建设用地使用权出让合同》,资金来源为公司自有或自筹资金(包括但不限于通过银行贷款、股权融资等方式)-环球即时
【收评】豆油日内上涨0.03% 机构称油脂反弹乏力 环球热点评!@所有人,奉贤区商业秘密保护示范单位开始申报!
看点:下滑18%!新基金发行遇冰点? 2023上海青浦咖啡文化周丨在练塘乡村的稻田边喝咖啡,你要的“诗和远方”都有!
金埔园林:“金埔转债”于6月8日配售及网上申购_天天即时 彭文生:美联储6月或“跳过”加息 年内降息概率较小
探索“毗邻党建”新模式 宝山罗泾镇“牵手”太仓浏河打造“北上海泾彩乡村” 当前速讯 永新股份:公司海外业务仍处于扩张期
天士力:获得《药物临床试验批准通知书》-天天热点 【收评】锰硅日内下跌1.66% 机构称硅锰钢招和盘面价格均较为承压
环球播报:交强险多少钱2023年,交强险价格表2023? 当前播报:[路演]*ST民控:如果有优质股权契合公司的发展 将考虑通过控股或参股等方式参与
天天百事通!《中国奇谭》快闪打卡区来了 主题“小卖部”在上海影城开业! 华铭智能:公司的自动检票机上很早就开发了AI功能的集成 包括指纹 掌静脉 虹膜和人脸等功能
最新!2023年上海高考语文写作题来啦-信息 世界快报:[路演]汇隆活塞:近三年主营平均毛利率为46.06%
全球观察:机构:房企融资规模仍在下降 海外债有新发 建科机械:智能化钢筋加工配套软件和智慧工厂管理软件已在多家大型重点客户和项目使用 新动态
夏季养心应该这么做,来看 多空相互影响 金价延续震荡 热点
欧盟将对实施“经济勒索”的国家加征关税是针对中国?外交部回应 中国长城收年报问询函 要求说明业绩对政府补助是否存在重大依赖 今日讯
每日速讯:电子后视镜新国标将于7月实施 行业市场规模有望超60亿 【视频】污水未经处理排入泾河!陕西一煤矿被罚62万元,4人被刑事拘留,2人被行政拘留
西康高铁建设持续进行 2023PT展 | 园区新品介绍深度解读
快资讯:宇邦新材:公司的MBB焊带和SMBB焊带分别主要适用于P型的PERC电池和N型的Topcon电池 亚洲艺术体操锦标赛中国队包揽集体项目金牌,上海运动员郭崎琪参赛_每日看点
北京拟规定:已购共有产权住房家庭取得证书未满5年 不允许转让产权份额 世界实时 焦点热文:[路演]青岛双星:“稀土金”轮胎目前已实现对主机厂的配套 在公司替换市场的销量目前约占10%
全球观察:【天气】雷雨再突袭,雨水多但梅雨还没来…… 澳优出售新西兰奶粉工厂 买方为伊利全资子公司
海澜之家(600398)6月7日主力资金净卖出259.65万元 天山路街道为老人推出免费的“爱心下午茶”|今日快看
对中国F1车手周冠宇使用歧视性词汇“Chinaman”,英国天空体育道歉 每日消息 注意!森特股份将于6月28日召开股东大会
公司在数据管理方面有何优势?优博讯回应-今日热门 当前聚焦:金店回收黄金多少钱一克(2023年6月7日)
“高考分特值钱”!酒企花样营销频出,能否实现淡季不淡? 天天观焦点:一箭26星!力箭一号刷新我国一箭多星最高纪录
天天速递![路演]汇隆活塞:产品质量处行业内先进水平 多次获评“优秀供应商” 董事长朱保全两日增持万物云(02602)12.84万股 涉资355.1万港元
每日速读!老凤祥回收黄金多少钱一克(2023年6月7日) 关注“三夏”丨定州多措并举确保“三夏”生产高效有序
【世界播资讯】安徽作家许多余获黎巴嫩国际文学奖 金沙酒业总经理范世凯向经销商喊话
每日热讯![路演]青岛双星:新推出的“增力轮”首批将优先用于取代矿山巨型轮胎和轮辋 河钢集团6月硅锰首轮询盘6850元/吨 今日报