全球新动态:领导看了给你加薪!python +ddt+excel 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座!

2023-06-08 02:36:06 来源:博客园

打印 放大 缩小

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

如何用 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

相关阅读

精彩推送

2023长春消夏艺术节6月9日开幕 GaussDB(DWS)查询过滤器原理与应用_全球微头条
焦点讯息:光大银行举办推进粮食安全暨种业振兴会议 焦点信息:受贿1992615.31元!陈克祥一审获刑三年半
雷雨大风+冰雹+龙卷!黑龙江省发布龙卷预警 天天观点 国恩股份:子公司国骐光电专注于光学级导光板、扩散板、膜片材料开发、光学模组设计及成套产品的研发、生产和销售
[老鹰表达力]总有人会挑你的刺|天天快报 全球新动态:领导看了给你加薪!python +ddt+excel 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座!
江西:118家法院少年法庭全覆盖 非学科类校外培训市场价格纳入监测预警 严查价格违规行为
携程联合天津航空发布“京朋冀友 从津飞”空铁联运产品 天天日报 快消息!亚航低成本航空复苏有道
消息!贝莱德中国区负责人汤晓东离职 陈蕙兰将接管在岸业务 各地出台全方面服务保障 营造温馨、舒适高考环境
华立股份06月07日主力资金大幅流出 大晟文化06月07日主力资金大幅流出 全球速递
海鸥股份:公司所属行业为通用设备制造 新中港06月07日主力资金大幅流出|看点
当前短讯!奥海科技:公司充电枪除了供应于大客户之外,在自主品牌的线上旗舰店也有售卖 天奥电子:公司磁力仪产品的研发,主要应用于量子测量领域 环球动态
每日简讯:Cupra Ateca凑型SUV提供动力的2.0升涡轮增压四缸现在拥有360PS 相爱十年主题曲爱的箴言-相爱十年主题曲 全球报道
【收评】豆油日内上涨0.03% 机构称油脂反弹乏力-今日要闻 广汇汽车:2022年,公司在新能源汽车销售和服务方面,借助自身在行业内的影响力,积极参与新能源市场布局
【收评】锰硅日内下跌1.66% 机构称硅锰钢招和盘面价格均较为承压-每日观察 618哪款千元机值得买?4年流畅不卡顿,OPPO K11x配置均衡价格实惠 全球时讯
杰创智能:公司暂无人脑工程相关技术|每日关注 环球简讯:突发,闪崩跌停
最高人民法院关于继母与生父离婚后仍有权要求已与其形成抚养关系的继子女履行赡养义务的批复_对于最高人民法院关于继母与生父离婚后仍有权要求已与其形成抚养关系的继子女履行赡养义务的批复简单介绍|今日看点 【天天聚看点】手机银行系统故障屡发的背后:大手笔投入 但使用痛点仍存
三国志11修改器添加技能-三国志11修改器pkme 如何取消ppt动画效果自动播放-如何取消ppt动画效果-热议
电影《速度与激情10》票房破9亿 焦点短讯!最高人民法院关于胡骥超、周孔昭、石述成诉刘守忠、遵义晚报社侵害名誉权一案的函_对于最高人民法院关于胡骥超、周孔昭、石述成诉刘守忠、遵义晚报社侵害名誉权一案的函简单介绍
简述企业分析市场营销的意义-简析企业分析市场营销环境的意义 商务预报:5月29日至6月4日生产资料价格略有下降|今日热门
“书香指南文化”董事长杨巩显:做弘扬优秀传统文化的先行者 天天快消息 河北省张家口市万全区卫健局:培训预防接种人员 加强预防接种管理 天天要闻
最高人民法院关于能否向境外当事人的诉讼代理人直接送达法律文书问题的答复_对于最高人民法院关于能否向境外当事人的诉讼代理人直接送达法律文书问题的答复简单介绍 @端午节有出行计划的小伙伴们 该买火车票啦!
二阳状况出现新冠长期存在 连花清瘟适合家庭常备 注意!概伦电子将于6月28日召开股东大会|世界球精选
江西:118家法院少年法庭全覆盖 天天讯息 百度高级搜索引擎文件-百度高级搜索引擎|世界微资讯
和林微纳:公司主要为NVIDIA供应中高端FT测试探针及相关零组件-当前关注 靖江“智慧”养老开启新模式-全球快讯
注意!两面针将于6月28日召开股东大会 丰原药业:公司没有顺铂产品 实时
天天微头条丨逾期多长时间上征信 逾期以后怎么补救 波音公司回应787飞机发现问题:影响近期交付 当前独家
海南橡胶:公司合同采用书面方式签署|世界快消息 山东滨州:努力让残疾人“好就业、就好业”
商务预报:5月29日至6月4日生产资料价格略有下降_世界短讯 环球热议:长征手抄报内容(长征手抄报)
【收评】锰硅日内下跌1.66% 机构称硅锰钢招和盘面价格均较为承压 当前热文:【收评】橡胶日内上涨1.94% 机构称橡胶基本面缺乏指引 宏观面主导胶价走势
跌跌不休 创业板再创年内新低!借基抄底注意这三点 焦点资讯 油价欲振乏力 减产效应为何仅“一日游”?
朗迪集团:高炎康及其一致行动人持有公司股份累计质押830万股 广东省商务厅张劲松:近三年广东自贸试验区进出口总额年均增长超过25%
收评:两市震荡分化沪指小涨 通信服务板块走强-焦点资讯 2023年高考全国甲卷作文命题思路与解析
【环球聚看点】Prada和Zegna收购针织品公司Fedeli少数股权 6月7日美棉M1-1/8到港价涨67元/吨 报16518元/吨 微资讯
饿了么关联公司法定代表人变更 方永新接替王星 今日成交额最高的信用债为“23安交01”
播报:上海市购房积分怎么查_上海购房积分哪里查 宜兴新晶亿纺织有限公司-每日精选
内蒙古粮食作物播种超亿亩 用节水农业打造“塞上粮仓” 阿瓦提县举办2023年“六五世界环境日”主题宣传活动 世界热点
天天视点!美迪凯:第二大股东近期累计减持5%公司股份 前脸更加凌厉,雷克萨斯TX最新预告图公布
保价到年底,哈弗枭龙系列下订立享2000元抵8000元_每日热点 卓创资讯:二季度全国淘汰鸡价格同比料由涨转跌|世界微资讯
氧化铝6月19日期货挂牌交易 后市铝价走向如何? 23旭越惠诚2优先B票面利率为2.6200%
EV6 GT将于8月上市,起亚City Store重庆展厅正式开业-环球时讯 环球观焦点:先达股份:年产1000吨咪唑烟酸、3000吨农药中间体项目试生产
[老鹰表达力]总有人会挑你的刺 当前最新:悦达起亚入选“私家车新车上牌免查验试点企业”
全球实时:七步成诗的主人公是谁_七步成诗的由来和它的意思 23安徽债49今日发布发行公告
提高化解矛盾纠纷能力!山西全省四级综治中心矛盾化解能力提升网上研讨培训开班_天天新消息 天天速读:断章卞之琳赏析简短_断章卞之琳赏析
今日看点:东方电气国内单机容量最大冲击式水电机组完成国产化改造 焦点!3部作品获第十三届中国舞蹈“荷花奖”古典舞奖
【全球新视野】手机问题:vivoS9e怎么开启5G 有六朝古都之称的是哪个城市_有六朝古都之称的是
节前取现日!有人提前跑了? 山西潞安工程公司:充填开采提速提效 日充填量创新高
ATFX:远期售汇存款保证金上调20,人民银行稳汇率意图明显 狡黠的意思是_jiaojie狡黠的意思
高银金融(00530):呈请聆讯已押后至7月21日|天天简讯 力鼎光电06月07日主力资金大幅流出_每日看点
世界播报:吉视传媒:公司集团客户业务在畜牧领域,2022年中标了长春市绿色循环畜牧产业示范园数字化肉牛产业信息平台项目,跟进了梅河口、延吉、珲春、梨树、公主岭等肉牛信息化平台建设项目 城市传媒:公司和上海爱美联合出品电影《好像也没那么热血沸腾》
华塑科技06月07日主力资金大幅流出 【速看料】*ST越博与财务总监徐方伟收警示函 业绩预告两度不准
世界短讯!凡拓数创06月07日主力资金大幅流出 金桥信息06月07日主力资金大幅流出 全球观热点