【问题标题】:How to add custom statistics in Grinder如何在 Grinder 中添加自定义统计信息
【发布时间】:2014-05-04 05:33:05
【问题描述】:

我们希望在 Grinder 中添加自定义统计数据

grinder.statistics.registerSummaryExpression("connTimeout", "userLong0")

grinder.statistics.forCurrentTest.addLong("userLong0", 1)

这似乎是成功的,因为我们可以在 Grinder 输出文件中获取自定义字段 问题是该统计数据的值始终为 0

这是 Jython 实现的完整脚本

# -*- coding: utf-8 -*-

from net.grinder.script.Grinder import grinder
from net.grinder.script import Test

from com.netease.cloud.ndir.performance import Query
from com.netease.cloud.ndir.performance import QueryReturnCode

def writeToFile(text):
    filename = "response.log"
    file = open(filename, "a")
    file.write(str(text) + "\n")
    file.close() 

ndir_client = grinder.getProperties().getProperty("ndirClient")
query_file = grinder.getProperties().getProperty("queryFile")

request = Query("grinder.properties", query_file)

grinder.statistics.registerSummaryExpression("connTimeout", "userLong0")
grinder.statistics.registerSummaryExpression("readTimeout", "userLong1")
grinder.statistics.registerSummaryExpression("code!=200", "userLong2")
grinder.statistics.registerSummaryExpression("docs=[]", "userLong3")
grinder.statistics.registerSummaryExpression("unknown", "userLong4")


class TestRunner:

    def __init__(self):
        grinder.statistics.delayReports=True

    def initialSleep(self):
        sleepTime = grinder.threadNumber * 20  # per thread
        grinder.sleep(sleepTime, 0)

    def query(self):
        if ndir_client == "true":
            query = request.randomQueryByNdirClient
        else:
            query = request.randomQueryByHttpGet
        try:
            result = query()
        except:
            writeToFile("exception")
            grinder.statistics.forCurrentTest.addLong("userLong4", 1)
            grinder.getStatistics().getForCurrentTest().setSuccess(False)
            return
        if result == 0:
            grinder.getStatistics().getForCurrentTest().setSuccess(True)
            return
        elif result == 1:
            grinder.statistics.forCurrentTest.addLong("userLong0", 1)
            grinder.getStatistics().getForCurrentTest().setSuccess(False)
            return
        elif result == 2:
            grinder.statistics.forCurrentTest.addLong("userLong1", 1)
            grinder.getStatistics().getForCurrentTest().setSuccess(False)
            return
        elif result == 3:
            grinder.statistics.forCurrentTest.addLong("userLong2", 1)
            grinder.getStatistics().getForCurrentTest().setSuccess(False)
            return          
        elif result == 4:
            grinder.statistics.forCurrentTest.addLong("userLong3", 1)
            grinder.getStatistics().getForCurrentTest().setSuccess(True)    
            return
        else:
            grinder.statistics.forCurrentTest.addLong("userLong4", 1)
            grinder.getStatistics().getForCurrentTest().setSuccess(False)
            return

    request = Test(120, 'query').wrap(query)

    def __call__(self):
        if grinder.runNumber == 0: 
            self.initialSleep()
        self.request(self)

【问题讨论】:

    标签: jython grinder


    【解决方案1】:

    我怀疑问题在于您将测试标记为失败,但希望统计信息出现在摘要中。只有成功的测试才会累积到汇总统计中。

    也尝试注册数据日志表达式

    grinder.statistics.registerDataLogExpression("connTimeout", "userLong0")
    grinder.statistics.registerDataLogExpression("readTimeout", "userLong1")
    grinder.statistics.registerDataLogExpression("code!=200", "userLong2")
    grinder.statistics.registerDataLogExpression("docs=[]", "userLong3")
    grinder.statistics.registerDataLogExpression("unknown", "userLong4")
    

    那么你至少会看到工作进程的数据日志文件中的值。

    【讨论】:

    • 感谢您的回复,您是对的,一旦我将所有测试设置为成功,统计值就会在那里。但是问题是数据login没有自动聚合,那么通过自己的脚本来聚合呢?
    • 正确。 Grinder 故意不汇总失败测试的统计数据 - 时间可能遵循其他分布,所以它没有什么意义。或者,您可以针对另一个未标记为失败的测试记录信息。
    • 感谢您的提示,并且在进行另一个统计记录测试时它正在工作。问题是这个测试也有“TPS”,这使得“Totals”的值没有意义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多