기술나눔

jmeter-beanshell 학습 5-beanshell 덧셈, 뺄셈, 곱셈 및 나눗셈 연산

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

제가 사용한 시나리오는 금액을 계산하는 것이므로 주로 금액에 중점을 두었습니다. 이 부분이 좀 번거로울 것 같아서 해결 과정을 보여주지 않고 제가 겪은 몇 가지 함정만 적어보겠습니다.

1. 먼저 두 숫자의 뺄셈을 썼는데 소수점 이하 정밀도가 문제가 되기 쉽습니다. 예를 들어, 이 경우 1-0.01=0.989999997, 숫자 몇 개를 가볍게 쓰되 심각하게 받아들이지 마세요. 이 상황은 BigDecimal로 처리됩니다.

2. 계산된 금액의 정확성 문제가 해결되었습니다. 제출한 금액의 정확성도 처리해야 합니다. 그렇지 않으면 계산된 금액이 1.00이고 내가 제출한 금액은 1입니다. 문자열 비교이므로, 비교 시 1은 1이 아닙니다. 1.00의 경우 오류가 발생합니다.

3. jmeter가 메시지를 반환할 때 금액이 너무 크면 과학적 표기법이 나타납니다. 예를 들어 반환된 금액은 1.23456789013E9입니다. 또한 일반 디지털 형식으로 변환해야 합니다.

당분간 이 세 가지 함정에 대해서는 아래에서 구체적인 계획을 설명하겠습니다. 시나리오 : 계좌이동 전 잔액을 확인하고, 계좌이동 후 잔액을 확인하고, 두 잔액을 차감한 후 그 차액이 내 거래금액인지 확인합니다. 저울 확인은 데이터베이스에 연결해야 합니다. 여기서는 대신 사용자 매개변수를 사용하겠습니다.mysql 데이터베이스에 연결하는 jmeter에 대해 알아보려면 클릭하세요., 거래 전 잔액은 1, 거래 후 잔액은 0.99

  1. import java.math.BigDecimal;
  2. import java.math.RoundingMode;
  3. //动账前余额
  4. before=vars.get("BAL_1");
  5. //动账后余额
  6. after=vars.get("BAL_2");
  7. BigDecimal before=new BigDecimal(before);
  8. BigDecimal after=new BigDecimal(after);
  9. //两数相减,计算动账前后余额变化
  10. BigDecimal fee_new= before.subtract(after);
  11. //保留两位小数
  12. BigDecimal fee_new=fee_new.setScale(2,RoundingMode.HALF_UP);
  13. //转化为字符串
  14. String fee_new1=fee_new.toString();
  15. log.info("动账前后差值:"+fee_new1);

차액을 계산하고, 거래 금액을 얻고, 주장을 추가하고, 판단합니다.

위의 뺄셈이 완료되었습니다.덧셈, 뺄셈, 곱셈, 나눗셈을 적어보세요.

  1. import java.math.BigDecimal;
  2. BigDecimal a=new BigDecimal("6");
  3. BigDecimal b=new BigDecimal("2");
  4. BigDecimal c=a.add(b);
  5. String c1=c.toString();
  6. log.info("a+b="+c1);
  7. BigDecimal c=a.subtract(b);
  8. String c1=c.toString();
  9. log.info("a-b="+c1);
  10. BigDecimal c=a.multiply(b);
  11. String c1=c.toString();
  12. log.info("a*b="+c1);
  13. BigDecimal c=a.divide(b);
  14. String c1=c.toString();
  15. log.info("a/b="+c1);


급하게 작성했는데 과학적 표기법 변환을 추가하는 것을 잊어버렸습니다. 반환된 결과가 과학적 표기법인 경우 일반적으로 변환이 필요합니다.

정규식을 직접 사용하여 bal_ar을 추출한 후 처리합니다.

  1. bal_ar=vars.get("bal_ar");
  2. BigDecimal bal_ar1=new BigDecimal(bal_ar);
  3. BigDecimal bal_ar1=bal_ar1.setScale(2,RoundingMode.HALF_UP);
  4. String bal_ar2=bal_ar1.toPlainString();
  5. log.info("科学计数法转化以后:"+bal_ar2);

String bal_ar2=bal_ar1.toPlainString(); 이 줄은 과학적 표기법을 일반 값으로 변환합니다.