Exemple #1
0
 def getABParDic(self):
     '''
     获得ab程序需要参数的字典
     :return:
     '''
     info=self.getInfo()
     logger.debug(info)
     abDict={}
     abDict['Server Software']=info.get('Server','')
     abDict['Server Hostname']=info.get('Effective_url','').split('/')[2]
     abDict['Server IP']=info.get('Primary_ip','')
     abDict['Server Port']=info.get('Primary_port','')
     abDict['Document Path']='/'+('/').join(info.get('Effective_url','').split('/')[3:])
     downloadSize=info.get('Size_download',0)
     abDict['Total transferred']=downloadSize
     content_type=info.get('Content_type','')
     import re
     if re.search('html',content_type):
         abDict['HTML transferred']=downloadSize-info.get('Header_size',0)
     abDict['Document Length']=downloadSize-info.get('Header_size',0)
     abDict['Http_code']=info.get('Http_code',0)
     abDict['Time taken for tests']=info.get('Total_time',0)
     abDict['Name lookup time']=info.get('Namelookup_time',0)
     abDict['Waiting']=info.get('Starttransfer_time',0)
     abDict['Connect']=info.get('Connect_time',0)
     logger.debug(abDict)
     return abDict
Exemple #2
0
 def getABParDic(self):
     '''
     获得ab程序需要参数的字典
     :return:
     '''
     info = self.getInfo()
     logger.debug(info)
     abDict = {}
     abDict['Server Software'] = info.get('Server', '')
     abDict['Server Hostname'] = info.get('Effective_url', '').split('/')[2]
     abDict['Server IP'] = info.get('Primary_ip', '')
     abDict['Server Port'] = info.get('Primary_port', '')
     abDict['Document Path'] = '/' + ('/').join(
         info.get('Effective_url', '').split('/')[3:])
     downloadSize = info.get('Size_download', 0)
     abDict['Total transferred'] = downloadSize
     content_type = info.get('Content_type', '')
     import re
     if re.search('html', content_type):
         abDict['HTML transferred'] = downloadSize - info.get(
             'Header_size', 0)
     abDict['Document Length'] = downloadSize - info.get('Header_size', 0)
     abDict['Http_code'] = info.get('Http_code', 0)
     abDict['Time taken for tests'] = info.get('Total_time', 0)
     abDict['Name lookup time'] = info.get('Namelookup_time', 0)
     abDict['Waiting'] = info.get('Starttransfer_time', 0)
     abDict['Connect'] = info.get('Connect_time', 0)
     logger.debug(abDict)
     return abDict
Exemple #3
0
def ab(opts, http):
    #opts,args = getopt.getopt(sys.argv[1:], "A:C:c:d:n:eghHip:qsSv:Vwx:X:y:z:")
    logger.debug(u'ab被调用')
    for key in opts:
        logger.debug(key)
    if opts.get('-h')!=None:
        logger.debug(u'显示帮助信息')
        from data.help import helpDict
        for key in helpDict:
            print '%s   %s' % (key,helpDict[key])
    if opts.get('-V')!=None:
        logger.debug(u'请求版本号')
        print u'VERSION: %.1f' % VERSION
    optsDict = dict(opts)
    logger.debug(optsDict)
    opts = dict(opts)
    url=http
    userCount = opts.get('-c',1)
    visitCount=opts.get('-n',1)
    userAgent=opts.get('-H',"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-Us) AppleWeb Kit/534.2 (KHTML, like Gecko) Chrome/6.0.447.0 Safari/534.2")
    outhString=opts.get('-A',None)
    cookie=opts.get('-C',None)
    postData=None
    proxy=None
    if opts.get('-p')!=None:
        method='POST'
        postData=opts.get('-p',None)
    elif opts.get('-i')!=None:
        method='HEAD'
    else:
        method='GET'
    if opts.get('-s')!=None:
        protocal='https'
    else:
        protocal = 'http'
    if opts.get('-x')!=None:
        proxy=opts.get('-X',None)
    else:
        pass

    parDict={}
    parDict['url']=url
    parDict['userCount']=int(userCount)
    parDict['visitCount']=int(visitCount)
    parDict['userAgent']=userAgent
    parDict['outhString']=outhString
    parDict['cookie']=cookie
    parDict['method']=method
    parDict['postData']=postData
    parDict['protocal']=protocal
    parDict['proxy']=proxy
    pressurer=Pressurer(**parDict)
    resault=pressurer.getCondition()


    #上面的resault为获得的结果,下面处理展示部分

    show=Show(resault)

    fileName =""
    def createNameFor(suffix):
        import datetime
        return ('%s_user_%s_visit_host_%s_%s.%s'%(userCount,visitCount,url,datetime.datetime.now(),suffix)).replace(' ','_')
        pass
    if opts.get('-w')!=None:
        fileName=createNameFor('html')
        print u'Create file %s'%fileName
        show.outToHTML(fileName)
    if opts.get('-g')!=None:
        fileName=createNameFor('TSV')
        print u'Create file %s'%fileName
        show.outToTSV(fileName)
    if opts.get('-e')!=None:
        fileName=createNameFor('csv')
        print u'Create file %s'%fileName
        show.outToCSV(fileName)
    return show.outToStdout()
