【xmind converse excel】测试用例定制化小工具

背景

公司使用jira, jira写测试用例,jira可以通过execl导入进jira, 生成测试用例,但是模板很不统一,如果只是再execl中修改,又觉得及其的麻烦,所以写了一个xmind 转化为定制版本的execl测试用例,便于更好的写测试去思考,而不是让费在修改execl中

jira用例分析

  • 分析,根据jira中提供的模板,我们可以知道,每个testid对应相同的id,path,priority,tag,summary(描述),tag,description, 但是一个testid可能有多个步骤,每个步骤对应一个结果

  • 根据上述我们可以设计xmind的测试用例模板

脚本编写

  • 我们分析后,就可以为我们编写定制版本的测试用例,首先我们设计好xmind的测试模板后,我们需要解析xmind,这边使用xmindparser, openpyxl

  • 解析xmind

pip install xmindparser

from xmindparser import xmind_to_dict
data = xmind_to_dict("test module.xmind")
print(data)

  • 分析输入的列表信息,我们只需要提取我们需要的信息就可以,这边需要花点耐心去获取,并不难,这边就省略了,主要用到了for循环,以及对列表的信息分析

xmind_testcase.py

__author__ = 'wangxiao'

import json

from xmindparser import xmind_to_dict

from utils.execl_config import ExcelConfig


class ExportXmindExcel:
    def __init__(self):
        self.name = input("请输入绝对路径:")
        self.data = xmind_to_dict(self.name)
        # 获取测试用例dict格式
        self.dict_data = self.data[0]
        # 实例化execlConfig
        self.execl = ExcelConfig()


    # 提取多少条case
    def get_cases_nums(self):
        nums = self.dict_data['topic']['topics'][0]['topics']
        return len(nums)

    # 提取cases list
    def get_cases(self):
        return self.dict_data['topic']['topics'][0]['topics']

    # 提取Test Repository Path
    def get_case_path(self, i):
        self.casesList = self.get_cases()
        index = self.casesList[i]['title']
        path = self.casesList[i]['topics'][0]['topics'][0]['title']
        tag = self.casesList[i]['topics'][1]['topics'][0]['title']
        priority = self.casesList[i]['topics'][2]['topics'][0]['title']
        summary = self.casesList[i]['topics'][3]['topics'][0]['title']
        des = self.casesList[i]['topics'][5]['topics'][0]['title']
        return index, path, tag, priority, summary, des

    # 提取action = (步骤+对应的步骤结果)
    def get_actions(self, num):
        return self.casesList[num]['topics'][4]['topics']

    # 处理action,分别提取步骤 = 结果
    def get_case_detail(self, num, list):
        step = list[num]['title']
        res = list[num]['topics'][0]['title']
        return step, res
    
    # 把每次循环的数据,放到字典中
    def converse_dict(self, num):
        index, path, tag, priority, summary, des = self.get_case_path(num)
        case_dict = {}
        case_dict['index'] = index
        case_dict['path'] = path
        case_dict['tag'] = tag
        case_dict['priority'] = priority
        case_dict['summary'] = summary
        case_dict['des'] = des
        case_dict['action'] = self.get_actions(num)
        return case_dict

    # 执行函数
    def run(self):
        nums = self.get_cases_nums()
        # 声明全局变量
        global number
        # 写入单元格从第二行开始
        number = 2
        for i in range(0, nums):
            cases = self.converse_dict(i)
            actions = cases['action']
            nums2 = len(actions)
            for j in range(0, nums2):
                args = self.get_case_detail(j, actions)
                self.execl.run(number, args, index=cases['index'], path=cases['path'], tag=cases['tag'], priority=cases['priority'], summary=cases['summary'], des=cases['des'])
                number +=1
        print("--------------execl已经生成---------------")

main = ExportXmindExcel()
main.run()


execl_config.py

__author__ = 'wangxiao'

import openpyxl


class ExcelConfig:
    ID = 1
    PATH = 2
    PRIORITY = 3
    TAG = 4
    SUMMARY = 5
    ACTION = 6
    RESULT = 7
    DESCRIPTION = 8

    def __init__(self):
        self.wb = openpyxl.Workbook()
        self.sh = self.wb.create_sheet('test_case')

    def init_execl(self):
        self.sh.cell(row=1, column=self.ID, value='Test ID')
        self.sh.cell(row=1, column=self.PATH, value='Test Repository Path')
        self.sh.cell(row=1, column=self.PRIORITY, value='Priority')
        self.sh.cell(row=1, column=self.TAG, value='Tag')
        self.sh.cell(row=1, column=self.SUMMARY, value='Summary')
        self.sh.cell(row=1, column=self.ACTION, value='Action')
        self.sh.cell(row=1, column=self.RESULT, value='Result')
        self.sh.cell(row=1, column=self.DESCRIPTION, value='Description')

    def write_cases(self, i, *args, **kwargs):
        self.sh.cell(row=i, column=self.ID, value=str(kwargs['index']))
        self.sh.cell(row=i, column=self.PATH, value=kwargs['path'])
        self.sh.cell(row=i, column=self.PRIORITY, value=kwargs['priority'])
        self.sh.cell(row=i, column=self.TAG, value=kwargs['tag'])
        self.sh.cell(row=i, column=self.SUMMARY, value=kwargs['summary'])
        self.sh.cell(row=i, column=self.DESCRIPTION, value=kwargs['des'])

        self.sh.cell(row=i, column=self.ACTION, value=args[0][0])
        self.sh.cell(row=i, column=self.RESULT, value=args[0][1])


    def run(self, i, *args, **kwargs):
        self.init_execl()
        self.write_cases(i, *args, **kwargs)
        self.wb.save('case.xlsx')


打包成小工具

  • 打包成小工具,方便其他人使用这个小工具
pip insall pyinstaller
# 打包命令
pyinstaller -F xmind_testcase.py -p execl_config.py
  • 效果演示

总结

项目只是参考,每个公司需要都不一样,主干是一样的,主要是去分析

posted @ 2020-08-27 14:43  WANG-X  阅读(403)  评论(0编辑  收藏  举报