技術共有

jmeter-beanshell 学習 5-beanshell の加算、減算、乗算、除算の演算

2024-07-12

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

私が使用したシナリオは金額を計算することなので、この部分は少し面倒に感じますが、解決プロセスを示すことなく、私が遭遇したいくつかの落とし穴だけを書きます。

1. 最初に 2 つの数値の減算を書きましたが、小数精度では問題が発生しやすくなります。たとえば、この場合、1-0.01=0.989999997 ですが、真剣に考えず、何気なくいくつかの数字を書きます。この状況は BigDecimal で処理されます。

2. 計算された金額の精度の問題は解決されました。それ以外の場合、計算された金額は 1.00 であり、私が提出した金額は 1 です。文字列比較であるため、比較時に1と1が等しくない場合はエラーとなります。

3. jmeter がメッセージを返すときに、量が大きすぎる場合、科学的表記が表示されます。たとえば、返される量は 1.23456789013E9 です。通常のデジタル形式に変換する必要もあります。

当面、これら 3 つの落とし穴については、以下に具体的な計画を書きます。シナリオ: アカウントを移動する前に残高を確認し、アカウントを移動した後に残高を確認し、2 つの残高を差し引き、その差額が私の取引額であるかどうかを確認します。残高を確認するにはデータベースに接続する必要がありますが、ここでは接続せず、代わりにユーザーパラメータを使用します。クリックして、jmeter の mysql データベースへの接続について学習します。、取引前の残高は 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(); この行は科学表記法を通常の値に変換します。