Exemple #4
0
    def getAveInfo(self, userCount, count):
        '''
        获得userCount个用户访问count的平均性能及各个指标
        :param userCount:
        :param count:
        :return:
        '''
        infoList = self.userVisit(userCount, count)
        logger.debug(u'过滤后在这里能够获得的信息有%s' % infoList)
        info = {}
        info['totalRequest'] = 0
        info['messageCount'] = 0
        info['successCount'] = 0
        info['redirectCount'] = 0
        info['errorCount'] = 0
        info['serverErrCount'] = 0
        info['noHeaderCount'] = 0
        info['HTML transferred'] = []
        info['Document Length'] = []
        info['Waiting'] = []
        info['Name lookup time'] = []
        info['Total transferred'] = []
        info['Time taken for tests(not Run Time)'] = []
        info['Connect'] = []
        info['Server Software'] = None
        info['Document Path'] = None
        info['Server Hostname'] = None
        info['Server IP'] = None
        info['Server Port'] = None

        #第一次对infoList遍历获得所有请求固定的内容
        def addCount(visitDict):
            '''
            增加对应的访问次数
            :param visitDict: 本函数中的一次访问情况的字典,规定同一个访问字典只可以访问一次
            :return:
            '''
            info['totalRequest'] += 1
            httpStatusCode = visitDict['Http_code']
            code = httpStatusCode / 100
            if code == 1:
                info['messageCount'] += 1
            elif code == 2:
                info['successCount'] += 1
            elif code == 3:
                info['redirectCount'] += 1
            elif code == 4:
                info['errorCount'] += 1
            elif code == 5:
                info['serverErrCount'] += 1
            else:
                info['noHeaderCount'] += 1

        def addTimeAndSize(visitDict):
            '''
            增加有关每次访问的时间和传输内容长度的信息
            :param visitDict:
            :return:
            '''
            def addInfo(parList):
                '''
                添加添加属性的偷懒函数
                :param parList:
                :return:
                '''
                for par in parList:
                    info[par].append(visitDict[par])

            parList = [
                'HTML transferred', 'Document Length', 'Waiting',
                'Name lookup time', 'Total transferred', 'Connect'
            ]
            addInfo(parList)
            info['Time taken for tests(not Run Time)'].append(
                visitDict['Time taken for tests'])

        def insureHasValue(attris, info, userVist):
            '''
            给下面的for循环使用,用来保证相应的值只赋值一遍
            :param attris:属性列表
            :return:
            '''
            for attri in attris:
                if info[attri] is None:
                    info[attri] = userVist.get(attri, None)
                else:
                    continue

        for userVists in infoList:
            for userVist in userVists:
                attris = [
                    'Server Software', 'Document Path', 'Server Hostname',
                    'Server IP', 'Server Port'
                ]
                insureHasValue(attris, info, userVist)
        for userVists in infoList:
            for userVist in userVists:
                #logger.debug(u'每次访问的信息包含%s'%userVist)
                addCount(userVist)
                addTimeAndSize(userVist)
        return info
