Извлечение jmeter json и удаление дубликатов для записи в файл

import com.jayway.jsonpath.JsonPath

def path = vars.get("BaseFilePath") + "/" + vars.get("FhirVersion") + "/Get/Patient/";
def newLine = System.getProperty('line.separator')
def response = prev.getResponseDataAsString()

//address
def addressCSV = new File(path + 'address.csv')
def addressList = []
def addressCityCSV = new File(path + 'address-city.csv')
def cityList = []
def addressCountryCSV = new File(path + 'address-country.csv')
def countryList = []
def addressPostalCodeCSV = new File(path + 'address-postalcode.csv')
def postalCodeList = []
def addressStateCSV = new File(path + 'address-state.csv')
def stateList = []

def addressArray = JsonPath.read(response, '$..address')
addressArray.each { eachAddress ->
    eachAddress.each { subAddress ->
        subAddress.get('line').each { line ->
            addressList.add(line)
        }
		
		cityList.add(subAddress.get('city'))
		stateList.add(subAddress.get('state'))
		postalCodeList.add(subAddress.get('postalCode'))
		countryList(subAddress.get('country'))				
    }

addressList.unique().each { address ->
	addressCSV << address << newLine 
	}
cityList.unique().each { city ->
	addressCityCSV << city << newLine 
	}
countryList.unique().each { country ->
	addressCountryCSV << country << newLine
	}
postalCodeList.unique().each { postalCode ->
	addressPostalCodeCSV << postalCode << newLine
	}
stateList.unique().each { state ->
	addressStateCSV << state << newLine
	}
}

Я написал этот scirpt в постпроцессоре JSR223 jmeter, чтобы извлечь данные из ответа json, addressList, cityList и другие списки содержат повторяющиеся элементы, поэтому я хотел удалить дубликаты и поместить уникальные значения в файлы. Но этот код не работает. Может ли кто-нибудь помочь мне исправить это

Вы хотели принять другой ответ?

user7294900 04.11.2018 14:44

ответ от dimitri T работает для меня

venkat sai 04.11.2018 14:46
0
2
444
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Для сохранения только уникальных значений используйте Установленный

We can use the toSet() function to convert a List to a Set.

Таким образом, вы можете добавить его в соответствующие списки как:

 uniqueStateCSVSet = addressStateCSV.toSet()

Или предопределите его, как

 Set addressArray
Ответ принят как подходящий

Вызов функции Collection.unique () должен помочь вам, т.е.

addressList = addressList.unique()

Демо:

enter image description here

Однако, если ваша коллекция содержит пользовательские объекты (т.е. не обычный Струны), вам нужно будет разработать специальную реализацию Компаратор, т.е.

def myComparator = [
        equals: { delegate.equals(it) },
        compare: { source, target ->
            source.someField <=> target.someField
        }
] as Comparator

def unique = addressList.unique(myComparator)

См. Шпаргалка по шаблонам Groovy для JMeter для получения дополнительных советов и приемов Groovy.

уникальный не работает, я все еще получаю повторяющиеся значения

venkat sai 31.10.2018 13:24

Другие вопросы по теме