0
回答
使用fiddler+apache ab进行压力测试
【腾讯云】校园拼团福利,1核2G服务器10元/月!>>>   

linux 没有jmeter loadruner等工具, 另外非网页的例如手机app接口和c/s结构的系统怎么压测呢,当然最正确是在自己写的自动化测试工具里压,另外我们还可以使用fiddler+ab来进行抓包和压测

可以用ab做压测,可以使用fiddler先抓包,然后使用下面abtest.py 脚本来将原始http转为ab进行压测

使用: 

1 首先使用fiddler抓原始http包 然后复制存为 post.data

post.data 内容:

GET http://www.example.com/ HTTP/1.1
User-Agent: Fiddler
Host: www.example.com

2 使用下面abtest.py脚本进行压测 python abtest.py post.data

#!/usr/bin/python
#-*- coding:utf-8 -*-


import os
import sys
import re


if __name__ == "__main__":
    reload(sys)
    sys.setdefaultencoding('utf8')
    data_file = sys.argv[1]
    datas = open(data_file).read()
    datas = datas.strip(" \s\r")
    read_len = len(datas)
    seg = "\r\n"
    head_e = datas.find("%s%s" % (seg,seg))
    if head_e <= 0:
        seg = "\n"
        head_e = datas.find("%s%s" % (seg,seg))
    if head_e <= 0:
        print "content format err"
        sys.exit()


    len_s = -1
    len_e = -1
    contentlen = -1
    headlen = -1
    if contentlen == -1:
        len_s = datas.find("Content-Length:")
        if len_s < 0:
            len_s = datas.lower().find("content-length:")
        if len_s > 0:
            len_e = datas.find(seg, len_s)
        if len_s > 0 and len_e > 0 and len_e > len_s+15:
            len_str = datas[len_s+15:len_e].strip()
            if len_str.isdigit():
                contentlen = int(datas[len_s+15:len_e].strip())
    headlen = head_e + 2*len(seg)


    if not ((contentlen >= 0 and headlen > 0 and (contentlen + headlen) <= read_len) or \
       (contentlen == -1 and headlen > 0 and headlen <= read_len)):
        print "content format err"
        sys.exit()
    headlist = datas[0:head_e].split(seg)
    first_line = headlist.pop(0)
    command, path, http_version, =  re.split('\s+', first_line)
    headers = {}
    for item in headlist:
        if item.strip() == "":
            continue
        segindex = item.find(":")
        if segindex < 0:
            continue
        key = item[0:segindex].strip()
        value = item[segindex+1:].strip()
        headers[key] = value
    if contentlen > 0:
        body_data = datas[head_e+2*len(seg):] 
        open("./ab_temp.data","w").write(body_data)


    ab_cmd = "ab -c 500 -n 3000 -k "
    for k,v in headers.items():
        if k.lower() == "connection" or k.lower() == "content-length":
            continue
        if k.lower() == "content-type":
            ab_cmd += ' -T "%s"' % v
            continue
        ab_cmd += ' -H "%s: %s"' % (k,v)


    if contentlen > 0:
        ab_cmd += ' -p ab_temp.data'
    ab_cmd += ' "%s"' % path
    print ab_cmd
    print os.popen(ab_cmd).read()

压测结果:

<无标签>
举报
feimat
发帖于1年前 0回/245阅
顶部