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文件中循环读取接口到把测试结果写进excel,一个简易的接口自动化测试框架就完成了.大概花了1周的时间,利用下班和周末的时间来理顺思路.编写调试代码,当然现在也还有很多不足,例如没有 ...
记录python接口自动化测试--主函数(第六目)
把操作excel的方法封装好后,就可以用准备好的接口用例来循环遍历了 我的接口测试用例如下 主函数代码: run_handle_excel.py# coding:utf-8 from base.run ...
记录python接口自动化测试--利用unittest生成测试报告(第四目)
前面介绍了是用unittest管理测试用例,这次看看如何生成html格式的测试报告 生成html格式的测试报告需要用到 HTMLTestRunner,在网上下载了一个HTMLTestRunner.py ...
记录python接口自动化测试--从excel中读取params参数传入requests请求不生效问题的解决过程(第七目)
在第六目把主函数写好了,先来运行一下主函数 从截图中可以看到,请求参数打印出来了,和excel中填写的一致 但是每个接口的返回值却都是400,提示参数没有传进去,开始不知道是什么原因(因为excel中 ...
记录python接口自动化测试--根据excel中的期望输出是否存在请求返回的响应来判断用例是否执行成功(第八目)
1.首先在excel中的expectValue列填好预期结果值 这里判断接口成功的依据是预期结果值是否存在于接口返回的数据中. 首先,要知道在之前封装的get/post请求方法中返回的是‘str’,也 ...
记录python接口自动化测试--把操作excel文件的方法封装起来(第五目)
前面补充了如何来操作excel文件,这次把如何获取excel文件的sheet对象.行数.单元格数据的方法进行封装,方便后面调用 handle_excel.py# coding:utf-8 import ...
记录python接口自动化测试--requests使用和基本方法封装(第一目)
之前学习了使用jmeter+ant做接口测试,并实现了接口的批量维护管理(大概500多条用例),对"接口"以及"接口测试"有了一个基础了解,最近找了一些用pyt ...
记录python接口自动化测试--unittest框架基本应用(第二目)
在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...
随机推荐
Spring的三种通过XML实现DataSource注入方式
Spring的三种通过XML实现DataSource注入方式: 1.使用Spring自带的DriverManagerDataSource 2.使用DBCP连接池 3.使用Tomcat提供的JNDI
Android Volley gives me 400 error
本文来自:http://stackoverflow.com/questions/21739276/android-volley-gives-me-400-error 本人是根据文中的其中一方法: I ...
ASC47B borderless
题目描述 border集合为{NULL,str}的串str称为borderless串. border即KMP里的那个. 字符集{'a','b'},给定长度n,求第k(给定)小的borderless串. ...
利用在线工具根据JSon数据自动生成对应的Java实体类
如果你希望根据JSon数据自动生成对应的Java实体类,并且希望能进行变量的重命名,那么“JSON To Java”一定适合你.(下面的地址需要FQ) https://jsontojava.appsp ...
angularjs中ng-route和ui-router简单用法的代码比较
1.使用ng-route: app.js中的写法: var app=angular.module('birthdayApp',['ngRoute']); app.config(function($ro ...
(转)直接拿来用!最火的iOS开源项目(一)
1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是G ...
poj Pie
http://poj.org/problem?id=3122 #include #include #include ...
POJ2084 Game of Connections(数学,dp)
题目链接. 分析: 简单的 Catalan 数 将x~y编号,设解为 d(x, y), d(x, y) = {d(x+1,i-1)*d(i+1,y)}, 其中 x+1<= i <= y, ...
hdu 1245 Saving James Bond
http://acm.hdu.edu.cn/showproblem.php?pid=1245 #include #include #inc ...
ListBox 如何改变某行的字体颜色
Option Explicit Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Pri ...