Compartilhamento de tecnologia

jmeter-beanshell aprendendo operações de adição, subtração, multiplicação e divisão de 5 beanshells

2024-07-12

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

O cenário que usei é calcular o valor, então me concentro principalmente no valor. Acho que essa parte é um pouco problemática. Vou apenas anotar as poucas armadilhas que encontrei sem demonstrar o processo de solução.

1. Primeiro escrevi uma subtração de dois números, mas a precisão decimal está sujeita a problemas. Por exemplo, neste caso, 1-0,01 = 0,989999997, basta escrever alguns números casualmente, não leve isso a sério. Esta situação é tratada com BigDecimal.

2. O problema da exatidão do valor calculado foi resolvido. A exatidão do valor que enviei também deve ser processada, caso contrário, o valor calculado é 1,00 e o valor que enviei é 1. Por ser uma comparação de string, 1. não é igual a 1 durante a comparação. No caso de 1,00, ocorre um erro.

3. Quando o jmeter retornar uma mensagem, se o valor for muito grande, aparecerá a notação científica, por exemplo, o valor retornado é 1,23456789013E9. Ele também precisa ser convertido em um formato digital normal.

Por enquanto, essas três armadilhas serão discutidas abaixo. Planos específicos serão escritos abaixo. Cenário: Verifique o saldo antes de movimentar a conta, verifique o saldo após movimentar a conta, subtraia os dois saldos e verifique se a diferença é o valor da minha transação. A verificação do saldo deve estar conectada ao banco de dados. Não irei conectá-lo aqui, em vez disso usarei parâmetros do usuário.Clique para saber mais sobre a conexão do jmeter ao banco de dados mysql, o saldo antes da transação é 1 e o saldo após a transação é 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);

Calcule a diferença, obtenha o valor da transação, adicione afirmações e faça um julgamento.

O acima é a subtração feita.Anote adição, subtração, multiplicação e divisão.

  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);


Escrevi com pressa e esqueci de adicionar a conversão em notação científica. Se o resultado retornado estiver em notação científica, geralmente precisa ser convertido.

Use expressões regulares diretamente para extrair bal_ar e depois processá-lo

  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();