XMind2TestCase自定义测试用例设计模板
思維導圖生成測試用例
- 背景
- 示例展示
- 安裝XMind2TestCase
- 改動后的用例模板
- 生成的測試用例
 
- 改源碼
- zentao模塊
- parser模塊
 
- 執行
- API調用
 
- web界面
- 命令行
 
- 導入禪道
- 結語
背景
引用官方的說明
軟件測試過程中,最重要、最核心就是測試用例的設計,也是測試童鞋、測試團隊日常投入最多時間的工作內容之一。
 然而,傳統的測試用例設計過程有很多痛點:
- 使用Excel表格進行測試用例設計,雖然成本低,但版本管理麻煩,維護更新耗時,用例評審繁瑣,過程報表統計難…
- 使用TestLink、TestCenter、Redmine等傳統測試管理工具,雖然測試用例的執行、管理、統計比較方便,但依然存在編寫用例效率不高、思路不夠發散、在產品快速迭代過程中比較耗時等問題…
- 公司自研測試管理工具,這是個不錯的選擇,但對于大部分小公司、小團隊來說,一方面研發維護成本高,另一方面對技術要有一定要求…
- …
基于這些情況,現在越來越多公司選擇使用思維導圖這種高效的生產力工具進行用例設計,特別是敏捷開發團隊。
事實上也證明,思維導圖其發散性思維、圖形化思維的特點,跟測試用例設計時所需的思維非常吻合,所以在實際工作中極大提升了我們測試用例設計的效率,也非常方便測試用例評審。
但是與此同時,使用思維導圖進行測試用例設計的過程中也帶來不少問題:
- 測試用例難以量化管理、執行情況難以統計;
- 測試用例執行結果與BUG管理系統難以打通;
- 團隊成員用思維導圖設計用例的風格各異,溝通成本巨大;
- …
于是,這時候 XMind2TestCase 就應運而生了,該工具基于 Python 實現,通過制定測試用例通用模板, 然后使用 XMind 這款廣為流傳且開源的思維導圖工具進行用例設計。 其中制定測試用例通用模板是一個非常核心的步驟(具體請看使用指南),有了通用的測試用例模板,我們就可以在 XMind 文件上解析并提取出測試用例所需的基本信息, 然后合成常見測試用例管理系統所需的用例導入文件。這樣就將 XMind 設計測試用例的便利與常見測試用例系統的高效管理結合起來了!
當前 XMind2TestCase 已實現從 XMind 文件到 TestLink 和 Zentao(禪道) 兩大常見用例管理系統的測試用例轉換,同時也提供 XMind 文件解析后的兩種數據接口 (TestSuites、TestCases兩種級別的JSON數據),方便快速與其他測試用例管理系統打通。
示例展示
官方的示例
Web轉換工具
 
 轉換后用例預覽
 
禪道(ZenTao)導入結果示例
 
