왜 내가 JMeter의 노출 된 소품 Hashtable에 그루비 클로저를 저장할 수 있지만 그루비 함수는 저장할 수 없습니까?

Coltongrainger

질문

누구든지 내가 JMeter의 노출 된 소품 Hashtable에 그루비 클로저를 저장할 수 있지만 그루비 함수가 아닌 이유를 알고 있습니까?

최소한의 예

테스트 계획, 스레드 그룹, 스크립트 언어 Groovy 3.0.3을 사용하는 JSR223 샘플러에 다음과 같은 최소한의 실패 예제가 있습니다 (Jmeter GUI의 "스크립트"상자에 붙여 넣거나 파일 이름에서 참조 할 때 둘 다 실패 함) "test.groovy") :

def bern = { p -> Math.random() < p }

props.put("bern", bern)
closure = props.get("bern")

log.warn("props closure call: " + closure(1.0))

def bernoulli (double p) {
    Math.random() < p
}

props.put("bernoulli", bernoulli)
funct = props.get(bernoulli)

log.warn("props function call: " + funct(1.0))

다음은 내 예상 출력입니다 (JMeter 로그 뷰어에서).

props closure call: true
props function call: true

내가 얻는 로그 출력은 다음과 같습니다.

props closure call: true
...text
Problem in JSR223 script JSR223 Sampler, message: javax.script.ScriptExecution: 
groovy.lang.MissingPropertyException: No such property bernoulli for class:
 Script<jmeter generated groovy script number> ...

관련

Daggett

props다음 구문 사용하여 함수를에 저장할 수 있습니다 .

// def props = [:]
def bernoulli (double p) {
    Math.random() < p
}

props.put("bernoulli", this.&bernoulli)

funct = props.get("bernoulli")
println funct(1.0)

표현식 메소드 포인터 연산자를 사용하여 함수를 클로저 this.&bernoulli로 변환합니다 .bernoulli .&

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관