2017-04-12 3 views
0

jmeter bean shell sampler에서 실행하는 동안 위에서 언급 한 바와 같이 오류가 발생했습니다. .응답 메시지 : org.apache.jorphan.util.JMeterException : bsh 메소드를 호출하는 중 오류가 발생했습니다 : eval t null

실제로 이클립스에서 코드가 제대로 작동했지만 Jmeter에서 구현되는 동안 작동하지 않습니다. 이 문제를 해결하는 데 도움을 주실 수있는 사람이 있습니까? 하나는 수이 코드를 사용하여 JMeter 작업을 시도 할 경우

import com.google.gson.*; 
import com.google.gson.reflect.TypeToken; 
import java.io.FileReader; 
import java.lang.reflect.Type; 
import java.util.*; 
import java.util.Map.*; 
import java.util.Set; 
public class JsonComparator { 

public static void main(String[] args) throws Exception { 
    JsonParser parser = new JsonParser(); 

    try{ 
     Gson g = new Gson(); 
     JsonElement jsonElement1 = parser 
       .parse(new FileReader("E:\\InCites_UI\\trunk\\Tests\\Filters_ByPerson_People_PerfC.json")); 
     JsonElement jsonElement2 = parser 
       .parse(new FileReader("E:\\InCites_UI\\trunk\\Tests\\Filters_ByPerson_People_PerfA.json")); 

     System.out.println("Is the two JSON File Same: "+compareJson(jsonElement1, jsonElement2)); 
     if(!compareJson(jsonElement1, jsonElement2)){ 
      Type mapType = new TypeToken<Map<String, Object>>(){}.getType(); 
      Map<String,Object> firstMap = g.fromJson(jsonElement1, mapType); 
      Map<String, Object> secondMap = g.fromJson(jsonElement2, mapType); 
      System.out.println(JsonComparator.mapDifference(firstMap, secondMap)); 
     } 
     else{ 
      System.out.println("The Two JSON Are SAME!!!!!!!!!!!!!!!"); 
     } 

    }catch(Exception e1){ 
     e1.printStackTrace(); 
    } 

} 

public static <K, V> Map<K, V> mapDifference(Map<? extends K, ? extends V> left, Map<? extends K, ? extends V> right) { 
    Map<K, V> difference = new HashMap<K, V>(); 
    difference.putAll(left); 
    difference.putAll(right); 
    difference.entrySet().removeAll(right.entrySet()); 
    return difference; 
} 

public static boolean compareJson(JsonElement json1, JsonElement json2) { 
    boolean isEqual = true; 
    ArrayList<Object> ls1 = new ArrayList<Object>(); 
    ArrayList<Object> ls2 = new ArrayList<Object>(); 
    // Check whether both jsonElement are not null 
    if (json1 != null && json2 != null) { 

     // Check whether both jsonElement are objects 
     if (json1.isJsonObject() && json2.isJsonObject()) { 
      Set<Entry<String, JsonElement>> ens1 = ((JsonObject) json1).entrySet(); 
      Set<Entry<String, JsonElement>> ens2 = ((JsonObject) json2).entrySet(); 
      JsonObject json2obj = (JsonObject) json2; 
      if (ens1 != null && ens2 != null && (ens2.size() == ens1.size())) { 
       // Iterate JSON Elements with Key values 
       for (Entry<String, JsonElement> en : ens1) { 
        isEqual = isEqual && compareJson(en.getValue(),json2obj.get(en.getKey())); 
       } 
      } else { 
       return false; 
      } 
     } 
     // Check whether both jsonElement are arrays 
     else if (json1.isJsonArray() && json2.isJsonArray()) { 
      JsonArray jarr1 = json1.getAsJsonArray(); 
      JsonArray jarr2 = json2.getAsJsonArray(); 
      if (jarr1.size() != jarr2.size()) { 
       return false; 
      } else { 
       int i = 0; 
       // Iterate JSON Array to JSON Elements 
       for (JsonElement je : jarr1) { 
        isEqual = isEqual && compareJson(je, jarr2.get(i)); 
        i++; 
       } 
       if (isEqual) { 
        Object[] o1 = ls1.toArray(); 
        Object[] o2 = ls2.toArray(); 
        isEqual = Arrays.deepEquals(o1, o2); 
       } 
      } 

     } 

     // Check whether both jsonElement are null 
     else if (json1.isJsonNull() && json2.isJsonNull()) { 
      return true; 
     } 

     // Check whether both jsonElement are primitives 
     else if (json1.isJsonPrimitive() && json2.isJsonPrimitive()) { 
      ls1.add(json1); 
      ls2.add(json2); 
     } 
    } else if (json1 == null && json2 == null) { 
     return true; 
    } else { 
     return false; 
    } 
    return isEqual; 
} 

}

우리는이에 도움을 찾고 계십니까? 우리는 Jmeter에서 구현할 수 없습니다.

실제로 이클립스에서 코드가 제대로 작동했지만 Jmeter에서 구현되는 동안 작동하지 않습니다.

+0

프로젝트의 스크린 샷을 게시하지 마세요. 대신 코드 자체를 포함 시키십시오. 그러면 문제를 재현하려는 사람이 쉽게 읽을 수 있고 복사 할 수 있습니다. – cbuchart

답변

1

2 개으로 Beanshell 스크립트 문제 해결 방법이 있습니다

  1. 스크립트의 시작 부분에 debug(); 명령을 추가 - 당신이 stdout
  2. 에서 테스트 흐름에 관한 추가 정보를 얻을 것이다 이런 식으로 코드를 넣어은 안에 try block처럼 :

    try { 
        //your code here 
    } 
    catch (Throwable ex) { 
        log.error("Beanshell failure", ex); 
        throw ex; 
    } 
    

    난 내가 JSR223 SamplerGroovy 언어로 전환하는 것이 좋습니다 일반적으로 jmeter.log 파일

방식에게 더 많은 정보를 스택 트레이스를 얻을. Groovy has built-in JSON support이고 Beanshell과 비교하면 훨씬 뛰어납니다. 자세한 내용은 Groovy Is the New Black 문서를 참조하십시오.

앞으로 코드를 이미지로 게시하지 마십시오. 저는이 분야를 열광하는 열정이 없을 것이라고 생각합니다.