JMeter控制器与CSV问题

时间:2014-02-14 08:51:34

标签: csv while-loop jmeter

我在使用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

也是我的

4 个答案:

答案 0 :(得分:0)

尝试将CS​​V阅读器一直放在测试计划的顶部。它现在位于您的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文件中的每一行上循环。