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

坑:又是字符编码

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

我收到的参数:

我的开发日记(十二)-编程知识网

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

我的开发日记(十二)-编程知识网

上网抄了一个解决方案:

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

数据库回滚

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

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

@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)

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

    @Override
    public int addUser(EditUserBean user) {
        int add = testUserMapper.addUser(user);
        if (add == 1) {
            TestUserCheckBean userCheckBean = new TestUserCheckBean();
            userCheckBean.copyFrom(user);
            TestUserCheckBean bean = new TestUserCheckBean();
            int i = updateUserStatus(userCheckBean);
            if (i != 1 || StringUtils.isEmpty(userCheckBean.getCertificate())) {
                UserStatusException.fail(TestUserCode.CHECK_FAIL.getDesc());
            }
        } else {
            UserStatusException.fail(TestUserCode.ADD_USER_FAIL.getDesc());
        }
        return user.getId();
    }


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

热文精选

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