Esempio n. 1
0
def getopts(argv=sys.argv):
    
    global TEST 
    global RESULT_DB
    global RESULT_FILE 

    try:
        opts, args = getopt.getopt(argv[1:],"ht:f:r:",["help",'test', 'file', 'report'])
    except getopt.GetoptError:
        usage()

    if len(argv) <= 1:
        usage()

    for opt,value in opts:
        if opt in ('-h','--help'):
            usage()
        
        if opt in ('-t', '--test'):
            if value not in TOOLS:
                lptlog.error('请核对测试工具,不支持您所输入的测试工具 %s' % value)
                sys.exit()
            else:
                TEST = value
   
        if opt in ('-f', '--file'):
            if os.path.isfile(value):
                RESULT_DB = value
    
     
        if opt in ('-r', '--report'):
            RESULT_FILE = value
Esempio n. 2
0
File: jobs.py Progetto: Scemoon/lpts
def getopts(argv=sys.argv):
    '''
    自定义参数
    '''
    tools_list = []
    
    try:
        opts, args = getopt.getopt(argv[1:],"ht:g:",["help",'test', 'group'])
    except getopt.GetoptError:
        usage()

    if len(argv) <= 1:
	   usage()

    for opt,value in opts:
        if opt in ('-h','--help'):
            usage()
        if opt == '-t':
            if value not in TOOLS:
                lptlog.error('请核对测试工具,不支持您所输入的测试工具 %s' % value)
                sys.exit()
            else:
                tools_list.append(value)
                
        if opt in ('-g', '--group'):
             value_list = value.split()
             for tools in  value_list:
		          if tools in TOOLS:
		              tools_list.append(tools)
        else:
		      lptlog.warning('%s不是有效的测试工具,请核对工具名称' % tools)
    
    return tools_list
Esempio n. 3
0
File: jobs.py Progetto: zhyh329/lpts
def add_job(tools_list,
            jobs_xml=JOBS_XML,
            parameter=default_parameter,
            job_attrib={},
            resultXmlName="results"):
    '''
    创建新任务
    @param tools_list:工具列表
    @type tools_list: list 
    '''
    try:
        lptlog.info('''
                        ~~~~~~~~~~~~~~~~~~~~
                          开始创建测试任务
                        ~~~~~~~~~~~~~~~~~~~~''')
        lptlog.debug("指定测试工具集: %s" % utils.list_to_str(tools_list))
        lptxml.add_job(jobs_xml,
                       tools_list,
                       parameter,
                       job_attrib=job_attrib,
                       resultXmlName=resultXmlName)
        lptlog.info('''
                        ++++++++++++++++++
                         创建测试任务:PASS
                        ++++++++++++++++++''')
    except CreateJobException, e:
        lptlog.debug(e)
        lptlog.error('''
                        ++++++++++++++++++
                         创建测试任务:FAIL
                        ++++++++++++++++++''')
Esempio n. 4
0
File: jobs.py Progetto: zhyh329/lpts
def getopts(argv=sys.argv):
    '''
    自定义参数
    '''
    tools_list = []

    try:
        opts, args = getopt.getopt(argv[1:], "ht:g:",
                                   ["help", 'test', 'group'])
    except getopt.GetoptError:
        usage()

    if len(argv) <= 1:
        usage()

    for opt, value in opts:
        if opt in ('-h', '--help'):
            usage()
        if opt == '-t':
            if value not in TOOLS:
                lptlog.error('请核对测试工具,不支持您所输入的测试工具 %s' % value)
                sys.exit()
            else:
                tools_list.append(value)

        if opt in ('-g', '--group'):
            value_list = value.split()
            for tools in value_list:
                if tools in TOOLS:
                    tools_list.append(tools)
        else:
            lptlog.warning('%s不是有效的测试工具,请核对工具名称' % tools)

    return tools_list
Esempio n. 5
0
 def _print_complier_log(*args, **kwargs):
     try:
         ret = func(*args, **kwargs)
     except Exception:
         lptlog.error('编译:FAIL')
     #    os.chdir(root_dir)
         raise CompileException()
     else:
         lptlog.info('编译:OK')
     return ret
Esempio n. 6
0
 def _print_complier_log(*args, **kwargs):
     try:
         ret = func(*args, **kwargs)
     except Exception:
         lptlog.error('编译:FAIL')
         #    os.chdir(root_dir)
         raise CompileException()
     else:
         lptlog.info('编译:OK')
     return ret
Esempio n. 7
0
File: jobs.py Progetto: Scemoon/lpts
def main():
    tools_list = getopts()
    
    if not tools_list :
        lptlog.error('没有输入有效的测试工具')
        sys.exit()
    else:
        	lptlog.info('测试工具集:%s' % ', '.join(tools_list))
    
    add_job(tools_list)
Esempio n. 8
0
File: jobs.py Progetto: zhyh329/lpts
def main():
    tools_list = getopts()

    if not tools_list:
        lptlog.error('没有输入有效的测试工具')
        sys.exit()
    else:
        lptlog.info('测试工具集:%s' % ', '.join(tools_list))

    add_job(tools_list)
Esempio n. 9
0
def run_shell(cmd, args_list=[]):
    '''
        采用os.system执行shell
    '''
    args_string_list = map(str, args_list)
    commands = cmd + " " + " ".join(args_string_list)
    try:
        lptlog.debug("执行命令:%s" % commands)
        os.system(commands)
    except Exception:
        #lptlog.exception("执行 %s 发生Error:" % commands)
        lptlog.error("执行 %s 发生Error:" % commands)
        raise RunShellError()
