引言
使用python进行接口测试时常常需要接口用例测试数据、断言接口功能、验证接口响应状态等,如果大量的接口测试用例脚本都将接口测试用例数据写在脚本文件中,这样写出来整个接口测试用例脚本代码将看起来很冗余和难以清晰的阅读以及维护,试想如果所有的接口测试数据都写在代码中,接口参数或者测试数据需要修改,那不得每个代码文件都要一一改动?。因此,这种不高效的模式不是我们想要的。所以,在自动化测试中就有个重要的思想:测试数据和测试脚本分离,也就是测试脚本只有一份,其中需要输入数据的地方会用变量来代替,然后把测试输入数据单独放在一个文件中,这个存放测试输入数据的文件,通常是表格的形式或者其他格式文件,如excel文件、json文件、xml文件、txt文本文件等等。在python进行接口自动化测试时,为了方便管理和存储测试用例数据,一般将测试数据编写存储在excel文件中,测试脚本通过读取excel文件来实现测试数据加载,并运行得出测试用例数据执行的结果,并回写测试结果到excel文件中,这样就实现了测试脚本和数据的分离。而python操作excel文件的读写,这里需要安装并引入第三方模块:xlrd和xlwt以及xlutils,xlrd为读取excel模块,xlwt为向excel写数据的模块,xlutils可以复制excel并修改excel中的数据。下面就具体介绍xlrd和xlwt操作excel文件提供的通用方法和技巧,以及xlutils如何复制和修改excel,达到操作excel读写的目的。
一、xlrd、xlwt以及xlutils安装
1.使用pip安装
pip install xlrd pip install xlwt pip install xlutils
2.在PyCharm中安装
直接检索需要安装的模块名称即可,如xlrd:
二、xlrd操作excel文件的数据读取
新建一个excel文件,文件名称:excel_test.xlsx,文件编辑有两个sheet表,内容如下:
sheet1:
sheet2:
(1)打开excel文件,获取excel的sheet名
编辑如下代码:
import xlrd file = xlrd.open_workbook("excel_test.xlsx") all_sheet = file.sheet_names() # 获取所有的工作簿名 sheet_name1 = file.sheet_names()[0] # 通过sheet下标获取,第一个sheet下标为0 sheet_name2 = file.sheet_by_index(0).name # 通过sheet索引获取sheet名 print(all_sheet) print(sheet_name1) print(sheet_name2) ----------------------------------------- # 返回结果 ['员工信息表', 'api测试用例'] 员工信息表 员工信息表
(2)获取sheet工作表页的对象
代码示例:
import xlrd file = xlrd.open_workbook("excel_test.xlsx") sheet_name1 = file.sheet_names()[0] sheet1_obj = file.sheet_by_name(sheet_name1) # 通过sheet名获取sheet对象 sheet2_obj = file.sheet_by_index(1) # 通过sheet索引获取sheet对象 print(sheet1_obj) print(sheet2_obj) ------------------------------------ # 返回结果 <xlrd.sheet.Sheet object at 0x0000000002AA09B0> <xlrd.sheet.Sheet object at 0x0000000002AA0978>
(3)获取sheet工作表的行、列数,整行、整列数据,具体的单元格数据
代码示例:
import xlrd file = xlrd.open_workbook("excel_test.xlsx") sheet = file.sheet_by_index(0) # 通过sheet索引获取sheet对象 nrows = sheet.nrows # 获取行数 ncols = sheet.ncols # 获取列数 nrows_data = sheet.row_values(1) # 获取第二行数据,返回的是列表<p style="color:transparent">本文来源gao!daima.com搞$代!码网</p> ncols_data = sheet.col_values(0) # 获取第一列数据,返回的是列表 cell = sheet.cell(1,2) # 获取单元格数据,如第二行,第三列数据 print(nrows) print(ncols) print(nrows_data) print(ncols_data) print(cell) ------------------------------- # 返回结果 6 5 ['王五', '男', 32883.0, 'java开发工程师', 233.0] ['姓名', '王五', '李四', '张三', '小红', '小明'] xldate:32883.0 # 这里日期数据直接返回成浮点数了