• 测开之路七十四:性能测试蓝图之执行逻辑


    import os
    import csv
    import json

    from kafka import KafkaProducer
    from kafka import KafkaConsumer

    from common.mongo import Mongo
    from common import get_case_id


    class Logic(object):

    def __init__(self): pass

    def start(self, data):
    """ 这是投递消息函数,只负责投递消息。"""
    case_id = get_case_id()
    data.setdefault('_id', case_id)
    producer = KafkaProducer(bootstrap_servers=['localhost:9092'],
    value_serializer=lambda v: json.dumps(v).encode('utf-8'))
    producer.send('test', json.dumps(data), partition=0)
    producer.close()
    return case_id

    def service(self):
    """ 消费者取消息,执行,service应该单独部署到其他服务器,专门用于执行接口、UI、性能测试 """
    print("进入取数据模式")
    consumer = KafkaConsumer('test', bootstrap_servers=['localhost:9092'])
    print("创建卡夫卡消费者成功")
    for msg in consumer:
    print("迭代取数据开始")
    recv = "%s:%d:%d: key=%s value=%s" %
    (msg.topic, msg.partition, msg.offset, msg.key, msg.value)
    print(recv)

    # 解析成python.json对象
    data = json.loads(msg.value)
    data = json.loads(data)

    # 拿前端传过来的数据
    code = data.get('code') # 拿代码
    host = data.get('host') # 拿host
    user = data.get('user', 10) # 拿用户数
    rate = data.get('rate', 10) # 拿QPS(每秒请求数)
    time = data.get('time', 60) # 拿请求时间

    # 把代码写到locustfile.py文件里面
    file = open('locustfile.py', "w", encoding="utf-8")
    file.write(code)
    file.close()

    # 拼凑并运行locust指令,noweb模式,并生成csv报告
    cmd = "locust -f locustfile.py --host={0} --no-web -c {1} -r {2} -t {3} --csv=report".format(host, user, rate, time)
    os.system(cmd)

    # 解析report_requests.csv文件里的测试的数据写
    report_id = get_case_id()
    file = open('report_requests.csv')
    lines = csv.reader(file, delimiter=' ', quotechar='|')
    result = {
    '_id': report_id,
    'requests': []
    }
    for line in lines:
    result['requests'].append(line)
    file.close()

    # 把数据写入到MongoDB
    Mongo().insert("2019", "performance", result)


    if __name__ == '__main__':
    logic = Logic()
    logic.service()
  • 相关阅读:
    hdu 2444(二分图) The Accomodation of Students
    hdu 5532 (LIS) Almost Sorted Array
    hdu 1059 (多重背包) Dividing
    poj 2184(Cow Exhibition)
    hdu 2571 (命运) 那个配图女神
    poj 3624 && hdu 2955(背包入门)
    hdu 1257 && hdu 1789(简单DP或贪心)
    BBS(第一天)项目之 注册功能实现通过forms验证与 前端ajax请求触发查询数据库判断用户是否存在的功能实现
    Django之form模板的使用
    Django之Auth模块 实现登录,退出,自带session 与认证功能的一个重要的模块
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/11286074.html
Copyright © 2020-2023  润新知