Esempio n. 10
0
def run_shell(cmd, args_list=[]):
    """
        采用os.system执行shell
    """
    args_string_list = map(str, args_list)
    commands = cmd + " " + " ".join(args_string_list)
    try:
        lptlog.debug("执行命令:%s" % commands)
        os.system(commands)
    except Exception:
        # lptlog.exception("执行 %s 发生Error:" % commands)
        lptlog.error("执行 %s 发生Error:" % commands)
        raise RunShellError()
Esempio n. 11
0
def run_cmd(command, args=[], timeout=None, ignore_status=False, output_tee=None):
    """
    Run a command on the host.

    @param command: the command line string.
    @param timeout: time limit in seconds before attempting to kill the
            running process. The run() function will take a few seconds
            longer than 'timeout' to complete if it has to kill the process.
    @param ignore_status: do not raise an exception, no matter what the exit

    @param ignore_status: do not raise an exception, no matter what the exit
            code of the command is.
    @param stdout_tee: optional file-like object to which stdout data
            will be written as it is generated (data will still be stored
            in result.stdout).
    @param args: sequence of strings of arguments to be given to the command
            inside " quotes after they have been escaped for that; each
            element in the sequence will be given as a separate command
            argument

    :return: a CmdResult object

    :raise CmdError: the exit code of the command execution was not 0
    """

    if not isinstance(args, list):
        raise TypeError('Got a string for the "args" keyword argument, '
                        'need a list.')
    for arg in args:
        command += ' "%s"' % sh_escape(arg)
    lptlog.debug("执行命令:%s" % command)
    p = subprocess.Popen(command,  stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    output, output_err = p.communicate()
    
    if timeout and isinstance(timeout, int):
        time.sleep(timeout)
        retcode = p.poll()
        if retcode:
            lptlog.error('运行 %d 秒,%s 程序无响应' %(timeout, command))
            raise  CalledProcessError()
    
    if p.wait():
        lptlog.error("执行命令: %s, 输出错误信息:\n%s" %(command, output_err))
        if not ignore_status:
            raise CalledProcessError(p.poll(), command)
    elif output_tee:
        lptlog.debug("执行命令: %s, 输出信息:\n %s" %(command, output))
        return output 
    else:
        lptlog.debug("执行命令: %s, 输出信息:\n %s" %(command, output))
        return 0
Esempio n. 12
0
def copy(src, dst):
    '''@attention: first,如果src为file,赋予 777 权限
        '''
    try:
        if os.path.isfile(src):
            os.chmod(src, stat.S_IRWXU)
            shutil.copy2(src, dst)
        elif os.path.isdir(src):
            shutil.copytree(src, dst)
        else:
            pass
    except Exception:
        lptlog.error("文件/文件夹不存在或权限不足, copy失败")
        raise PermitsError()
Esempio n. 13
0
def copy(src, dst):
    """@attention: first,如果src为file,赋予 777 权限
        """
    try:
        if os.path.isfile(src):
            os.chmod(src, stat.S_IRWXU)
            shutil.copy2(src, dst)
        elif os.path.isdir(src):
            shutil.copytree(src, dst)
        else:
            pass
    except Exception:
        lptlog.error("文件/文件夹不存在或权限不足, copy失败")
        raise PermitsError()
Esempio n. 14
0
def run_cmd(command, args=[], timeout=None, ignore_status=False, output_tee=None):
    """
    Run a command on the host.

    @param command: the command line string.
    @param timeout: time limit in seconds before attempting to kill the
            running process. The run() function will take a few seconds
            longer than 'timeout' to complete if it has to kill the process.
    @param ignore_status: do not raise an exception, no matter what the exit

    @param ignore_status: do not raise an exception, no matter what the exit
            code of the command is.
    @param stdout_tee: optional file-like object to which stdout data
            will be written as it is generated (data will still be stored
            in result.stdout).
    @param args: sequence of strings of arguments to be given to the command
            inside " quotes after they have been escaped for that; each
            element in the sequence will be given as a separate command
            argument

    :return: a CmdResult object

    :raise CmdError: the exit code of the command execution was not 0
    """

    if not isinstance(args, list):
        raise TypeError('Got a string for the "args" keyword argument, ' "need a list.")
    for arg in args:
        command += ' "%s"' % sh_escape(arg)
    lptlog.debug("执行命令:%s" % command)
    p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    output, output_err = p.communicate()

    if timeout and isinstance(timeout, int):
        time.sleep(timeout)
        retcode = p.poll()
        if retcode:
            lptlog.error("运行 %d 秒,%s 程序无响应" % (timeout, command))
            raise CalledProcessError()

    if p.wait():
        lptlog.error("执行命令: %s, 输出错误信息:\n%s" % (command, output_err))
        if not ignore_status:
            raise CalledProcessError(p.poll(), command)
    elif output_tee:
        lptlog.debug("执行命令: %s, 输出信息:\n %s" % (command, output))
        return output
    else:
        lptlog.debug("执行命令: %s, 输出信息:\n %s" % (command, output))
        return 0
Esempio n. 15
0
File: run.py Progetto: zhyh329/lpts
def main():
    #判断是否root用户
    #if os.getuid() <>0:
     #   lptlog.critical('请使用root用户')
      #  sys.exit()
        
    lptlog.info(__START_MSG)
    try:
        if not os.path.isfile(JOBS_XML):
            #lptlog.warning("jobs.xml文件不存在")
            raise NameError, "%s 不存在"  % JOBS_XML
        run()
    except Exception, e:
        lptlog.error('Debug Message: %s' % e)
Esempio n. 16
0
def run_shell2(cmd, args_list=[], file=None):
    """
        采用subprocess.call执行测试
    """
    args_list.insert(0, cmd)
    args_string_list = map(str, args_list)

    lptlog.info("执行命令: %s" % " ".join(args_string_list))

    if file:
        fd = open(file, "w")
    else:
        fd = None

    status = subprocess.call(args_string_list, stdout=fd, stderr=fd)

    if status > 0:
        lptlog.error("执行 %s 发生Error:" % " ".join(args_string_list))
        raise RunShellError()

    if file:
        fd.close()
Esempio n. 17
0
def run_shell2(cmd, args_list=[], file=None):
    '''
        采用subprocess.call执行测试
    '''
    args_list.insert(0, cmd)
    args_string_list = map(str, args_list)
    
    lptlog.info("执行命令: %s" % " ".join(args_string_list))
                 
    if file:
        fd = open(file, 'w')
    else:
        fd=None
        
    status = subprocess.call(args_string_list, stdout=fd, stderr=fd)
    
    if status > 0:
        lptlog.error("执行 %s 发生Error:" % " ".join(args_string_list))
        raise  RunShellError()
    
    if file:
        fd.close()
Esempio n. 18
0
File: jobs.py Progetto: Scemoon/lpts
def add_job(tools_list, jobs_xml=JOBS_XML, parameter=default_parameter, job_attrib={}, resultXmlName="results"):
    '''
    创建新任务
    @param tools_list:工具列表
    @type tools_list: list 
    '''
    try:
        lptlog.info('''
                        ~~~~~~~~~~~~~~~~~~~~
                          开始创建测试任务
                        ~~~~~~~~~~~~~~~~~~~~''')
        lptlog.debug("指定测试工具集: %s" % utils.list_to_str(tools_list))
        lptxml.add_job(jobs_xml, tools_list, parameter, job_attrib=job_attrib, resultXmlName=resultXmlName)
        lptlog.info('''
                        ++++++++++++++++++
                         创建测试任务:PASS
                        ++++++++++++++++++''')
    except CreateJobException, e:
        lptlog.debug(e)
        lptlog.error('''
                        ++++++++++++++++++
                         创建测试任务:FAIL
                        ++++++++++++++++++''')
Esempio n. 19
0
def hash_file(filename, size=None, method="md5"):
    """
    Calculate the hash of filename.
    If size is not None, limit to first size bytes.
    Throw exception if something is wrong with filename.
    Can be also implemented with bash one-liner (assuming size%1024==0):
    dd if=filename bs=1024 count=size/1024 | sha1sum -

    :param filename: Path of the file that will have its hash calculated.
    :param method: Method used to calculate the hash. Supported methods:
            * md5
            * sha1
    :return: Hash of the file, if something goes wrong, return None.
    """
    chunksize = 4096
    fsize = os.path.getsize(filename)

    if not size or size > fsize:
        size = fsize
    f = open(filename, "rb")

    try:
        hash = hash_method(method)
    except ValueError:
        lptlog.error("Unknown hash type %s, returning None" % method)

    while size > 0:
        if chunksize > size:
            chunksize = size
        data = f.read(chunksize)
        if len(data) == 0:
            lptlog.debug("Nothing left to read but size=%d" % size)
            break
        hash.update(data)
        size -= len(data)
    f.close()
    return hash.hexdigest()
Esempio n. 20
0
def hash_file(filename, size=None, method="md5"):
    """
    Calculate the hash of filename.
    If size is not None, limit to first size bytes.
    Throw exception if something is wrong with filename.
    Can be also implemented with bash one-liner (assuming size%1024==0):
    dd if=filename bs=1024 count=size/1024 | sha1sum -

    :param filename: Path of the file that will have its hash calculated.
    :param method: Method used to calculate the hash. Supported methods:
            * md5
            * sha1
    :return: Hash of the file, if something goes wrong, return None.
    """
    chunksize = 4096
    fsize = os.path.getsize(filename)

    if not size or size > fsize:
        size = fsize
    f = open(filename, 'rb')

    try:
        hash = hash_method(method)
    except ValueError:
        lptlog.error("Unknown hash type %s, returning None" % method)

    while size > 0:
        if chunksize > size:
            chunksize = size
        data = f.read(chunksize)
        if len(data) == 0:
            lptlog.debug("Nothing left to read but size=%d" % size)
            break
        hash.update(data)
        size -= len(data)
    f.close()
    return hash.hexdigest()
Esempio n. 21
0
File: lpts.py Progetto: zhyh329/lpts
    def parser_opts(self, argv=sys.argv):
        opts = self.parser(argv)
        #检查是否root用户
        #        self.check_root()
        #设定log格式
        if opts.verbose:
            lptlog.update_logger(quiet=opts.verbose)
        #
        if opts.loglevel:
            lptlog.update_logger(level=opts.loglevel)

        if opts.parameter:
            if os.path.isfile(opts.parameter):
                parameterConfig = opts.parameter
        else:
            parameterConfig = defaultParameter

        TOOLS_LIST = readconfig.para_conf(
            config=parameterConfig).get_sections()
        #获取工具列表
        if opts.tools_list:
            #self.tools_list.extend(filter(lambda x: TOOLS_LIST.count(x)>0, opts.tools_list))
            self.tools_list.extend(
                [tool for tool in opts.tools_list if tool in TOOLS_LIST])

        if opts.tools_group:
            #self.tools_list.extend(filter(lambda x: TOOLS_LIST.count(x)>0, opts.tools_group.split(',')))
            self.tools_list.extend([
                tool for tool in opts.tools_group.split(',')
                if tool in TOOLS_LIST
            ])

        if self.tools_list:

            self.tools_list = {}.fromkeys(self.tools_list).keys()
            #lptlog.info("工具集合: %s" % ",".join(self.tools_list ))

        #jobs_xml
        self.jobs_xml = os.path.realpath(opts.jobs_xml)

        try:
            #创建job,可以指定jobs_xml,指定测试工具,指定job名称
            if opts.mode == 0:
                if opts.JobName:
                    self.jobName = opts.JobName
                jobs.add_job(self.tools_list,
                             jobs_xml=self.jobs_xml,
                             parameter=parameterConfig,
                             job_attrib={'name': '%s' % self.jobName})

            #定义执行任务的方法
            elif opts.mode == 1:
                #开始测试
                lptlog.info(START_MSG)
                if not os.path.abspath(self.jobs_xml):
                    #lptlog.warning("缺失jobs文件,请核对jobs文件或者重新创建job")
                    raise optparse.OptionValueError, "缺失jobs文件,请核对jobs文件或者重新创建job"

                else:
                    Jobrun.run(job_id=opts.job_id,
                               tools_list=self.tools_list,
                               jobs_xml=self.jobs_xml,
                               format='txt',
                               clean=opts.clean)

                    lptlog.info(STOP_MSG)

            elif opts.mode == 2:

                if not opts.resultdb or not os.path.abspath(opts.resultdb):
                    #lptlog.warning("请指定result databases(xml)")
                    raise optparse.OptionValueError, "请指定result databases(xml)"

                if not os.path.isdir(opts.reportdir):
                    lptlog.warning("%s 不是有效的目录" % opts.reportdir)
                    os.makedirs(opts.reportdir, mode=0777)

                Testreport.report(os.path.realpath(opts.resultdb),
                                  opts.reportdir,
                                  tools_list=self.tools_list,
                                  reportname=opts.reportname,
                                  format=opts.format,
                                  chart=opts.genchart)

            elif opts.mode == 3:
                if opts.compareFiles:
                    xmls_list = [
                        os.path.realpath(str(xml))
                        for xml in opts.compareFiles.split(',')
                        if os.path.abspath(xml)
                    ]
                else:
                    xmls_list = []

                if opts.compareNames:
                    names_list = [
                        str(name).strip()
                        for name in opts.compareNames.split(',')
                    ]
                else:
                    names_list = []

                compare.compare(xmls_list,
                                resultDir=opts.reportdir,
                                reportFile=opts.reportname,
                                names=names_list,
                                tools=self.tools_list,
                                reportType=opts.format,
                                chart=opts.genchart)
            else:
                if opts.jobs_list:
                    #检查是否存在jobs xml文件
                    if not os.path.isfile(self.jobs_xml):
                        #lptlog.warning("缺失jobs文件,请核对jobs文件或者重新创建job")
                        #raise NameError("")
                        #raise ValueError, "缺失jobs文件,请核对jobs文件或者重新创建job"
                        pass
                    else:
                        self.list_jobs(self.jobs_xml)
                #else:
                #   lptlog.warning("-h or --help show help message...")
        except KeyboardInterrupt:
            lptlog.warning("按下CTRL+C,将停止测试程序")
            sys.exit()
        except optparse.OptionValueError, e:
            lptlog.error("Bad option or value: %s" % e)
Esempio n. 22
0
File: lpts.py Progetto: aszhou/lpts
    def parser_opts(self, argv=sys.argv):
        opts = self.parser(argv)
       #检查是否root用户
#        self.check_root()
       #设定log格式
        if opts.verbose:
           lptlog.update_logger(quiet=opts.verbose)
        #
        if opts.loglevel:
            lptlog.update_logger(level=opts.loglevel)
        
	if opts.parameter:
	    if os.path.isfile(opts.parameter):
	        parameterConfig = opts.parameter
	else:
	    parameterConfig = defaultParameter

        TOOLS_LIST = readconfig.para_conf(config=parameterConfig).get_sections()
       #获取工具列表    
        if opts.tools_list:
            #self.tools_list.extend(filter(lambda x: TOOLS_LIST.count(x)>0, opts.tools_list))
            self.tools_list.extend([ tool for tool in opts.tools_list if tool in TOOLS_LIST])
        
        if opts.tools_group:
            #self.tools_list.extend(filter(lambda x: TOOLS_LIST.count(x)>0, opts.tools_group.split(',')))
            self.tools_list.extend([ tool for tool in opts.tools_group.split(',') if tool in TOOLS_LIST])
           
        if self.tools_list:
            
            self.tools_list = {}.fromkeys(self.tools_list).keys()
            #lptlog.info("工具集合: %s" % ",".join(self.tools_list ))
             
        #jobs_xml
        self.jobs_xml = os.path.realpath(opts.jobs_xml)

        try:
            #创建job,可以指定jobs_xml,指定测试工具,指定job名称
            if opts.mode == 0:
                if opts.JobName:
                    self.jobName = opts.JobName
                jobs.add_job(self.tools_list, jobs_xml=self.jobs_xml, parameter=parameterConfig, job_attrib={'name':'%s' % self.jobName})
               
            #定义执行任务的方法
            elif opts.mode == 1:
                #开始测试
                lptlog.info(START_MSG)
                if not os.path.abspath(self.jobs_xml):
                    #lptlog.warning("缺失jobs文件,请核对jobs文件或者重新创建job")
                    raise optparse.OptionValueError, "缺失jobs文件,请核对jobs文件或者重新创建job"
                    
                else:
                    Jobrun.run(job_id=opts.job_id, tools_list=self.tools_list, 
                               jobs_xml=self.jobs_xml, format='txt', clean=opts.clean)
                   
                    lptlog.info(STOP_MSG)
                
            elif opts.mode == 2:

                if not  opts.resultdb  or not os.path.abspath(opts.resultdb):
                    #lptlog.warning("请指定result databases(xml)")
                    raise optparse.OptionValueError, "请指定result databases(xml)"
                        
                if not os.path.isdir(opts.reportdir):
                    lptlog.warning("%s 不是有效的目录" % opts.reportdir)
                    os.makedirs(opts.reportdir, mode=777)
                
                Testreport.report(os.path.realpath(opts.resultdb), opts.reportdir, tools_list=self.tools_list,
                                   reportname=opts.reportname, format=opts.format, chart=opts.genchart)
                
            elif opts.mode == 3:
                if opts.compareFiles:
                    xmls_list = [ os.path.realpath(str(xml)) for xml in opts.compareFiles.split(',') if os.path.abspath(xml)]
                else:
                    xmls_list = []
                    
                if opts.compareNames:
                    names_list = [ str(name).strip() for name in opts.compareNames.split(',')]
                else:
                    names_list = []
               
                compare.compare(xmls_list, resultDir=opts.reportdir ,reportFile=opts.reportname, names=names_list, 
                                tools=self.tools_list, reportType=opts.format, chart=opts.genchart)
            else:
                if opts.jobs_list:
                    #检查是否存在jobs xml文件
                    if not os.path.isfile(self.jobs_xml):
                        #lptlog.warning("缺失jobs文件,请核对jobs文件或者重新创建job")
                        #raise NameError("")
                        raise ValueError, "缺失jobs文件,请核对jobs文件或者重新创建job"
                    else:
                        self.list_jobs(self.jobs_xml)
                #else:
                 #   lptlog.warning("-h or --help show help message...")
        except KeyboardInterrupt:
            lptlog.warning("按下CTRL+C,将停止测试程序")
            sys.exit()
        except optparse.OptionValueError, e:
            lptlog.error("Bad option or value: %s" % e)
Esempio n. 23
0
def has_gcc():
    if os.path.isfile('/usr/bin/gcc') or os.path.isfile('/bin/gcc') or os.path.isfile('/sbin/gcc'):
        lptlog.info("gcc 检查:PASS")
    else:
        lptlog.error("gcc 检查:FAIL")
        raise DespendException, "gcc"
Esempio n. 24
0
    
def main():
    global TEST 
    global RESULT_DB
    global RESULT_FILE 
        
    getopts()
    if TEST is None:
        lptlog.critical("请指定测试工具")
        usage()
        
        
    if RESULT_DB is None:
        lptlog.critical("请指定result Databases")
        usage()
        
    if RESULT_FILE is None:
        lptlog.critical("请指定report Name")
        usage()

    lptlog.info('\n指定工具:%s\n报告文件:%s' % (TEST, RESULT_FILE))
    lptreport.save_result(TEST, RESULT_FILE, RESULT_DB)
    

if __name__ == "__main__":
    try:
        main()
    except Exception:
        #lptlog.exception('生成测试报告:FAIL')
        lptlog.error('生成测试报告:FAIL')
Esempio n. 25
0
File: run.py Progetto: zhyh329/lpts
     if not test_tools:
         #lptlog.warning('指定运行的测试工具已经全部执行完毕, 请重新创建任务')
         raise TestOK, '指定运行的测试工具已经全部执行完毕, 请重新创建任务'
     else:
         tools_string = " ".join(test_tools)
         lptlog.debug("尚未执行完毕的测试工具集:%s" % tools_string)
    
 for tool in test_tools:
     lptlog.info(__BEGIN_MSG % tool)
     try:
         control.run(tool, jobs_xml, job_node, clean=clean)
     except Exception, e:
         lptlog.debug(e)
         lptlog.error('''
                 ----------------------------------
                 +       %s 测试:FAIL    +
                 ----------------------------------
                 ''' % tool) 
         lptlog.info(__END_MSG % tool)
         #lptlog.exception("")
         if test_tools[-1] == tool:
             raise TestOK, "Test Over, but Some Case FAIL"
         else:
             continue
     else:
         #python 2.7
         #jobs.set_tool_status(job_node.find("tool[@id='%s']" % tool), 'ok')
         #python 2.6
         tool_node = filter(lambda x:x.get("id")==tool, jobs.get_tools_nodes(job_node))[0]
         jobs.set_tool_status(tool_node, 'ok')
         jobs.save_file()  
Esempio n. 26
0
def has_gcc():
    if os.path.isfile("/usr/bin/gcc") or os.path.isfile("/bin/gcc") or os.path.isfile("/sbin/gcc"):
        lptlog.info("gcc 检查:PASS")
    else:
        lptlog.error("gcc 检查:FAIL")
        raise DespendException, "gcc"
Esempio n. 27
0
File: run.py Progetto: Scemoon/lpts
def run(job_id=None,
        tools_list=None,
        jobs_xml=JOBS_XML,
        format='txt',
        clean=False,
        REBOOT=False):
    jobs = lptxml.Jobs(jobs_xml)
    if job_id is None:
        try:
            job_node = jobs.get_new_job()
        except IndexError as e:
            lptlog.debug("job任务数为0, 期望非0")
            job_node = None
    else:

        #python 2.7
        #job_node = jobs.search_job_node("job[@id='%s']" % job_id)
        #python 2.6
        job_nodes = jobs.search_job_nodes("job")
        if job_nodes is None:
            lptlog.debug("job任务数为0, 期望非0")
            job_node = None
        else:
            job_filter_nodes = [
                x for x in job_nodes if x.get("id") == str(job_id)
            ]
            if job_filter_nodes:
                job_node = job_filter_nodes[0]
            else:
                lptlog.debug("%s id不存在,请核对JOB ID" % job_id)
                job_node = None

    if job_node is None:
        #lptlog.error()
        raise MissXML("没有找到对应的job任务, 请核对jobs.xml或者重新创建测试任务")

    #判断所有工具是否已经全部执行完毕
    no_exec_tools_nodes_list = jobs.get_noexec_tools_nodes(job_node)
    if not no_exec_tools_nodes_list:
        #lptlog.warning('任务中所有工具状态都已正确执行, 请重新创建测试任务')
        raise TestOK("任务中所有工具状态都已正确执行, 请重新创建测试任务")
    else:
        no_exec_tools = list(map(jobs.get_tool_name, no_exec_tools_nodes_list))

    if not tools_list:
        lptlog.debug("未指定测试工具,将默认执行job中未执行成功的测试工具")
        test_tools = list(map(jobs.get_tool_name, no_exec_tools_nodes_list))
    else:  #python 2.7 #tools = filter(lambda x:job_node.find("tool[@id='%s']" % x).get('status') == "no", tools_list) #python 2.6 #no_exec_tools = map(lambda y:y.get('id'), jobs.get_noexec_tools_nodes(job_node)) #tools = filter(lambda x:no_exec_tools.count(x)>0, tools_list)
        test_tools = [tool for tool in no_exec_tools if tool in tools_list]

        if not test_tools:
            #lptlog.warning('指定运行的测试工具已经全部执行完毕, 请重新创建任务')
            raise TestOK('指定运行的测试工具已经全部执行完毕, 请重新创建任务')
        else:
            tools_string = " ".join(test_tools)
            lptlog.debug("尚未执行完毕的测试工具集:%s" % tools_string)

    for tool in test_tools:
        lptlog.info(__BEGIN_MSG % tool)
        try:
            control.run(tool, jobs_xml, job_node, clean=clean)
        except Exception as e:
            lptlog.debug(e)
            lptlog.error('''
                    ----------------------------------
                    +       %s 测试:FAIL    +
                    ----------------------------------
                    ''' % tool)
            lptlog.info(__END_MSG % tool)
            #lptlog.exception("")
            if test_tools[-1] == tool:
                raise TestOK("Test Over, but Some Case FAIL")
            else:
                continue
        else:
            #python 2.7
            #jobs.set_tool_status(job_node.find("tool[@id='%s']" % tool), 'ok')
            #python 2.6
            tool_node = [
                x for x in jobs.get_tools_nodes(job_node)
                if x.get("id") == tool
            ][0]
            jobs.set_tool_status(tool_node, 'ok')
            jobs.save_file()
            lptlog.info('''
                    ----------------------------------
                    +       %s 测试:PASS    +
                    ----------------------------------
                    ''' % tool)
            lptlog.info(__END_MSG % tool)

            if REBOOT:
                break
Esempio n. 28
0
File: lpts.py Progetto: zhyh329/lpts
class Lpt:
    '''
  Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -v, --verbose         Print log message.
  -q, --quite           No print log message
  -L LEVEL, --LEVEL=LEVEL
                        Log Level:debug,info,warning,error,critical
  -t TOOL, --tool=TOOL  Test Tool
  -g TOOLS, --group=TOOLS
                        Test Tools, example:unixbench,stream

  Job:
    --create            create job use tools of you give by -t or by -g
                        option,default use all tools in parameter.conf.
    -n JobName, --name=JobName
                        set job name
    -f JobsDB, --file=JobsDB
                        jobs databases file of xml
    -i JobID, --id=JobID
                        job id for run or report
    -l, --list          list all jobs

  Run:
    --run               Run job by use job id, default last .You can use tool
                        of you give by -t option, default run all tools that
                        not execute in job tasks
    --clean             clean all temporary file after testing

  Report:
    -F FORMAT           set report format:txt、execl、doc or pdf
    -r NAME             set report name
    -d DIR              set report dir
    --report            create report,with result databases file of xml
    -R XML              get result databases of xml
    --compare           performance compare
    -X resultsXml, --XML=resultsXml
                        Result databases of xmls, separate tags with commas
    -N names, --Names=names
                        point Test Objects, separate tags with commas
    '''
    def __init__(self):
        self.tools_list = []
        self.jobs_xml = None
        self.jobName = "lpt_%s" % utils.gen_random_strs()

    def set_jobName(self, name):
        pass

    def parser(self, argv):
        usage = "usage: %prog [options]"
        parser = OptionParser(usage=usage, version="%prog 3.0.0")

        parser.add_option('-v',
                          '--verbose',
                          action='store_false',
                          dest='verbose',
                          default=False,
                          help='Print log message.')
        parser.add_option('-q',
                          '--quite',
                          action='store_true',
                          dest='verbose',
                          help='No print log message')
        parser.add_option('-L',
                          '--LEVEL',
                          action='store',
                          metavar="LEVEL",
                          dest='loglevel',
                          choices=("info", "debug", 'warning', "error",
                                   "critical"),
                          help='Log Level:debug,info,warning,error,critical')
        parser.add_option('-t',
                          '--tool',
                          action='append',
                          dest="tools_list",
                          metavar="TOOL",
                          help="Test Tool")
        parser.add_option('-g',
                          '--group',
                          action='store',
                          dest="tools_group",
                          metavar="TOOLS",
                          help="Test Tools, example:unixbench,stream")

        job_group = OptionGroup(parser, "Job")
        job_group.add_option(
            '--create',
            action='store_const',
            const=0,
            dest='mode',
            help=
            "create job use tools of you give by -t or by -g option,default use all tools in parameter.conf."
        )
        job_group.add_option('-n',
                             '--name',
                             action='store',
                             dest='JobName',
                             metavar="JobName",
                             help="set job name")
        job_group.add_option('-p',
                             '--parameter',
                             action='store',
                             dest='parameter',
                             metavar="conf",
                             help="parameter config file")
        job_group.add_option('-f',
                             '--file',
                             action='store',
                             dest='jobs_xml',
                             metavar="JobsDB",
                             default=JOBS_XML,
                             help='jobs databases file of xml')
        job_group.add_option('-i',
                             '--id',
                             action="store",
                             dest='job_id',
                             metavar="JobID",
                             help="job id for run or report")
        job_group.add_option('-l',
                             '--list',
                             action='store_true',
                             dest='jobs_list',
                             help='list all jobs')
        parser.add_option_group(job_group)

        run_group = OptionGroup(parser, "Run")
        run_group.add_option(
            '--run',
            action="store_const",
            const=1,
            dest='mode',
            help=
            "Run job by use job id, default last .You can use tool of you give by -t option, default run all tools that not execute in job tasks"
        )
        run_group.add_option('--clean',
                             action='store_true',
                             dest='clean',
                             default=False,
                             help='clean all temporary file after testing')
        parser.add_option_group(run_group)

        report_group = OptionGroup(parser, "Report")
        report_group.add_option('-F',
                                action="store",
                                dest="format",
                                choices=('txt', 'xls', 'doc', 'pdf'),
                                metavar="FORMAT",
                                default='xls',
                                help="set report format:txt、execl、doc or pdf")

        report_group.add_option('-r',
                                action="store",
                                dest="reportname",
                                metavar="NAME",
                                help="set report name")
        report_group.add_option('-d',
                                action="store",
                                dest="reportdir",
                                metavar="DIR",
                                default=RESULTS_DIR,
                                help="set report dir")
        report_group.add_option("--chart",
                                action="store_true",
                                dest="genchart",
                                default=False,
                                help="generate chart, default False")

        report_group.add_option(
            '--report',
            action='store_const',
            const=2,
            dest="mode",
            help="create report,with result databases file of xml")
        report_group.add_option('-R',
                                action='store',
                                dest="resultdb",
                                metavar="XML",
                                help="get result databases of xml")

        report_group.add_option('--compare',
                                action="store_const",
                                const=3,
                                dest="mode",
                                help="performance compare")
        report_group.add_option(
            '-X',
            '--XML',
            action="store",
            dest="compareFiles",
            metavar="resultsXml",
            help="Result databases of xmls, separate tags with commas")
        report_group.add_option(
            '-N',
            '--Names',
            action="store",
            dest="compareNames",
            metavar="names",
            help="point Test Objects, separate tags with commas")

        parser.add_option_group(report_group)

        opts, args = parser.parse_args(argv)

        return opts

    def check_root(self):
        if os.getuid() <> 0:
            lptlog.warning("请使用root用户执行测试用例")
            sys.exit()
            #raise UnRootError("请使用root用户执行测试用例")

    def _print_tools(self, tool_list, tools_nodes, jobs_object):

        status_tools = [
            "%s:'%s'" % (tool, jobs_object.get_tool_status(tools_nodes, tool))
            for tool in tool_list
        ]
        return "|".join(status_tools)

    def list_jobs(self, jobs_xml):
        print "-" * 90
        print "%12s%18s%30s%30s" % ("JOBID", "JOBNAME", "resultsDB", "STATUS")
        print "-" * 90
        jobs_object = lptxml.Jobs(jobs_xml)
        #jobs_nodes = lptxml.search_job_nodes('job', xml_file=jobs_xml)
        jobs_nodes = jobs_object.search_job_nodes('job')
        if jobs_nodes:
            for job_node in jobs_nodes:
                #resultsdb = lptxml.get_job_text("resultsDB", xml_file=jobs_xml, job_node=job_node)
                resultsdb = jobs_object.get_job_text(job_node, "resultsDB")
                #tool_list = map(lambda x:x.get('id'), lptxml.get_tools_nodes(job_node))
                tools_nodes = jobs_object.get_tools_nodes(job_node)
                tool_list = map(lambda x: x.get('id'), tools_nodes)
                if len(tool_list) < 3:
                    tools_string = self._print_tools(tool_list, tools_nodes,
                                                     jobs_object)
                    print "%12s%18s%30s%30s" % (job_node.get('id'),
                                                job_node.get('name'),
                                                resultsdb, tools_string)
                else:
                    tools_string = self._print_tools(tool_list[0:2],
                                                     tools_nodes, jobs_object)
                    print "%12s%18s%30s%30s" % (job_node.get('id'),
                                                job_node.get('name'),
                                                resultsdb, tools_string)
                    n = 2
                    while True:
                        if len(tool_list[n:]) > 2:
                            tools_string = self._print_tools(
                                tool_list[n:n + 2], tools_nodes, jobs_object)
                            print "%90s" % tools_string
                            n = n + 2
                            continue
                        else:
                            tools_string = self._print_tools(
                                tool_list[n:], tools_nodes, jobs_object)
                            print "%90s" % tools_string
                            break
                print "-" * 90

    def parser_opts(self, argv=sys.argv):
        opts = self.parser(argv)
        #检查是否root用户
        #        self.check_root()
        #设定log格式
        if opts.verbose:
            lptlog.update_logger(quiet=opts.verbose)
        #
        if opts.loglevel:
            lptlog.update_logger(level=opts.loglevel)

        if opts.parameter:
            if os.path.isfile(opts.parameter):
                parameterConfig = opts.parameter
        else:
            parameterConfig = defaultParameter

        TOOLS_LIST = readconfig.para_conf(
            config=parameterConfig).get_sections()
        #获取工具列表
        if opts.tools_list:
            #self.tools_list.extend(filter(lambda x: TOOLS_LIST.count(x)>0, opts.tools_list))
            self.tools_list.extend(
                [tool for tool in opts.tools_list if tool in TOOLS_LIST])

        if opts.tools_group:
            #self.tools_list.extend(filter(lambda x: TOOLS_LIST.count(x)>0, opts.tools_group.split(',')))
            self.tools_list.extend([
                tool for tool in opts.tools_group.split(',')
                if tool in TOOLS_LIST
            ])

        if self.tools_list:

            self.tools_list = {}.fromkeys(self.tools_list).keys()
            #lptlog.info("工具集合: %s" % ",".join(self.tools_list ))

        #jobs_xml
        self.jobs_xml = os.path.realpath(opts.jobs_xml)

        try:
            #创建job,可以指定jobs_xml,指定测试工具,指定job名称
            if opts.mode == 0:
                if opts.JobName:
                    self.jobName = opts.JobName
                jobs.add_job(self.tools_list,
                             jobs_xml=self.jobs_xml,
                             parameter=parameterConfig,
                             job_attrib={'name': '%s' % self.jobName})

            #定义执行任务的方法
            elif opts.mode == 1:
                #开始测试
                lptlog.info(START_MSG)
                if not os.path.abspath(self.jobs_xml):
                    #lptlog.warning("缺失jobs文件,请核对jobs文件或者重新创建job")
                    raise optparse.OptionValueError, "缺失jobs文件,请核对jobs文件或者重新创建job"

                else:
                    Jobrun.run(job_id=opts.job_id,
                               tools_list=self.tools_list,
                               jobs_xml=self.jobs_xml,
                               format='txt',
                               clean=opts.clean)

                    lptlog.info(STOP_MSG)

            elif opts.mode == 2:

                if not opts.resultdb or not os.path.abspath(opts.resultdb):
                    #lptlog.warning("请指定result databases(xml)")
                    raise optparse.OptionValueError, "请指定result databases(xml)"

                if not os.path.isdir(opts.reportdir):
                    lptlog.warning("%s 不是有效的目录" % opts.reportdir)
                    os.makedirs(opts.reportdir, mode=0777)

                Testreport.report(os.path.realpath(opts.resultdb),
                                  opts.reportdir,
                                  tools_list=self.tools_list,
                                  reportname=opts.reportname,
                                  format=opts.format,
                                  chart=opts.genchart)

            elif opts.mode == 3:
                if opts.compareFiles:
                    xmls_list = [
                        os.path.realpath(str(xml))
                        for xml in opts.compareFiles.split(',')
                        if os.path.abspath(xml)
                    ]
                else:
                    xmls_list = []

                if opts.compareNames:
                    names_list = [
                        str(name).strip()
                        for name in opts.compareNames.split(',')
                    ]
                else:
                    names_list = []

                compare.compare(xmls_list,
                                resultDir=opts.reportdir,
                                reportFile=opts.reportname,
                                names=names_list,
                                tools=self.tools_list,
                                reportType=opts.format,
                                chart=opts.genchart)
            else:
                if opts.jobs_list:
                    #检查是否存在jobs xml文件
                    if not os.path.isfile(self.jobs_xml):
                        #lptlog.warning("缺失jobs文件,请核对jobs文件或者重新创建job")
                        #raise NameError("")
                        #raise ValueError, "缺失jobs文件,请核对jobs文件或者重新创建job"
                        pass
                    else:
                        self.list_jobs(self.jobs_xml)
                #else:
                #   lptlog.warning("-h or --help show help message...")
        except KeyboardInterrupt:
            lptlog.warning("按下CTRL+C,将停止测试程序")
            sys.exit()
        except optparse.OptionValueError, e:
            lptlog.error("Bad option or value: %s" % e)
        except MissXML, e:
            lptlog.error(e)