Exemple #5
0
def ab():
    opts,args=getopt.getopt(sys.argv[1:],"A:C:c:d:n:eghHip:qsSv:Vwx:X:y:z:")
    logger.debug(u'ab被调用')
    for key in opts:
        logger.debug(key)
    if ('-h','') in opts:
        logger.debug(u'显示帮助信息')
        from data.help import helpDict
        for key in helpDict:
            print '%s   %s'%(key,helpDict[key])
    if ('-V','') in opts:
        logger.debug(u'请求版本号')
        print u'VERSION: %.1f'%VERSION
    optsDict=dict(opts)
    logger.debug(optsDict)
    opts=dict(opts)
    url=args[0]
    userCount=opts.get('-c',1)
    visitCount=opts.get('-n',1)
    userAgent=opts.get('-H',"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-Us) AppleWeb Kit/534.2 (KHTML, like Gecko) Chrome/6.0.447.0 Safari/534.2")
    outhString=opts.get('-A',None)
    cookie=opts.get('-C',None)
    postData=None
    proxy=None
    if opts.has_key('-p'):
        method='POST'
        postData=opts.get('-p',None)
    elif opts.has_key('-i'):
        method='HEAD'
    else:
        method='GET'
    if opts.has_key('-s'):
        protocal='https'
    else:
        protocal='http'
    if opts.has_key('-X'):
        proxy=opts.get('-X',None)
    else:
        pass
    parDict={}
    parDict['url']=url
    parDict['userCount']=int(userCount)
    parDict['visitCount']=int(visitCount)
    parDict['userAgent']=userAgent
    parDict['outhString']=outhString
    parDict['cookie']=cookie
    parDict['method']=method
    parDict['postData']=postData
    parDict['protocal']=protocal
    parDict['proxy']=proxy
    pressurer=Pressurer(**parDict)
    resault=pressurer.getCondition()

    #上面的resault为获得的结果,下面处理展示部分

    show=Show(resault)
    show.outToStdout()
    def createNameFor(suffix):
        import datetime
        return ('%s_user_%s_visit_host_%s_%s.%s'%(userCount,visitCount,url,datetime.datetime.now(),suffix)).replace(' ','_')
        pass
    if opts.has_key('-w'):
        fileName=createNameFor('html')
        print u'Create file %s'%fileName
        show.outToHTML(fileName)
    if opts.has_key('-g'):
        fileName=createNameFor('TSV')
        print u'Create file %s'%fileName
        show.outToTSV(fileName)
    if opts.has_key('-e'):
        fileName=createNameFor('csv')
        print u'Create file %s'%fileName
        show.outToCSV(fileName)
Exemple #6
0
    def getAveInfo(self,userCount,count):
        '''
        获得userCount个用户访问count的平均性能及各个指标
        :param userCount:
        :param count:
        :return:
        '''
        infoList=self.userVisit(userCount,count)
        logger.debug(u'过滤后在这里能够获得的信息有%s'%infoList)
        info={}
        info['totalRequest']=0
        info['messageCount']=0
        info['successCount']=0
        info['redirectCount']=0
        info['errorCount']=0
        info['serverErrCount']=0
        info['noHeaderCount']=0
        info['HTML transferred']=[]
        info['Document Length']=[]
        info['Waiting']=[]
        info['Name lookup time']=[]
        info['Total transferred']=[]
        info['Time taken for tests(not Run Time)']=[]
        info['Connect']=[]
        info['Server Software']=None
        info['Document Path']=None
        info['Server Hostname']=None
        info['Server IP']=None
        info['Server Port']=None
        #第一次对infoList遍历获得所有请求固定的内容
        def addCount(visitDict):
            '''
            增加对应的访问次数
            :param visitDict: 本函数中的一次访问情况的字典,规定同一个访问字典只可以访问一次
            :return:
            '''
            info['totalRequest']+=1
            httpStatusCode=visitDict['Http_code']
            code=httpStatusCode/100
            if code==1:
                info['messageCount']+=1
            elif code==2:
                info['successCount']+=1
            elif code==3:
                info['redirectCount']+=1
            elif code==4:
                info['errorCount']+=1
            elif code==5:
                info['serverErrCount']+=1
            else:
                info['noHeaderCount']+=1

        def addTimeAndSize(visitDict):
            '''
            增加有关每次访问的时间和传输内容长度的信息
            :param visitDict:
            :return:
            '''
            def addInfo(parList):
                '''
                添加添加属性的偷懒函数
                :param parList:
                :return:
                '''
                for par in parList:
                    info[par].append(visitDict[par])
            parList=['HTML transferred','Document Length','Waiting','Name lookup time','Total transferred','Connect']
            addInfo(parList)
            info['Time taken for tests(not Run Time)'].append(visitDict['Time taken for tests'])

        def insureHasValue(attris,info,userVist):
            '''
            给下面的for循环使用,用来保证相应的值只赋值一遍
            :param attris:属性列表
            :return:
            '''
            for attri in attris:
                if info[attri] is None:
                    info[attri]=userVist.get(attri,None)
                else:
                    continue

        for userVists in infoList:
            for userVist in userVists:
                attris=['Server Software','Document Path','Server Hostname','Server IP','Server Port']
                insureHasValue(attris,info,userVist)
        for userVists in infoList:
            for userVist in userVists:
                #logger.debug(u'每次访问的信息包含%s'%userVist)
                addCount(userVist)
                addTimeAndSize(userVist)
        return info