Обмен технологиями

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. Его также необходимо преобразовать в обычный цифровой формат.

Пока эти три ловушки будут обсуждаться ниже. Конкретные планы будут написаны ниже. Сценарий: проверьте баланс перед перемещением учетной записи, проверьте баланс после перемещения учетной записи, вычтите два баланса и проверьте, является ли разница суммой моей транзакции. Проверка баланса должна быть подключена к базе данных. Здесь я ее подключать не буду, буду использовать пользовательские параметры.Нажмите, чтобы узнать о подключении 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() Эта строка преобразует экспоненциальное обозначение в обычное значение;