xmind轉(zhuǎn)自測(cè)用例工具

需求背景

上個(gè)月推行了這個(gè)東西進(jìn)擊的開(kāi)發(fā)自測(cè),其中有一點(diǎn)是前置提供開(kāi)發(fā)自測(cè),提供的是xmind格式的文檔涧卵,作為測(cè)試記錄,現(xiàn)在提供xmind轉(zhuǎn)為自測(cè)用例的腳本腹尖,格式如下:

模塊 用例名稱 執(zhí)行步驟 預(yù)期結(jié)果 驗(yàn)證人 自測(cè)結(jié)果 測(cè)試驗(yàn)證結(jié)果 優(yōu)先級(jí)

使用

python3 xmind2devcase [目錄](méi)  #解析給定的單個(gè)目錄xmind文件
python3 xmind2devcase #解析當(dāng)前目錄下所有xmind文件
xmind的格式
iShot2020-07-0620.27.06.png
iShot2020-07-0620.27.57.png
  • 用例名稱前嵌入優(yōu)先級(jí)1柳恐,2,3分別代表高中低級(jí)別
  • 用例嵌入備注填入開(kāi)發(fā)自測(cè)人热幔,比較簡(jiǎn)單不做過(guò)多解釋了

腳本

xmind:這個(gè)開(kāi)源庫(kù)其實(shí)就是XMind SDK for python項(xiàng)目(https://github.com/xmindltd/xmind-sdk-python.git)的封裝乐设,xlwt這個(gè)是寫(xiě)excel的第三方庫(kù)。

思路很簡(jiǎn)單绎巨,直接解析近尚,創(chuàng)建xls文件,所以直接上腳本

import xmind,xlwt,os,sys

'''
轉(zhuǎn)換xmind文件到excel文檔场勤,作為開(kāi)發(fā)自測(cè)用例
1.統(tǒng)一的xmind格式編寫(xiě)
    目錄戈锻,測(cè)試用例歼跟,執(zhí)行步驟,預(yù)期結(jié)果
    測(cè)試用例解析為一行格遭,執(zhí)行步驟可以多條哈街,解析成一行
    備注->填寫(xiě)指定驗(yàn)證人
    優(yōu)先級(jí) ->指定1、2如庭、3優(yōu)先級(jí)
2.定義提取的自測(cè)用例
依賴:xmind叹卷、xlwt模塊
3.使用:
python3 xmind2devcase [目錄](méi)  #解析給定的單個(gè)目錄xmind文件
python3 xmind2devcase #解析當(dāng)前目錄下所有xmind文件
'''

global parseAll
parseAll = True

def loadMind(path:str) -> dict:
    workbook = xmind.load(path)
    ret = workbook.getPrimarySheet().getData().get("topic")
    return ret

def generExcel(xl_name:str,mind_dic:dict) -> None:
    wb = xlwt.Workbook()
    ws = wb.add_sheet("自測(cè)用例") #type: xlwt.Worksheet
    style_title = xlwt.easyxf('font: bold on;align: wrap on, vert centre, horiz center')
    style_title_content = xlwt.easyxf('align: wrap on, vert centre')
    style_title_content2 = xlwt.easyxf('align: wrap on, vert centre,horiz center')
    ws.write(0,0,"模塊",style=style_title)
    ws.write(0, 1, "用例名稱",style=style_title)
    ws.write(0, 2, "執(zhí)行步驟",style=style_title)
    ws.write(0, 3, "預(yù)期結(jié)果",style=style_title)
    ws.write(0, 4, "驗(yàn)證人",style=style_title)
    ws.write(0, 5, "自測(cè)結(jié)果",style=style_title)
    ws.write(0, 6, "測(cè)試驗(yàn)證結(jié)果", style=style_title)
    ws.write(0,7,"優(yōu)先級(jí)",style=style_title)
    ws.col(0).width = 256 * 20
    ws.col(1).width = 256 * 20
    ws.col(2).width = 256 * 40
    ws.col(3).width = 256 * 40
    ws.col(4).width = 256 * 20
    ws.col(5).width = 256 * 20
    ws.col(6).width = 256 * 20
    ws.col(7).width = 256 * 20
    row = 1
    #解析開(kāi)始
    dirs = mind_dic.get("topics")
    for dir in dirs:
        dir_title = dir.get("title")    #目錄名字
        try:
            ws.write(row,0,dir_title,style_title_content2)
        except:
            ws.write(row+1, 0, dir_title, style_title_content2)
            row += 1
        cases = dir.get("topics")
        if not cases:
            continue
        for case in cases:
            case_title = case.get("title")  #用例名稱
            case_note = case.get("note")    #用例執(zhí)行人
            case_markers = case.get("markers")
            if not parseAll:
                if not case_markers:
                    continue
            case_priority = "高" if "priority-1" in case_markers else "中" if "priority-2" in case_markers else "低"    #用例優(yōu)先級(jí)
            steps = case.get("topics")
            ws.write(row,1,case_title,style_title_content)
            ws.write(row,4, case_note,style_title_content2)
            ws.write(row, 7, case_priority,style_title_content2)
            #下面都是跟隨一行
            step_title_real = ""
            result_title_real = ""
            index = 1
            if not steps:
                row += 1
                continue
            for step in steps:
                step_title = step.get("title")  #步驟
                step_title_real += str(index) + "." +step_title+"\n"
                results = step.get("topics")
                if not results:
                    index += 1
                    continue
                is_first_time = True
                for result in results:
                    result_title = result.get("title")  #預(yù)期結(jié)果
                    if is_first_time:
                        result_title_real += str(index) + "." + result_title + "\n"
                    else:
                        result_title_real += "   " + result_title + "\n"
                    is_first_time = False
                index += 1
            ws.write(row,2,step_title_real,style_title_content)
            ws.write(row,3,result_title_real,style_title_content)
            row += 1
    wb.save(xl_name)

def init_args():
    args = sys.argv
    args_len =  args.__len__()
    return args,args_len

def x_main():
    if args_len < 2:
        # 解析當(dāng)前目錄
        cur_dir = os.path.dirname(os.path.abspath(args[0]))
        ret = os.listdir(cur_dir)
        ret = list(filter(lambda x:str(x).lower().strip().endswith("xmind"),ret))
        ret = list(map(lambda x:os.path.join(cur_dir,x),ret))
        for i in ret:
            d = loadMind(i)
            generExcel(i.replace("xmind", "xls"), d)
    else:
        # 解析傳入目錄
        d = loadMind(args[1])
        generExcel(str(args[1]).replace("xmind","xls"),d)

if __name__ == "__main__":
    global args,args_len
    args,args_len = init_args()
    x_main()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市坪它,隨后出現(xiàn)的幾起案子骤竹,更是在濱河造成了極大的恐慌,老刑警劉巖往毡,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒙揣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡开瞭,警方通過(guò)查閱死者的電腦和手機(jī)懒震,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嗤详,“玉大人个扰,你說(shuō)我怎么就攤上這事〈猩” “怎么了递宅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)苍狰。 經(jīng)常有香客問(wèn)我办龄,道長(zhǎng),這世上最難降的妖魔是什么淋昭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任俐填,我火速辦了婚禮,結(jié)果婚禮上翔忽,老公的妹妹穿的比我還像新娘英融。我一直安慰自己,他們只是感情好歇式,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布驶悟。 她就那樣靜靜地躺著,像睡著了一般贬丛。 火紅的嫁衣襯著肌膚如雪撩银。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天豺憔,我揣著相機(jī)與錄音额获,去河邊找鬼够庙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛抄邀,可吹牛的內(nèi)容都是我干的耘眨。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼境肾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼剔难!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起奥喻,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤偶宫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后环鲤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體纯趋,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年冷离,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吵冒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡西剥,死狀恐怖痹栖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瞭空,我是刑警寧澤揪阿,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站匙铡,受9級(jí)特大地震影響图甜,放射性物質(zhì)發(fā)生泄漏碍粥。R本人自食惡果不足惜鳖眼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嚼摩。 院中可真熱鬧钦讳,春花似錦、人聲如沸枕面。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)潮秘。三九已至琼开,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枕荞,已是汗流浹背柜候。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工搞动, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人渣刷。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓鹦肿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親辅柴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子箩溃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361