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
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
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()
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
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)
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