JMeter While控制器出现CSV问题

JMeter While控制器出现CSV问题,csv,while-loop,jmeter,Csv,While Loop,Jmeter,我在使用CSV阅读器时遇到了Jmeter中的循环控制器的问题,希望有人能为我解释一下 因此,我有一个CSV文件,其中包含一组货币代码及其各自的名称,请参见下文,然后我在后续HTTP请求中使用CSV值 ALL,Albanian Lek DZD,Algerian Dinar ARS,Argentine Peso AMD,Armenian Dram AUD,Australian Do

我在使用CSV阅读器时遇到了Jmeter中的循环控制器的问题,希望有人能为我解释一下

因此,我有一个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循环中,我有一个条件检查: ${uuu javaScriptEOF!=${currencyCode}

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

所以我看到的是,循环正在通过CSV,并且正在发送所需的HTTP请求。但是,在这种情况下,一旦达到CSV值ZMK中的最后一个值,将发出一个值为的额外请求

所以看起来Whileis比它应该做的多做了一个循环

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

如果我做循环条件 ${{uu javaScriptZMK!=${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控制器,并在线程组中提供合理数量的循环,或者用替换它

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

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

下面的Beanshell代码将获取Java中可用的所有货币,并将它们存储到JMeter变量中

    Set<Currency> currencies = Currency.getAvailableCurrencies();       
    for (Currency currency : currencies) {

        vars.put(currency.getCurrencyCode(), currency.getDisplayName());            

    } 

${uuuu javaScript${currencyCode}!=EOF,}
与我一起工作。

将您的CSV阅读器放在测试计划的顶部,作为while控制器的子控制器,使用以下条件函数或变量:${uu javaScript“${currencyCode}”!=”,}。
然后,您必须将线程组的线程数增加到CSV文件中的行数,这样它将使用每个线程在CSV文件中的每一行上循环。

感谢您的建议,但这似乎只是在CSV文件的第一行上不断循环,而此代码可能会回答这个问题,提供关于如何和/或为什么解决问题的附加上下文将提高答案的长期价值。