python+requests做接口测试使用第三方库xlrd/xlwt读取和写入Excel(数据代码分离)

一、用代码做接口测试需要保存返回的数据(我使用Excel),为了不手动复制返回结果,所以有了以下的折腾,记录一下作为笔记

  1、把入参、接口用例写在Excel里,使用代码读取入参,保存到一个新的列表里,方便发送请求,发送请求时用代码读取列表里对应的参数;

  2、然后,把返回的参数保存到一个列表,再从列表里for循环遍历列表,把参数写入到复制好的Excel里

  3、保存文件,保存为与原文件相同的文件名,会自动覆盖原文件,就相当于间接实现修改一个Excel的数据

  如下代码:

# 导入相关模块,requests用于发送接口请求、xlrd用于读取Excel数据、xlutils的copy用于复制Excel、datetime用于打印当前时间
import requests
import xlrd
from xlutils import copy
import datetime

# 访问地址
url = "http://192.168.6.25:8772/qRCRList"

class Read_Write_excel(object):
    # 读取方法
    # path_excel是Excel的本地路径,read_start_hang是读取的开始行,rend_end_hang是读取的结束行,至于列,写死了
    def read_excel(self,path_excel,read_start_hang,rend_end_hang):
        # 打开目标文件
        ecl = xlrd.open_workbook(path_excel)
        # 定位sheet表
        table = ecl.sheet_by_name('sheet')
        # 创建一个列表,把读取到的参数保存到空列表里
        self.parm_list_new = []

        # 获取第三列某些行的数据
        for i in range(read_start_hang, rend_end_hang):  # 相当于 read_start_hang <= i < read_end_hang
            i3 = table.cell_value(i, 2)  # 第i行第3列的数据
            self.parm_list_new.append(i3)  # 把获取的数据加入新建的列表里
        print('打印输入参数列表:', self.parm_list_new, '\n' * 2)

    # 访问方法
    def get_url(self,URL_fangwen_type,url_path):
        xuh = 1
        # 把返回的数据先保存进fanhui_parm_type列表
        self.fanhui_parm_list = []

        if URL_fangwen_type == 'get':
        # 循环把读取到的参数访问接口
        # get请求
            for parm in self.parm_list_new:
                r = requests.get(url_path, params=eval(parm))# 带参数访问URL,eval()用于去掉参数两侧的引号
                print("==============================")
                self.fanhui_parm_list.append(r.text)# 把返回结果添加到列表
                print('test_%d返回的参数' % xuh, r.text, '\n')
                xuh += 1

        # post请求的form格式
        if URL_fangwen_type == 'post':
            for parm in self.parm_list_new:
                r = requests.post(url_path, data=eval(parm))# 带参数访问URL,eval()用于去掉参数两侧的引号
                self.fanhui_parm_list.append(r.text)# 把返回结果添加到列表
                print('test_%d返回的参数' % xuh, r.text, '\n')
                xuh += 1

        # post请求的json格式
        if URL_fangwen_type == 'json':
            for parm in self.parm_list_new:
                r = requests.post(url_path,json=eval(parm))
                self.fanhui_parm_list.append(r.text)
                print('test_%d'%xuh,r.text,'\n')
                xuh += 1

        print('返回列表',self.fanhui_parm_list)

    # 复制原表,把返回的参数写入复制好的Excel表格
    def write_excel(self,cp_excel_path,write_hang_no):

        # 使用xlrd打开Excel
        excel_open_file = xlrd.open_workbook(cp_excel_path)

        # 复制Excel并保留原格式
        self.ex_open_file_cp = copy.copy(excel_open_file)

        # 定位到表格
        cp_sheet = self.ex_open_file_cp.get_sheet(0)
        # 使用循环把返回结果写入Excel表格
        for i in self.fanhui_parm_list:
            if len(i) > 32767:
                cp_sheet.write(write_hang_no,3,'字符串长度超出32767会报错')
                continue
            cp_sheet.write(write_hang_no, 3, str(i))# 把对应的结果写入Excel
            cp_sheet.write(write_hang_no,4,str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))# 在第四列对应的行写入当前时间,写入Excel需要转成字符串否则时间会变成一串数字(时间戳)
            write_hang_no += 1
        print('写入成功!!')

    # 保存Excel方法
    def baocun_excel(self,baocun_filename):
        # 保存新的表格名字为test_tuihuo_api
        self.ex_open_file_cp.save(baocun_filename)
        print('保存新表格 %s 成功'%baocun_filename)

