Python利用Excel读取和存储测试数据完成接口自动化教程

http_request2.py用于发起http请求

#读取多条测试用例#1、导入requests模块import requests#从 class_12_19.do_excel1导入read_data函数from do_excel2 import read_datafrom do_excel2 import write_datafrom do_excel2 import count_case#定义http请求函数COOKIE=Nonedef http_request2(method,url,data):if method=='get':print('发起一个get请求')result=requests.get(url,data,cookies=COOKIE)else:print('发起一个post请求')result=requests.post(url,data,cookies=COOKIE)return result #返回响应体# return result.json() #返回响应结果:结果是字典类型:{'status': 1, 'code': '10001', 'data': None, 'msg': '登录成功'}#从Excel读取到多条测试数据sheets=['login','recharge','withdraw']for sheet1 in sheets:max_row=count_case(sheet1)print(max_row)for case_id in range(1,max_row):data=read_data(sheet1,case_id)print('读取到第{}条测试用例:'.format(data[0]))print('测试数据 ',data)#print(type(data[2]))#调用函数发起http请求result=http_request2(data[4],data[2],eval(data[3]))print('响应结果为 ',result.json())if result.cookies:COOKIE=result.cookies#将测试实际结果写入excel#write_data(case_id+1,6,result['code'])write_data(sheet1,case_id+1,7,str(result.json()))#对比测试结果和期望结果if result.json()['code']==str(data[5]):print('测试通过')#将用例执行结果写入Excelwrite_data(sheet1,case_id+1,8,'Pass')else:write_data(sheet1,case_id+1,8,'Fail')print('测试失败')

do_excel2.py完成对excel中用例的读、写、统计

# 导入load_workbookfrom openpyxl import load_workbook#读取测试数据#将excel中每一条测试用例读取到一个列表中#读取一条测试用例——写到一个函数中def read_data(sheet_name,case_id):# 打开excelworkbook1=load_workbook('test_case2.xlsx')# 定位表单(test_data)sheet1=workbook1[sheet_name]print(sheet1)test_case=[] #用来存储每一行数据,也就是一条测试用例test_case.append(sheet1.cell(case_id+1,1).value)test_case.append(sheet1.cell(case_id+1,2).value)test_case.append(sheet1.cell(case_id+1,3).value)test_case.append(sheet1.cell(case_id+1,4).value)test_case.append(sheet1.cell(case_id+1,5).value)test_case.append(sheet1.cell(case_id+1,6).value)return test_case #将读取到的用例返回#调用函数读取第1条测试用例,并将返回结果保存在data中# data=read_data(1)# print(data)#将测试结果写会exceldef write_data(sheet_name,row,col,value):workbook1=load_workbook('test_case2.xlsx')sheet=workbook1[sheet_name]sheet.cell(row,col).value=valueworkbook1.save('test_case2.xlsx')#统计测试用例的行数def count_case(sheet_name):workbook1=load_workbook('test_case2.xlsx')sheet=workbook1[sheet_name]max_row=sheet.max_row #统计测试用例的行数return max_row

test_case2.xlsx存储​​​​​​测试用例

 

补充知识:python用unittest+HTMLTestRunner+csv的框架测试并生成测试报告

直接贴代码:

import csv # 导入scv库,可以读取csv文件from selenium import webdriverimport unittestfrom time import sleepimport timeimport osimport HTMLTestRunnerimport codecsimport sysdr = webdriver.Chrome()class testLo(unittest.TestCase):def setUp(self):passdef test_login(self):'''登陆测试'''path = 'F:\\Python_test\\'# 要读取的scv文件路径my_file = 'F:\\pythonproject\\interfaceTest\\testFile\\ss.csv'# csv.reader()读取csv文件,# Python3.X用open,Python2.X用file,'r'为读取# open(file,'r')中'r'为读取权限,w为写入,还有rb,wd等涉及到编码的读写属性#data = csv.reader(codecs.open(my_file, 'r', encoding='UTF-8',errors= 'ignore'))with codecs.open(my_file, 'r', encoding='UTF-8',errors= 'ignore') as f:data=csv.reader((line.replace('\x00','') for line in f))# for循环将读取到的csv文件的内容一行行循环,这里定义了user变量(可自定义)# user[0]表示csv文件的第一列,user[1]表示第二列,user[N]表示第N列# for循环有个缺点,就是一旦遇到错误,循环就停止,所以用try,except保证循环执行完print(my_file)for user in data:print(user)dr.get('https://passport.cnblogs.com/user/signin')# dr.find_element_by_id('input1').clear()dr.find_element_by_id('input1').send_keys(user[0])# dr.find_element_by_id('input2').clear()dr.find_element_by_id('input2').send_keys(user[1])dr.find_element_by_id('signin').click()sleep(1)print('\n' + '测试项:' + user[2])dr.get_screenshot_as_file(path + user[3] + ".jpg")try:assert dr.find_element_by_id(user[4]).texttry:error_message = dr.find_element_by_id(user[4]).textself.assertEqual(error_message, user[5])print('提示信息正确!预期值与实际值一致:')print('预期值:' + user[5])print('实际值:' + error_message)except:print('提示信息错误!预期值与实际值不符:')print('预期值:' + user[5])print('实际值:' + error_message)except:print('提示信息类型错误,请确认元素名称是否正确!')def tearDown(self):dr.refresh()# 关闭浏览器dr.quit()if __name__ == "__main__":# 定义脚本标题,加u为了防止中文乱码report_title = u'登陆模块测试报告'# 定义脚本内容,加u为了防止中文乱码desc = u'登陆模块测试报告详情:'# 定义date为日期,time为时间date = time.strftime("%Y%m%d")time = time.strftime("%Y%m%d%H%M%S")# 定义path为文件路径,目录级别,可根据实际情况自定义修改path = 'F:\\Python_test\\' + date + "\\login\\" + time + "\\"# 定义报告文件路径和名字,路径为前面定义的path,名字为report(可自定义),格式为.htmlreport_path = path + "report.html"# 判断是否定义的路径目录存在,不能存在则创建if not os.path.exists(path):os.makedirs(path)else:pass# 定义一个测试容器testsuite = unittest.TestSuite()# 将测试用例添加到容器testsuite.addTest(testLo("test_login"))# 将运行结果保存到report,名字为定义的路径和文件名,运行脚本report = open(report_path, 'wb')#with open(report_path, 'wb') as report:runner = HTMLTestRunner.HTMLTestRunner(stream=report, title=report_title, description=desc)runner.run(testsuite)# 关闭report,脚本结束report.close()

