python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读取excel是不能对其进行操作的:xlrd.open_workbook()方法返回xlrd.Book类型,是只读的,不能对其进行操作。而xlwt.Workbook()返回的xlwt.Workbook类型的save(filepath)方法可以保存excel文件。(参考博客:https://www.cnblogs.com/liuyang92/p/7492336.html)

因为是对已经存在的excel文件(也就是接口测试用例)进行写操作,所以要把测试结果写进excel文件,需要用到xlutils(依赖于xlrd和xlwt)提供复制excel文件内容和修改文件的功能。

1.先看一个demo:

# coding:utf-8

import xlrd
from xlutils.copy import copy # 导入xlutils的copy方法 file = 'E:\InterfaceTest_Framework\excel_json_demo\demo3.xlsx' # 文件路径
data = xlrd.open_workbook(file) # 定义一个excel文件的workbook对象
print('data的类型为:', type(data))
data_copy = copy(data) # 获取data的copy对象
print('data的copy对象类型为:', type(data_copy))
sheet_copy = data_copy.get_sheet(0) # 从data_copy对象中获取第一个sheet对象 sheet_copy.write(1, 11, '测试写入内容') # 向sheet的某个单元格写入值
data_copy.save(file) # 写入完成后保存data的copy对象

下面是excel文件运行前后对比图,可以看到在保留原文件内容不变的情况下,写入了新的值

2.接下来,把向excel中写入数据的操作封装起来

在之前的操作excel文件的类中(handle_excel.py)加一个写入数据的方法:

    # 向某个单元格写入数据
def write_value(self, row, col, value):
data = xlrd.open_workbook(self.file) # 打开文件
data_copy = copy(data) # 复制原文件
sheet = data_copy.get_sheet(0) # 取得复制文件的sheet对象
sheet.write(row, col, value) # 在某一单元格写入value
data_copy.save(self.file) # 保存文件

主函数调整:

# coding:utf-8

from base.run_method import RunMain
from util.handle_excel import *
from util.common import CommonUtil
import json class RunTestCase:
def __init__(self):
self.Runmain = RunMain() # 实例化调用get/post请求对象
self.data = HandleExcel() # 实例化操作excel文件对象
self.common = CommonUtil() # 实例化判断实际结果是否与预期结果一致 def go_run(self):
rows_count = self.data.get_rows() # 获取excel行数
for i in range(1,rows_count): # 利用行数进行迭代处理每个接口
url = self.data.get_value(i, get_url()) # 循环获取url的值
# print(url)
method = self.data.get_value(i, get_method()) # 循环获取method的值
data = json.loads(self.data.get_value(i, get_params())) # 循环获取请求参数,并将得到的数据反序列化
expect = self.data.get_value(i, get_expectvalue()) # 循环获取期望输出
# print(data)
is_run = self.data.get_value(i, get_priority()) # 获取是否运行,即判断excel中priority是不是"H"
if is_run == 'H':
res = self.Runmain.run_main(url, method, data) # 调用get/post主函数
if expect in res:
print('测试通过')
self.data.write_value(i, get_resultvalue(), 'pass') # 调用写入数据方法,将实际结果写进excel
else:
print('测试失败')
self.data.write_value(i, get_resultvalue(), 'fail') if __name__ == '__main__':
run = RunTestCase()
run.go_run()

运行结果对比:

    

记录python接口自动化测试--把测试结果写进excel文件(第九目)的更多相关文章

  1. 记录python接口自动化测试--简单总结一下学习过程(第十目)

    至此,从excel文件中循环读取接口到把测试结果写进excel,一个简易的接口自动化测试框架就完成了.大概花了1周的时间,利用下班和周末的时间来理顺思路.编写调试代码,当然现在也还有很多不足,例如没有 ...

  2. 记录python接口自动化测试--主函数(第六目)

    把操作excel的方法封装好后,就可以用准备好的接口用例来循环遍历了 我的接口测试用例如下 主函数代码: run_handle_excel.py# coding:utf-8 from base.run ...

  3. 记录python接口自动化测试--利用unittest生成测试报告(第四目)

    前面介绍了是用unittest管理测试用例,这次看看如何生成html格式的测试报告 生成html格式的测试报告需要用到 HTMLTestRunner,在网上下载了一个HTMLTestRunner.py ...

  4. 记录python接口自动化测试--从excel中读取params参数传入requests请求不生效问题的解决过程(第七目)

    在第六目把主函数写好了,先来运行一下主函数 从截图中可以看到,请求参数打印出来了,和excel中填写的一致 但是每个接口的返回值却都是400,提示参数没有传进去,开始不知道是什么原因(因为excel中 ...

  5. 记录python接口自动化测试--根据excel中的期望输出是否存在请求返回的响应来判断用例是否执行成功(第八目)

    1.首先在excel中的expectValue列填好预期结果值 这里判断接口成功的依据是预期结果值是否存在于接口返回的数据中. 首先,要知道在之前封装的get/post请求方法中返回的是‘str’,也 ...

  6. 记录python接口自动化测试--把操作excel文件的方法封装起来(第五目)

    前面补充了如何来操作excel文件,这次把如何获取excel文件的sheet对象.行数.单元格数据的方法进行封装,方便后面调用 handle_excel.py# coding:utf-8 import ...

  7. Python接口自动化测试框架: pytest+allure+jsonpath+requests+excel实现的接口自动化测试框架(学习成果)

    废话 最近在自己学习接口自动化测试,这里也算是完成一个小的成果,欢迎大家交流指出不合适的地方,源码在文末 问题 整体代码结构优化未实现,导致最终测试时间变长,其他工具单接口测试只需要39ms,该框架中 ...

  8. 记录python接口自动化测试--requests使用和基本方法封装(第一目)

    之前学习了使用jmeter+ant做接口测试,并实现了接口的批量维护管理(大概500多条用例),对"接口"以及"接口测试"有了一个基础了解,最近找了一些用pyt ...

  9. 记录python接口自动化测试--unittest框架基本应用(第二目)

    在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...

随机推荐

  1. 神秘的.user.ini文件

    原文链接:https://segmentfault.com/a/1190000011552335

  2. 如何使用AsyncTask

    1 如何使用handler,安卓规定只能再UI线程里面刷新UI,但是不能再UI线程里面执行耗时操作.所以我们要把耗时操作放在子线程里,然后把要刷新UI的操作传递到handler里面,然后在由Handl ...

  3. 使用TortoiseGit从GitHub下拉上传代码配置

    转载:http://baijiahao.baidu.com/s?id=1579466751803515477&wfr=spider&for=pc 转载:https://blog.csd ...

  4. Selenium Webdriver弹出框的种种类型

    普通弹出框 div 一般这种 弹出框都属于dom的一部分,我们查看一下页面源码就可以定位到改弹出框了,然后定位下右上角的那个关闭, 这里有id,所以很方便通过 dr.findElement(By.id ...

  5. Web操作web.config

    1.引用System.Configuration.DLL 2.引用命名空间System.Configuration和System.Web.Configuration 3.上代码 // 使用指定的虚拟路 ...

  6. hash进阶:使用字符串hash乱搞的姿势

    前言 此文主要介绍hash的各种乱搞方法,hash入门请参照我之前这篇文章 不好意思hash真的可以为所欲为 在开头先放一下题表(其实就是我题解中的hash题目qwq) 查询子串hash值 必备的入门 ...

  7. 题解——洛谷P2827 NOIP提高组 2016 蚯蚓

    队列模拟 详细题解待填坑 #include <cstdio> #include <algorithm> #include <queue> #include < ...

  8. WebPack填坑笔记

    loader使用时不需要用require引入,在使用plugins(插件)才需要使用require引入 压缩js代码会导致热更新失效 所以开发环境先不要进行压缩 给css加前缀的 postcss-lo ...

  9. 《操作系统_FCFS和SJF》

    先来先服务FCFS和短作业优先SJF进程调度 转自:https://blog.csdn.net/qq_34374664/article/details/73231072 一.概念介绍和案例解析 FCF ...

  10. 转载:linux tar 解压命令总结

    把常用的tar解压命令总结下,当作备忘: tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其 ...