我的开发日记(十二)

这两天继续联调,做一些细节的修改,总体来讲问题不大。总结如下:踩了一个坑,学到了数据库回滚。

坑:又是字符编码

这个项目有一个中间层服务,前端的请求在中间层会被处理一下,然后转发到我的Java服务。中间层主要是校验用户登录状态和处理用户登录信息。结果发现中间层在处理参数的时候,默认都都转成了Unicode编码格式的字符串了。这个说法可能用词有些不当,就是前段传的参数是测试,我收到的参数是u6d4bu8bd5,而且是utf-8编码格式的字符串。我有点迷,找了半天问题,虽然不知道为啥这么做,但是数据库里面确实正常的。中间层服务是Python的,大概是Python语言的习惯吧。

我收到的参数:

跳过中间层,从前端直接发请求到我的服务上时参数如下:

上网抄了一个解决方案:

    /**
     * 处理Unicode码转成utf-8
     *
     * @param str
     * @return
     */
    public static String unicodeToStringString str) {
        Pattern pattern = Pattern.compile"\\u\p{XDigit}{4}))");
        Matcher matcher = pattern.matcherstr);
        char ch;
        while matcher.find)) {
            String group = matcher.group2);
            ch = char) Integer.parseIntgroup, 16);
            String group1 = matcher.group1);
            str = str.replacegroup1, ch + Constant.EMPTY);
        }
        return str;
    }

数据库回滚

这个实现比较简单,增加一个注释即可,刚好是用到了就搜了一下。在某些场景下,一个数据库事务分成了好几个步骤,如果中间出现异常中断,则将之前已经执行的数据库操作回滚。比如:我新建了一条测试用例之后,需要创建一条用例编辑记录,然后把用例的关联关系保存到另外一张表里面。如果在保存用例关系时候发现错误,比如关联失败,则需要把记录和用例都删除,返回相应错误码。

具体实现方案是在service类增加rollbackFor注解即可,如下:

@Transactionalisolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)

当然可以用在判断结果上,比如关联项目已经过期或者无权操作时,可以抛出一个自定义异常。

    @Override
    public int addUserEditUserBean user) {
        int add = testUserMapper.addUseruser);
        if add == 1) {
            TestUserCheckBean userCheckBean = new TestUserCheckBean);
            userCheckBean.copyFromuser);
            TestUserCheckBean bean = new TestUserCheckBean);
            int i = updateUserStatususerCheckBean);
            if i != 1 || StringUtils.isEmptyuserCheckBean.getCertificate))) {
                UserStatusException.failTestUserCode.CHECK_FAIL.getDesc));
            }
        } else {
            UserStatusException.failTestUserCode.ADD_USER_FAIL.getDesc));
        }
        return user.getId);
    }


公众号FunTester首发,更多原创文章:FunTester410+原创文章,欢迎关注、交流,禁止第三方擅自转载。

热文精选

接口功能测试专辑
性能测试专题
图解HTTP脑图
写给所有人的编程思维
Selenium并行测试最佳实践
如何维护自动化测试
有关UI测试计划
Selenium自动化测试技巧

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注