如何让Jmeter Http request sampler在其上传测试中preload和resue上传文件?
How to let Jmeter Http request sampler preload and resue the upload file in its upload test?
在JMeter的Http Request sampler中,我可以定义上传请求的文件路径,但是当我运行加载测试时,每次测试都会重复加载同一个文件。因为它每次都从磁盘加载文件,所以完成每个测试的时间比服务器 return 响应所花费的实际时间长得多。
我是否必须编写我的采样器以在测试前将文件预加载到内存中并在可能的情况下重用该文件?
取决于您要做什么。如果你给它一个硬编码的路径,它总是会上传那个文件。如果您尝试在上传端点上生成负载,只要这个硬编码文件的大小大致符合您的预期,就可以了。
如果您想让 JMeter 上传一组文件,您将不得不花点心思。我会将您要上传的文件的所有路径作为字符串保存在 CSV
中。然后用一个CSV Data Set
保存到一个变量path
。然后不要将该路径硬编码到您的 HTTP Request Sampler
,而是给它 ${path}
。循环你的测试 n
次(其中 n
是你放入 CSV 中的文件数)并且应该这样做。
实际上,您可以使用 BeanShell 采样器预加载文件并将其值存储在单个变量中一次。但问题是你不能在线程之间共享变量。因此,一旦读取并存储为变量,它就只能在同一个线程中使用。
要在线程之间共享参数,可以使用属性,但不确定是否可以对包含二进制文件的文件执行相同操作。
谈到常规变量(例如,cookie),可以这样做:
使用设置线程从文件中读取变量。
将此值定义为 属性。
在所有 HTTP 采样器中使用存储在 属性 中的值。
在JMeter的Http Request sampler中,我可以定义上传请求的文件路径,但是当我运行加载测试时,每次测试都会重复加载同一个文件。因为它每次都从磁盘加载文件,所以完成每个测试的时间比服务器 return 响应所花费的实际时间长得多。
我是否必须编写我的采样器以在测试前将文件预加载到内存中并在可能的情况下重用该文件?
取决于您要做什么。如果你给它一个硬编码的路径,它总是会上传那个文件。如果您尝试在上传端点上生成负载,只要这个硬编码文件的大小大致符合您的预期,就可以了。
如果您想让 JMeter 上传一组文件,您将不得不花点心思。我会将您要上传的文件的所有路径作为字符串保存在 CSV
中。然后用一个CSV Data Set
保存到一个变量path
。然后不要将该路径硬编码到您的 HTTP Request Sampler
,而是给它 ${path}
。循环你的测试 n
次(其中 n
是你放入 CSV 中的文件数)并且应该这样做。
实际上,您可以使用 BeanShell 采样器预加载文件并将其值存储在单个变量中一次。但问题是你不能在线程之间共享变量。因此,一旦读取并存储为变量,它就只能在同一个线程中使用。
要在线程之间共享参数,可以使用属性,但不确定是否可以对包含二进制文件的文件执行相同操作。
谈到常规变量(例如,cookie),可以这样做:
使用设置线程从文件中读取变量。
将此值定义为 属性。
在所有 HTTP 采样器中使用存储在 属性 中的值。