写testng遇到过的问题以及解决方法

一、java.util.IllegalFormatConversionException: d != java.lang.String

在这里插入图片描述
定位到报错代码:
在这里插入图片描述
trade_order传入的不是int类型,而是string类型,将%d换成%s就可以解决。

二、 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

这是越界异常,但不是数组越界异常,数组越界异常报错:java.lang.ArrayIndexOutOfBoundsException
查阅相关资料是List集合没有做非空校验,重新看代码,是SQL查询的结果为空,因为当时传入的order_id不正确,后期传入正确的order_id使得查询出结果,就不报错了。
这是写自动化case,如果查询结果为空就代表异常了,case执行失败,但QA在代码CR时应该看RD的代码中是否有查询的非空判断,防止异常情况出现

  final String SELECT_PAY_TRANSACTION_PAYMENT_TRADE_ORDERS ="SELECT * from `pay_transaction_payment_trade_orders` where `order_id` = '%s'";
>  JSONObject paycoreOrders =
> selectDbData(SELECT_PAY_TRANSACTION_PAYMENT_TRADE_ORDERS, order_id);
三、Unknown column ‘XXX’ in ‘where clause’

从表面理解是列不存在,但经排查并不是列不存在,而是由于拼凑sql语句时对字符类型数据没有用引号引起来造成的。
原sql:select * from pay_accounting_payment_trade_order where pay_no = %s;
由于pay_no传入的是String类型,所以将s%用引号引起来问题就解决了。
select * from pay_accounting_payment_trade_order where pay_no = ‘%s’;
在这里插入图片描述

四、如何从调用接口获取返回值中的指定字段

1、首先需要知道调用接口的返回值时什么类型的,然后定义一个变量去接收该接口的返回值。
2、然后用变量. 的指定get方法,获取指定的返回值字段,定义一个变量接收返回的字段;
3、最后return 第2步的变量;
4、最后调用图中提现接口时,就会返回想要的pay_no了。
在这里插入图片描述

五、如何获取返回值date中的指定字段

此代码想要获取返回值中date里面的pay_no;返回值:
首先先获取到返回值,然后再用get方法从返回值里取date,再从date里用get方法获取到指定的pay_no。

{
“status”: 0,
“msg”: “”,
“data”: {
“pay_no”: “NW20200707140639242494envqae2116”,
“trade_order”: “12343344332332”
} }

 private String transferWithdrawUrl( String order_id, Integer amt) throws Exception {
    JSONObject withdrawParamJSON = JSONObject.parseObject(requestStrOrder);
    withdrawParamJSON.getJSONObject("data").fluentPut("amt", amt).fluentPut("order_id", order_id);
    JSONObject ob= sendRequest(withdrawParamJSON, URL_OPAYMENT_TransferWithdrawUrl + getDate() + "&logid=" +
            RandomUtil.getRandom(24, false), null);
    JSONObject data = ob.getJSONObject("data");
    String payNo = data.getString("pay_no");
    return payNo;
}
六、java.util.MissingFormatArgumentException: Format specifier ‘%d’

SQL期望输入一个值,实际并没有传值,看下问题代码:

final String UPDATE_WALLET1 ="UPDATE `ymtpay`.`wallet` set balance = %d WHERE (`account_id` = (SELECT id FROM `ymtpay`.`pay_accounts` WHERE `customer_id` = '655758969785182' ) and detailed_account_code='2203003')";

只要使用SQL时传递一个值,就可以解决问题。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40966030/article/details/107180675
今日推荐