#!/usr/bin/python ################################################################### # Copyright (c) 2016 by TAOS Technologies, Inc. # All rights reserved. # # This file is proprietary and confidential to TAOS Technologies. # No part of this file may be reproduced, stored, transmitted, # disclosed or used in any form or by any means other than as # expressly provided by the written permission from Jianhui Tao # ################################################################### # install pip # pip install src/connector/python/ # -*- coding: utf-8 -*- import sys import getopt import os from fabric2 import Connection sys.path.append("pytest") import importlib class CatalogGen: def __init__(self, CaseDirList, CatalogName, DirDepth): self.CaseDirList = CaseDirList self.CatalogName = CatalogName self.blacklist = [] self.DirDepth = DirDepth def CatalogGen(self): for i in self.CaseDirList: self.GetCatalog(i) self.CollectLog(i) print('Catalog Generation done') def CollectLog(self, CaseDir): DirorFiles = os.listdir(CaseDir) for loop in range(self.DirDepth): for i in DirorFiles: fileName = os.path.join(CaseDir, i) if os.path.isdir(fileName): self.CollectLog(fileName) else: if i == self.CatalogName and fileName not in self.blacklist: self.blacklist.append(fileName) with open(fileName, "r") as f : Catalog = f.read() title = CaseDir.split("/")[-1] TitleLevel = CaseDir.count("/") with open(os.path.dirname(CaseDir) + '/' + self.CatalogName, "a") as f : f.write("#" * TitleLevel + ' %s\n' % title) f.write(Catalog) def GetCatalog(self, CaseDir): for root, dirs, files in os.walk(CaseDir): for file in files: if file.endswith(".py"): fileName = os.path.join(root, file) moduleName = fileName.replace(".py", "").replace("/", ".") uModule = importlib.import_module(moduleName) title = file.split('.')[0] TitleLevel = root.count('/') + 1 try: ucase = uModule.TDTestCase() with open(root + '/' + self.CatalogName, 'a') as f: f.write('#'*TitleLevel + ' %s\n' % title) for i in ucase.caseDescription.__doc__.split('\n'): if i.lstrip() == '':continue f.write('* ' + i.strip()+'\n') except : print(fileName) def CleanCatalog(self): for i in self.CaseDirList: for root, dirs, files in os.walk(i): for file in files: if file == self.CatalogName: os.remove(root + '/' + self.CatalogName) print('clean is done') if __name__ == "__main__": CaseDirList = [] CatalogName = '' DirDepth = 0 generate = True delete = True opts, args = getopt.gnu_getopt(sys.argv[1:], 'd:c:v:n:th') for key, value in opts: if key in ['-h', '--help']: print( 'A collection of test cases catalog written using Python') print("-d root dir of test case files written by Python, default: system-test,develop-test") print('-c catalog file name, default: catalog.md') print('-v dir depth of test cases.default: 5') print('-n generate') print('-r delete') sys.exit(0) if key in ['-d']: CaseDirList = value.split(',') if key in ['-c']: CatalogName = value if key in ['-v']: DirDepth = int(value) if key in ['-n']: if (value.upper() == "TRUE"): generate = True elif (value.upper() == "FALSE"): generate = False if key in ['-r']: if (value.upper() == "TRUE"): delete = True elif (value.upper() == "FALSE"): delete = False print(CaseDirList, CatalogName) if CaseDirList == [] : CaseDirList = ['system-test', 'develop-test'] if CatalogName == '' : CatalogName = 'catalog.md' if DirDepth == 0: DirDepth = 5 print('opt:\n\tcatalogname: %s\n\tcasedirlist: %s\n\tdepth: %d\n\tgenerate: %s\n\tdelete: %s' % (CatalogName, ','.join(CaseDirList), DirDepth, generate, delete)) f = CatalogGen(CaseDirList, CatalogName, DirDepth) if delete: f.CleanCatalog() if generate: f.CatalogGen()