csv文件格式:

备注:

使用python处理中文csv文件,并让execl正确显示中文(避免乱码)设施编码格式为:utf_8_sig,示例:

'''''将结果导出到result.csv中,以UTF_8 with BOM编码(微软产品能正确识别UTF_8 with BOM存储的中文文件)存储'''#data.to_csv('result_utf8_no_bom.csv',encoding='utf_8')#导出的结果不能别excel正确识别data.to_csv('result_utf8_with_bom.csv',encoding='utf_8_sig')
总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

     视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。    

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解Redis数据结构

目录 Redis的单线程 Redis单线程快的原因 Redis 单线程处理高并发客户端连接 Redis数据结构 字符串(String) 常用方法 数据结构 哈希表(Hash) 常用方法 数据结构 列表(List) 常用方法 数据结构…

微信小程序之WXML 模板语法之数据绑定、事件绑定、wx:if和列表渲染

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

Java深度解析:类的生命周期与类加载过程

文章目录 加载阶段连接阶段-验证连接阶段-准备连接阶段-解析初始化阶段使用卸载 最近在学习Java 虚拟机,学到了类的声明周期,有些比较难理解的点,特地来总结一下。 类的生命周期从大体上来看的话,有五个阶段,分别是加载…

十八周周报

文章目录 摘要文献阅读3D reconstruction of human bodies from single-view and multi-view images: A systematic review简介研究方法搜索策略选择标准搜索结果 三维重建方法单个视图中使用的技术基于参数化人体模型的回归基于非参数人体模型的回归 多个视图中使用的技术基于…

ARMv8-AArch64 的异常处理模型详解之异常类型 Exception types

异常类型详解 Exception types 一, 什么是异常二,同步异常(synchronous exceptions)2.1 无效的指令和陷阱异常(Invalid instructions and trap exceptions)2.2 内存访问产生的异常2.3 产生异常的指令2.4 调…

使用残差网络识别手写数字及MNIST 数据集介绍

MNIST 数据集已经是一个几乎每个初学者都会接触的数据集, 很多实验、很多模型都会以MNIST 数据集作为训练对象, 不过有些人可能对它还不是很了解, 那么今天我们一起来学习一下MNIST 数据集。 1.MNIST 介绍 MNIST 数据集来自美国国家标准与技术研究所, National Institute of S…

Docker 47 个常见故障的原因和解决方法

【作者】曹如熙,具有超过十年的互联网运维及五年以上团队管理经验,多年容器云的运维,尤其在Docker和kubernetes领域非常精通。 Docker是一种相对使用较简单的容器,我们可以通过以下几种方式获取信息: 1、通过docker r…

HNU-编译原理-实验1-利用FLEX构造C-Minus-f词法分析器

编译原理实验1利用FLEX构造C-Minus-f词法分析器 计科210X 甘晴void 202108010XXX 实验要求 详细的实验项目文档为 https://gitee.com/coderwym/cminus_compiler-2023-fall/tree/master/Documentations/lab1 学习和掌握词法分析程序的逻辑原理与构造方法。通过 FLEX 进行实…

[陇剑杯 2021]webshell

[陇剑杯 2021]webshell 题目做法及思路解析(个人分享) 问一:单位网站被黑客挂马,请您从流量中分析出webshell,进行回答: 黑客登录系统使用的密码是_____________。 题目思路: 分析题目&…

【蓝桥备赛】求阶乘

题目链接 求阶乘 个人想法 之前做过计算阶乘结果后面有几个0的题目,这里看到本题之后,很快就有思路了。想要得到阶乘结果有几个0,首先尾数后面的0,最小肯定是因为因子中存在10。然后,10如何得来呢? 2 * …

【面试突击】硬件级别可见性问题面试实战(中)

🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复…

有线桥接|Wifi隔了一堵墙就没信号?房间的网线口利用起来,让房间死角也有网!

前言 本篇文章是路由器有线桥接主路由,起到AP(热点)的效果 上次发布的无线桥接,使用的前提是需要把旧路由放置在主路由的信号范围内,这极大限制了桥接路由器的放置位置。 如果隔了一堵墙基本上就无法连接Wifi&#x…