使用 "size in bytes" 数据的 JMeter BeanShell 断言

JMeter BeanShell Assertion using "size in bytes" data

我有这样的 BeanShell 断言代码:

final String response = SampleResult.getResponseDataAsString();
final String expectedExceptionText = "numberOfFeatures=\"0\"";

if (response.contains(expectedExceptionText)) {
   Failure = true;
   FailureMessage = "At least one feature expected ";
}

我想检查 'size in bytes' 响应是否大于 384B。如果不是,那么我需要在某个变量中计算所有低于 384 的响应。有没有办法在我的断言代码中使用响应 'size in bytes' ?我的意思是我不知道该怎么做所以请告诉我。

//编辑

我一直在尝试使用 getBytes 方法,但它不起作用,尽管我需要导入。有什么想法吗?

您不需要 BeanshellAssertion 来执行此操作:

如果您还想使用 Beanshell,那么:

if (SampleResult.getResponseData().length>384)

我不想只检查。我已经在使用 Size 和 Response Assertions 来检查我是否得到正确的响应,但我想计算空的响应(我正在执行 getImage 请求)并且它可能 return 200 响应但它仍然可能是空的。我想知道发生这种情况并同时遇到变量。下面的例子是我想要的:

1st request - image ok 200.  variable =0;
2nd image ok 200. variable = 0
3rd no image, 200, variable =1;
etc.

我需要它来检查有多少传递的数据(输入参数)是空的。 我检查了没有图像的响应有 384 个字节,所以我想以这种方式检查它。我尝试使用 getBytes() 方法,但它在 BeanShell 中不起作用。我收到一些错误。
//编辑

我用了你的方法,似乎有效。谢谢:)

如果是 Beanshell 断言,您至少可以通过两种方式获得以字节为单位的响应大小:

ResponseData.length
SampleResult.getResponseData().length

两者都生成字节数组 - byte[] 包含父采样器响应。

像这样:

if (ResponseData.length > 384) {
    //do what you need
}

应该可以解决您的用例。

有关 JMeter 中 Beanshell 脚本的高级信息,请参阅 How to use BeanShell: JMeter's favorite built-in component 指南