测试人福利xmind转禅道测试用例(XMind2testcase)


前言
时间紧任务重,写完脑图写用例,人都忙翻了,痛定思痛之后想能否把xmind转为禅道测试用里呢?经过一番调(百)研(度),终于让我找到了一个懒人专享的py小工具,看完后直呼真爽,后续工作简直就是一通嘎嘎乱杀,好了废话不多少直接上教程。

*一安装小工具(XMindtestcase)
0、python的安装就不多介绍了,有点基础的略过,或者网上教程无脑安装即可。
1、pip install xmind2testcase
在这里插入图片描述

2、命令窗口启动:XMind2testcase webtool即可

3、成功后浏览器访问127.0.0.1:5001

在这里插入图片描述

二xmind编写规范

		0、中心主题默认为产品名称
		1、中心主题下的第一层子主题会自动识别为TestSuite,也可以理解为模块。
		3、TestSuite下的子主题添加优先级后会自动识别为TestCase,即为用例名。
		4、TestCase下的子主题依次为TestStep和Expected results,即为测试步骤和期望结果。
		5、TestCase可以添加备注来说明前置条件。
		6、在任何元素前加#,可忽略解析。
		7、自由主题不会被解析进去。

在这里插入图片描述

三演示模板解析结果
1、上传解析
在这里插入图片描述
2、解析结果展示,根据实际导出csv用例
在这里插入图片描述
3、也可命令操作,命令窗口输入:xmind2testcase [path/xmind文件路径] [-csv] [-xml] [-json]

导入禅道注意事项:
由于禅道系统在导入测试用例文件时,不会自动生成模块名,需要创建项目时,把模块名创建好。
导入用例时,需要填写对应的模块名和ID。
如果导入时,模块名没有事先创建好,那默认所有导入的测试用例归为根模块‘/’所有,这样是不能导入的。
建使用者创建好模块名,方便用力管理,实例如下:
在这里插入图片描述
源码修改部分
1、修改优先级部分,找到zentao.py,修改以下方法

	    def gen_case_priority(priority):
	    # 修改前
	    # mapping = {1: '高', 2: '中', 3: '低'}
	    # 修改后
	    mapping = {1: '1', 2: '2', 3: '3', 4: '4'}
	    if priority in mapping.keys():
	        return mapping[priority]
	    else:`
	        # 修改前
	        return '中'
	        # 修改后
	        return '2'

2.修改用例类型部分,修改zentao.py,修改此以下方法


def gen_case_type(case_type):
    # 修改前
    # mapping = {1: '手动', 2: '自动'}
    # 修改后
    mapping = {1: '功能测试', 2: '其他测试'}
    if case_type in mapping.keys():
        return mapping[case_type]
    else:
        # 修改前
        # return '手动'
        # 修改后
        return '功能测试'

3.修改适应阶段部分,修改zentao.py,修改以下方法


def gen_a_testcase_row(testcase_dict):
    case_module = gen_case_module(testcase_dict['suite'])
    case_title = testcase_dict['name']
    case_precontion = testcase_dict['preconditions']
    case_step, case_expected_result = gen_case_step_and_expected_result(testcase_dict['steps'])
    case_keyword = ''
    case_priority = gen_case_priority(testcase_dict['importance'])
    case_type = gen_case_type(testcase_dict['execution_type'])
    # 修改前
    # case_apply_phase = '迭代测试'
    # 修改后
    case_apply_phase = '系统测试阶段'
    row = [case_module, case_title, case_precontion, case_step, case_expected_result, case_keyword, case_priority,
           case_type, case_apply_phase]
    return row

4.导出文件有空行,修改zentao.py,修改一下方法xmind_to_zentao_csv_file ,写入方法增加newline=''

# 修改前
# with open(zentao_file, 'w', encoding='utf8') as f:
# 修改后
with open(zentao_file, 'w', encoding='utf8', newline='') as f:

5.用例步骤、预期结果序号后多一个空格,修改zentao.py,修改一下方法


def gen_case_step_and_expected_result(steps):
    case_step = ''
    case_expected_result = ''
    # 修改后,把+ '. ' + 后的空格去掉  + '.' +
    for step_dict in steps:
        case_step += str(step_dict['step_number']) + '.' + step_dict['actions'].replace('\n', '').strip() + '\n'
        case_expected_result += str(step_dict['step_number']) + '.' + \
                                step_dict['expectedresults'].replace('\n', '').strip() + '\n' \

6、每导出一个测试用例步骤和预期结果会多一个换行符,修改zentao.py中以下方法

def gen_case_step_and_expected_result(steps):
    case_step = ''
    case_expected_result = ''
    # 修改后,把+ '. ' + 后的空格去掉  + '.' +
    for step_dict in steps:
        case_step += str(step_dict['step_number']) + '.' + step_dict['actions'].replace('\n', '').strip() + '\n'
        case_expected_result += str(step_dict['step_number']) + '.' + \
                                step_dict['expectedresults'].replace('\n', '').strip() + '\n' \
            if step_dict.get('expectedresults', '') else ''
    # 添加,去除每个单元格里最后一个换行符
    case_step = case_step.rstrip('\n')
    case_expected_result = case_expected_result.rstrip('\n')
    return case_step, case_expected_result
    #去除最后一个换行符

7、填写默认关键词,修改zentao.py中以下方法即可

def gen_a_testcase_row(testcase_dict):
    case_module = gen_case_module(testcase_dict['suite'])
    case_title = testcase_dict['name']
    case_precontion = testcase_dict['preconditions']
    case_step, case_expected_result = gen_case_step_and_expected_result(testcase_dict['steps'])
    # 此处可填写默认关键词
    case_keyword = ''

8、去掉用例标题中的空格,修改parser.py修改以下方法即可

def gen_testcase_title(topics):
    """Link all topic's title as testcase title"""
    titles = [topic['title'] for topic in topics]
    titles = filter_empty_or_ignore_element(titles)
 
    # when separator is not blank, will add space around separator, e.g. '/' will be changed to ' / '
    separator = config['sep']
    if separator != ' ':
        # 修改前
        # separator = ' {} '.format(separator)
        # 修改后
        separator = f'{separator}'
    return separator.join(titles)

感谢原博客,关于xmind编写规则描述的非常详细!XMind2TestCase使用指南 - hhwu - 博客园&陈哆肉de博客,欢迎点赞与评论,相互交流学习!