测试工具(5)Excel接口用例生成-rap2

90 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

大家好~我是小方,欢迎大家关注笋货测试笔记体完记得俾个like

回顾

上期我们成功解析了rap2接口文档,生成相应的数据,这期我们将数据生成Excel接口自动化用例吧~

Excel分析

我们先来确定一下,一份接口自动化用例具体有哪些要素?接口id,接口标题,接口描述,接口路径,接口请求方式,接口请求头,接口请求参数(路径参数或者body参数),断言数据,断言结果,实际返回结果,后置动作等。

Excel生成

确定以上要素之后,可以开始来实现了Python 操作Excel的包挺多的,譬如xlrd和xlwt,openpyxl和pandas等。这里我用的是openpyxl大家可根据实际需求自行抉择

class CreateCases(object):
    """
    从rap2中导入数据
    """

    def __init__(self):
        self.title = ['id','title','description','url','method','headerData','queryData','data','assertAction','actual','result','rearAction']
        # self.title = ['用例ID','用例标题','用例描述','接口路径','请求方式','请求头','查询参数','请求参数','断言操作','实际请求结果','测试结果','后置操作']
        #这里可根据实际,选择中文的列名还是英文的
        #高度
        self.height = 25.0
        #宽度
        self.width = 25.0
        # 设置填充颜色
        self.fill = PatternFill('solid', fgColor='00ff00')
        # 设置字体
        self.font = Font(u'宋体', size=12)
        # 设置居中
        self.alignment = Alignment(horizontal='center', vertical='center')
        # 设置框线
        self.border = Border(left=Side(border_style='thin', color='000000'),
                        right=Side(border_style='thin', color='000000'),
                        top=Side(border_style='thin', color='000000'),
                        bottom=Side(border_style='thin', color='000000'))

    def create_file(self, id, cookies=None, module=None):
        #获取接口文档数据和文件名
        data, name = Rap2Parse.api_data(id, cookies, module)
        #文件名拼接uuid,uuid为了后续做成接口化,避免文件名重复
        file_name = f"{name}-{uuid.uuid4().hex}.xlsx"
        #生成文件路径
        self.file_path = os.path.join(DOWNLOAD_PATH, file_name)
        wb = Workbook()
        for index, dto in enumerate(data):
            #根据模块名生成各个sheet页
            wb.create_sheet(dto['modules'], index)
            ws = wb[dto['modules']]
            for column, title in enumerate(self.title):
                #设置列名
                ws_obj = ws.cell(1, column+1, title)
                ws_obj.font = self.font
                ws_obj.alignment = self.alignment
                ws_obj.fill = self.fill
                ws_obj.border = self.border
                #设置列宽
                ws.column_dimensions[get_column_letter(column+1)].width = self.width
            # 设置行高=25
            ws.row_dimensions[1].height = self.height
            #遍历case_data数据
            for i, data in enumerate(dto['cases_data']):
                for k,v in enumerate(data.keys()):
                    if isinstance(data[v],dict):
                        data[v] = json.dumps(data[v],ensure_ascii=False)
                    #根据行列写入数据
                    ws_obj = ws.cell(i+2, k+1, data[v])
                    ws_obj.font = self.font
                    ws_obj.alignment = self.alignment
                    ws.row_dimensions[i+2].height = self.height
        #openpyxl 默认会生成一个sheet页
        ws_sheet = wb["Sheet"]
        #强迫症将其删除
        wb.remove(ws_sheet)
        #保存文件
        wb.save(self.file_path)
        wb.close()
        return file_name

    def write_data(self, sheet_name, row, column, value):
        """
        :param sheet_name: 工作表
        :param row: 行
        :param column: 列
        :param value: 值
        :return:
        """
        wb = load_workbook(self.file_path)
        ws = wb[sheet_name]
        ws_obj = ws.cell(row, column, value)
        ws_obj.font = self.font
        ws_obj.alignment = self.alignment
        ws.row_dimensions[row].height = self.height
        wb.save(self.file_path)
        wb.close()



if __name__ == '__main__':
    create_excel = CreateCases()
    create_excel.create_file(407) 

Excel生成展示:

项目地址:github.com/JokerChat/A…

后续扩展

  • 将数据生成yaml格式接口自动化用例
  • 将数据生成生成jmeter脚本(jmx)
  • 将上述功能,做成api,开放给小伙伴使用
  • 对接api,做成前端页面,让小伙伴体验更完美

本期介绍了如何利用解析回来的数据生成Excel,我们下期再见👋🏻👋🏻👋🏻俾个like再走啦