if __name__ == '__main__':
    # 创建一个读Excel类
    ceshi = Read_Write_excel()
    # 读取指定路径的Excel表格参数(读取当前文件 复件.xls 表格的第2到21行的第3列数据-写死的第三列)
    ceshi.read_excel('复件.xls',2,5)# 2 <= i < 21
    # for循环遍历读取并保存到列表的参数,使用参数访问接口地址
    ceshi.get_url('get',url)
    # 把返回的数据列表的数据用for循环写入 复件.xls 文件的第三列
    ceshi.write_excel('复件.xls',2)
    # 保存文件
    ceshi.baocun_excel('复件.xls')

 对应调用以上代码的另一个文件的代码:

import tianlanyiguanjiekou

class Test_API(object):

    def test_api(self,read_excel_path,start_hang,end_hang,URL_fangwen_type,fangwen_url,cp_file_path,write_start_hang):

        self.a = tianlanyiguanjiekou.Read_Write_excel()
        self.a.read_excel(read_excel_path,start_hang,end_hang)
        self.a.get_url(URL_fangwen_type,fangwen_url)
        self.a.write_excel(cp_file_path,write_start_hang)
        self.a.fanhui_parm_list.clear()
        # print('清空后的列表',self.a.fanhui_parm_list)
        # self.a.baocun_excel(baocun_filename)

    def baocun_excel_api(self,baocun_filename):
        self.a.baocun_excel(baocun_filename)


if __name__ == '__main__':

    read_excel_path = "E:\\测试相关文档\\接口测试用例及执行情况记录\\宜关天兰退货及订单详情接口用例执行.xlsx"
    cp_excel_path = '退货及订单详情接口.xls'
    url = ['http://192.168.6.25:8772/queryRefundCommodityRecordList',http://192.168.6.25:8772/applyRefundRecordPc','http://192.168.6.25:8772/updateRefundRecordListPc']
    start_end_hang = [(2,21),(23,37),(39,45),(47,52),(54,62),(64,68),(70,82),(84,94),(96,101)]
    get,post = 'get','post'
    write_start_hang = 2
    a = Test_API()
    # 第一个
    # a.test_api(read_excel_path,start_end_hang[0][0],start_end_hang[0][1],get,url[0],cp_excel_path,start_end_hang[0][0])
    a.baocun_excel_api('退货及订单详情接口.xls')
    # a.test_api(read_excel_path,start_end_hang[8][0],start_end_hang[8][1],'json',url,cp_excel_path,start_end_hang[8][0])
    # 多个接口参数同时执行
'''    for i in range(len(start_end_hang)):
        if i == 0 or 2 <= i <= 4:
            a.test_api(read_excel_path, start_end_hang[i][0], start_end_hang[i][1], get,url[i], cp_excel_path,start_end_hang[i][0])
            a.baocun_excel_api('退货及订单详情接口.xls')

        if i == 1 or i >= 5:
            a.test_api(read_excel_path, start_end_hang[i][0], start_end_hang[i][1], post, url[i], cp_excel_path,start_end_hang[i][0])
            a.baocun_excel_api('退货及订单详情接口.xls')

        if i >= 7:
            a.test_api(read_excel_path,start_end_hang[i][0],start_end_hang[i][1],'json',url[i],cp_excel_path,start_end_hang[i][0])
            a.baocun_excel_api('退货及订单详情接口.xls')'''

    # 保存到Excel
    # a.baocun_excel_api('退货及订单详情接口.xls')

 调用文件的代码是直接复制过来的,有不符合的地方,参考即可

 

posted @ 2021-04-26 18:02  吾言!  阅读(702)  评论(0编辑  收藏  举报