XMind2TestCase 自定義測試用例設計模板
思維導圖生成測試用例
背景
引用官方的說明
軟體測試過程中,最重要、最核心就是測試用例的設計,也是測試童鞋、測試團隊日常投入最多時間的工作內容之一。
然而,傳統的測試用例設計過程有很多痛點:
- 使用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表格來展示,跟禪道一致。
- 我這裡用例標題整合了前置條件+用例描述,方便禪道執行多條用例時在用例標題裡能看到前置條件,不然得點選進去用例詳情才能看到,因人而異
- 大家都看到 1,2,3這些標識,它們有兩個作用,1是標記這裡是測試用例描述,2是標記優先順序
- 一條測試用例對應一個期待結果
改原始碼
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_phase
2.把用例優先順序的高中低換了下
# 沒有定義用例優先順序則預設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 3
parser模組
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 title
root_title = root_title[:-1]
else:
config['sep'] = ' '
suite.name = root_title
# 直接用產品名字作為功能模組名
global my_title
my_title = root_title
suite.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_title
testsuite.name = my_title
testsuite.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 testsuite
3.用例型別和用例階段設定
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 2
step_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 teststep
testcase.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 = 2
break
if step.result == 3:
testcase.result = 3
break
testcase.result = step.result # there is no need to judge where test step are ignored
logging.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下執行即可
if __name__ == '__main__':
xmind_file = '/Users/xxx/Downloads/xMind2testCase示例.xmind'
zentao_csv_file = xmind_to_zentao_csv_file(xmind_file)
print('Conver the xmind file to a zentao csv file succssfully: %s', zentao_csv_file)
web介面
使用命令,埠可自定義
xmind2testcase webtool 8000
命令列
用法:
xmind2testcase [path_to_xmind_file] [-csv] [-xml] [-json]
示例:
xmind2testcase /path/to/testcase.xmind => output testcase.csv、testcase.xml、testcase.json
xmind2testcase /path/to/testcase.xmind -csv => output testcase.csv
xmind2testcase /path/to/testcase.xmind -xml => output testcase.xml
xmind2testcase /path/to/testcase.xmind -json => output testcase.json
匯入禪道
1.將XMind用例檔案解析為禪道匯入檔案,用禪道的用例上傳功能,把xx.csv上傳即可
xmind2testcase XMind測試用例模板.xmind -csv ==> XMind測試用例模板.csv
2.將XMind用例檔案轉成json資料,用禪道的介面post上去,我本地沒有環境,沒法給出示例,有環境的小夥伴幫忙補充一下。
結語
以上是根據我個人使用習慣來自定義,不一定適合各位小夥伴,有自定義需求的小夥伴可以看看原始碼或者留言評論私信。
最後的最後,各位的關注、點贊、收藏、碎銀子打賞是對我最大的支援,謝謝大家!
需要原始碼的小夥伴關注微信公眾號ID:gameTesterGz
或掃描二維碼關注回覆xmind用例即可
相關文章
- 玩轉用例設計:XMind2TestCase一個高效的測試用例設計解決方案
- 自定義xunit測試用例的執行順序
- 測試用例設計指南
- APP測試設計測試用例的要點APP
- 軟體測試用例設計方法
- 黑盒測試用例設計方法三
- 介面測試--自定義斷言設定
- 聊聊介面測試用例設計規範
- 軟體測試用例設計中的結構設計
- 設計測試用例的四條原則
- MapReduce程式設計例項之自定義排序程式設計排序
- 分享一個 Excel 格式的功能測試用例模板Excel
- 自定義 Word 模板
- 軟體測試用例設計方法-場景法
- 軟體測試用例設計方法-判定表法
- 軟體測試用例設計方法-因果圖法
- 有關介面測試的用例設計問題
- 軟體測試用例的設計和編寫
- 使用allpairs自動設計組合測試用例AI
- 系統測試用例設計之判定表法
- 第8課—設計測試用例編寫技巧
- 軟體測試用例設計實用經驗之談
- 測試面試-測試用例面試
- plsql_varray_自定義type之測試小例_user_typesSQL
- MapReduce程式設計例項之自定義分割槽程式設計
- 測試中,介面測試的必要性與介面測試的基礎用例設計
- 測試用例
- 編寫自定義 Laravel 擴充套件包測試用例,phpunit 錯誤提示 “class not found”Laravel套件PHP
- 軟體測試用例設計方法-邊界值法
- Cookie和Session的區別以及設計測試用例CookieSession
- 測試用例與輸入資料的設計方法
- 分類樹測試用例設計工具CTE XL 1.9.2
- 最詳細的測試用例設計方法講解
- 測試工程師必看!測試用例設計全解析,讓你徹底掌握工程師
- 軟體測試核心之用例設計
- teprunner測試平臺測試計劃批量執行用例
- 【5】測試用例
- 設計的軟體測試用例是否越詳細越好?