安裝XMind2TestCase
pip3 install xmind2testcase或者升級
pip3 install -U xmind2testcase# 實踐 在開始之前先定義咋們的測試用例模板,官方的用例模板不太適合我的書寫習慣,所以我把它稍微改改,先看看官網的,適合你就不用改啦。 ## 官方用例模板
改動后的用例模板
生成的測試用例
我本地沒搭建禪道,用Excel表格來展示,跟禪道一致。
改源碼
zentao模塊
1.case_apply_phase屬性:用例階段我固定了功能測試
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 = gen_case_apply_phase(testcase_dict['summary'])'''生成測試用例的字段在這里'''row = [case_module, case_title, case_precontion, case_step, case_expected_result, case_keyword, case_priority, case_type, case_apply_phase]return row測試階段默認值轉換
def gen_case_apply_phase(case_apply_phase):if case_apply_phase=='無':return '功能測試階段'else:return case_apply_phase2.把用例優先級的高中低換了下
# 沒有定義用例優先級則默認3級 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 3parser模塊
1.把原先的產品名(中心主題)改為功能模塊名,輸出文件名字一致
def sheet_to_suite(root_topic):"""convert a xmind sheet to a `TestSuite` instance"""suite = TestSuite()root_title = root_topic['title']separator = root_title[-1]if separator in config['valid_sep']:logging.debug('find a valid separator for connecting testcase title: %s', separator)config['sep'] = separator # set the separator for the testcase's titleroot_title = root_title[:-1]else:config['sep'] = ' 'suite.name = root_title# 直接用產品名字作為功能模塊名global my_titlemy_title = root_titlesuite.details = root_topic['note']suite.sub_suites = []for suite_dict in root_topic['topics']:suite.sub_suites.append(parse_testsuite(suite_dict))return suite def parse_testsuite(suite_dict):testsuite = TestSuite()#直接用產品名字作為模塊名,在sheet_to_suite定義全局變量my_titletestsuite.name = my_titletestsuite.details = suite_dict['note']testsuite.testcase_list = []logging.debug('start to parse a testsuite: %s', testsuite.name)for cases_dict in suite_dict.get('topics', []):for case in recurse_parse_testcase(cases_dict):testsuite.testcase_list.append(case)logging.debug('testsuite(%s) parsing complete: %s', testsuite.name, testsuite.to_dict())return testsuite3.用例類型和用例階段設置
def parse_a_testcase(case_dict, parent):testcase = TestCase()topics = parent + [case_dict] if parent else [case_dict]testcase.name = gen_testcase_title(topics)preconditions = gen_testcase_preconditions(topics)testcase.preconditions = preconditions if preconditions else '無'summary = gen_testcase_summary(topics)'''testcase.summary:用例階段,配合gen_testcase_type使用'''testcase.summary = summary if summary else '無'execution_type = gen_testcase_type(topics)'''testcase.execution_type:用例類型'''testcase.execution_type = execution_type if execution_type else '無'testcase.importance = get_priority(case_dict) or 2step_dict_list = case_dict.get('topics', [])if step_dict_list:testcase.steps = parse_test_steps(step_dict_list)# the result of the testcase take precedence over the result of the teststeptestcase.result = get_test_result(case_dict['markers'])if testcase.result == 0 and testcase.steps:for step in testcase.steps:if step.result == 2:testcase.result = 2breakif step.result == 3:testcase.result = 3breaktestcase.result = step.result # there is no need to judge where test step are ignoredlogging.debug('finds a testcase: %s', testcase.to_dict())return testcase def gen_testcase_type(topics):'''用例階段調用'''labels = [topic['label'] for topic in topics]labels = filter_empty_or_ignore_element(labels)return config['type_sep'].join(labels)我這里需要改動的代碼到這里結束了
執行
API調用
這里說下我這里執行,官網有比較詳細的執行教程點這里跳轉
 這段代碼加在zentao.py下運行即可
web界面
使用命令,端口可自定義
xmind2testcase webtool 8000命令行
用法:
xmind2testcase [path_to_xmind_file] [-csv] [-xml] [-json]示例:
xmind2testcase /path/to/testcase.xmind => output testcase.csv、testcase.xml、testcase.jsonxmind2testcase /path/to/testcase.xmind -csv => output testcase.csvxmind2testcase /path/to/testcase.xmind -xml => output testcase.xmlxmind2testcase /path/to/testcase.xmind -json => output testcase.json導入禪道
1.將XMind用例文件解析為禪道導入文件,用禪道的用例上傳功能,把xx.csv上傳即可
xmind2testcase XMind測試用例模板.xmind -csv ==> XMind測試用例模板.csv2.將XMind用例文件轉成json數據,用禪道的接口post上去,我本地沒有環境,沒法給出示例,有環境的小伙伴幫忙補充一下。
結語
以上是根據我個人使用習慣來自定義,不一定適合各位小伙伴,有自定義需求的小伙伴可以看看源碼或者留言評論私信。
最后的最后,各位的關注、點贊、收藏、碎銀子打賞是對我最大的支持,謝謝大家!
 需要源碼的小伙伴關注微信公眾號ID:gameTesterGz
 或掃描二維碼關注回復xmind用例即可
 
總結
以上是生活随笔為你收集整理的XMind2TestCase自定义测试用例设计模板的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 康宁玻璃ct值计算公式_【钦州】CT室铅
- 下一篇: ValueStack基础:OGNL
