我在使用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
也是我的
答案 0 :(得分:0)
尝试将CSV阅读器一直放在测试计划的顶部。它现在位于您的While控制器下方,导致此问题。
答案 1 :(得分:0)
尝试完全删除While Controller
并在线程组中提供合理数量的循环(或者将其替换为Loop Controller)
此外,您应该使您的CSV数据集配置成为HTTP请求的子项。有关如何在JMeter中实现CSV读取逻辑的更多详细信息,请参阅使用CSV DATA SET CONFIG指南。
另一个选择是使用Beanshell检索所有货币代码和本地名称,并将它们存储到JMeter变量中。
以下Beanshell代码将获取Java中可用的所有货币并将其存储到JMeter变量
Set<Currency> currencies = Currency.getAvailableCurrencies();
for (Currency currency : currencies) {
vars.put(currency.getCurrencyCode(), currency.getDisplayName());
}
答案 2 :(得分:0)
$ {__ javaScript(“$ {currencyCode}”!=“EOF”,)} 和我一起工作。
答案 3 :(得分:0)
将您的CSV阅读器作为具有以下条件(函数或变量)的while控制器的子级放置在测试计划的顶部:${__javaScript(“${currencyCode}” != “<EOF>”,)}
。
然后,您必须将线程组的线程数增加到CSV文件中的行数,这样,它将在每个线程的csv文件中的每一行上循环。