JMeter While Controller存在CSV问题



当我使用CSV阅读器时,Jmeter中的Loop控制器出现了问题,希望有人能为我提供一些信息。

因此,我有一个CSV文件,其中包含一堆货币代码和它们各自的名称(见下文),然后我在随后的HTTP请求中使用CSV值。

ALL,Albanian Lek
DZD,Algerian Dinar
ARS,Argentine Peso
AMD,Armenian Dram
AUD,Australian Dollar
AZN,Azerbaijan New Manat
BSD,Bahamian Dollar
BHD,Bahraini Dinar
BDT,Bangladeshi Taka
BZD,Belize Dollar
BOB,Bolivian Boliviano
BRL,Brazilian Real
GBP,British Pound
BND,Brunei Dollar
XOF,CFA Franc BCEAO
XAF,CFA Franc BEAC
XPF,CFP Franc
KHR,Cambodian Riel
CAD,Canadian Dollar
CLP,Chilean Peso
CNY,Chinese Yuan Renminbi
COP,Colombian Peso
KMF,Comoros Franc
CRC,Costa Rican Colon
HRK,Croatian Kuna
CZK,Czech Koruna
DKK,Danish Krone
DJF,Djibouti Franc
DOP,Dominican R. Peso
XCD,East Caribbean Dollar
EGP,Egyptian Pound
EEK,Estonian Kroon
EUR,Euro
FJD,Fiji Dollar
HNL,Honduran Lempira
HKD,Hong Kong Dollar
HUF,Hungarian Forint
ISK,Iceland Krona
INR,Indian Rupee
IDR,Indonesian Rupiah
ILS,Israeli New Shekel
JPY,Japanese Yen
JOD,Jordanian Dinar
KZT,Kazakhstan Tenge
KES,Kenyan Shilling
KWD,Kuwaiti Dinar
KGS,Kyrgyzstanian Som
LAK,Lao Kip
LVL,Latvian Lats
LBP,Lebanese Pound
LTL,Lithuanian Litas
MYR,Malaysian Ringgit
MRO,Mauritanian Ouguiya
MUR,Mauritius Rupee
MXN,Mexican Peso
MNT,Mongolian Tugrik
MAD,Moroccan Dirham
NAD,Namibia Dollar
NPR,Nepalese Rupee
NZD,New Zealand Dollar
NIO,Nicaraguan Cordoba Oro
NOK,Norwegian Kroner
OMR,Omani Rial
PKR,Pakistan Rupee
PGK,Papua New Guinea Kina
PYG,Paraguay Guarani
PEN,Peruvian Nuevo Sol
PHP,Philippine Peso
PLN,Polish Zloty
QAR,Qatari Rial
RON,Romanian New Lei
RUB,Russian Rouble
RWF,Rwandan Franc
WST,Samoan Tala
SAR,Saudi Riyal
SGD,Singapore Dollar
SOS,Somali Shilling
ZAR,South African Rand
KRW,South-Korean Won
LKR,Sri Lanka Rupee
SZL,Swaziland Lilangeni
SEK,Swedish Krona
CHF,Swiss Franc
TWD,Taiwan Dollar
TZS,Tanzanian Shilling
THB,Thai Baht
TND,Tunisian Dinar
TRY,Turkish Lira
USD,US Dollar
UGX,Uganda Shilling
UAH,Ukraine Hryvnia
UYU,Uruguayan Peso
AED,Utd. Arab Emir. Dirham
VUV,Vanuatu Vatu
VEF,Venezuelan Bolivar
VND,Vietnamese Dong
ZMK,Zambian Kwacha

在While循环中,我有以下条件检查:${__javaScript("EOF"!="${currencyCode}")}

注意,我有stackoverflow似乎没有显示尖括号,但在我的JMeter 中有

因此,我看到的是循环正在通过CSV,并且正在发送所需的HTTP请求。然而,一旦达到CSV值中的最后一个值(在这种情况下为"ZMK"),就会发出一个值为的额外请求

因此,看起来惠利一家比应该做的多做了一个循环。

我已经在VIM和我能想到的所有其他编辑器中检查了CSV文件,CSV文件的末尾没有空行或选项卡。

如果我满足循环条件${__javaScript("ZMK"!="${currencyCode}")}一切都很好。但是CSV可能会增长,所以我不想硬编码任何东西。

为了让你更好地了解我的测试,这里是的全貌

+ Thread Group
++ Simple Controller
+++ While Loop with condition ${__javaScript("<EOF>" != "${currencyCode}")}
++++ CSV Reader (Recycle on EOF = FALSE, STOP THREAD ON EOF = FALSE, SHARING = Current Thread)
++++ HTTP Request using value from CSV file

还有我的

试着把你的CSV阅读器一直放在测试计划的顶部。它现在位于While控制器下方,这是导致此问题的原因。

尝试完全删除While Controller并在线程组中提供合理数量的循环(或者用循环控制器替换它)

此外,您应该将CSV数据集配置设置为HTTP请求的子级。有关如何在JMeter中实现CSV读取逻辑的更多详细信息,请参阅使用CSV数据集配置指南。

另一个选项是使用Beanshell检索所有货币代码和本地名称,并将它们存储到JMeter变量中。

以下Beanshell代码将获得Java中可用的所有货币,并将其存储到JMeter Variables 中

Set<Currency> currencies = Currency.getAvailableCurrencies();       
for (Currency currency : currencies) {
vars.put(currency.getCurrencyCode(), currency.getDisplayName());            
} 

${__javaScript("${currencyCode}"!="EOF",)}曾与我共事。

将您的CSV读取器作为while控制器的子级放在测试计划的顶部,并满足以下条件(函数或变量):${__javaScript(“${currencyCode}” != “<EOF>”,)}。然后,您必须将线程组的线程数增加到CSV文件中的行数,这样它将与每个线程一起循环到CSV文件的每一行。

最新更新