【Mock平台】为系列测试开发教程,从0到1编码带你一步步使用Spring Boot 和 Antd React框架完成搭建一个测试工具平台,希望作为一个实战项目对各位的测试开发学习之路有帮助,关注公众号发送“mock”获取github项目源码地址,大奇一个专注测试技术干货原创与分享的家伙。
本篇为上一篇留个大家独立思考实现逻辑代码的参考,不做过渡的重复讲解。
规则配置数据表
创建一个基本规则映射表,其中预留个扩展高级处理配置字段。
表名字为 mock_rule
,
create table mock_rule
(rule_id int auto_increment comment '规则自增ID'primary key,rule_api_id int not null comment '所属api的ID',rule_title varchar(100) not null comment '规则标题',rule_type varchar(50) not null comment '规则类型',rule_enable tinyint null comment '状态',rule_request_filter varchar(1000) null comment '匹配规则',rule_response_body text null comment '规则匹配返回内容',rule_response_code int null comment '规则接口返回状态码',rule_shell text null,rule_create_user varchar(50) null comment '规则创建人',rule_create_date datetime default CURRENT_TIMESTAMP null,rule_update_user varchar(50) null comment '规则修改人',rule_update_date datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '规则修改时间'
)comment '接口规则表';
插入两条备用测试数据
规则表操作
继续Spring Boot针对数据查询基本套路,分别创建实体类和服务类。
实体类
编写数据库表mock_rule
的字段匹配的实体类,注意此类中字段名和表属性名映射将在mapper做处理。
@Data
@NoArgsConstructor
@AllArgsConstructor
public class QMockApiRuleEntity extends QBaseEntity implements Serializable {private Long id;private Long apiId;private String title;private String type;private int enable;private JSONArray reqFilter;private JSONObject resBody;private int resCode = 200;private String shell;
在服务类 QMockService
继续追加对应业务处理,即通过api的id查询所属配置规则列表。
@Service("QMockService")
public class QMockService{@Autowiredprivate QMockApiRuleMapper qMockApiRuleMapper;public List<QMockApiRuleEntity> selectApiRuleList(Long apiId) {List<QMockApiRuleEntity> mockApiRuleEntities = qMockApiRuleMapper.getMockApiRuleLisByApiId(apiId);return mockApiRuleEntities;}
}
数据操作
查询条件为rule_id对应的值,并且需要配置@Results
对实体类和数据表实际字段名的映射。
@Mapper
public interface QMockApiRuleMapper {@Select("SELECT * from mock_rule WHERE rule_api_id=#{apiId} and rule_enable <> 3 ORDER BY rule_enable, rule_update_date DESC")@Results(id = "apiRuleMap", value = {@Result(column = "rule_id", property = "id"),@Result(column = "rule_api_id", property = "apiId"),@Result(column = "rule_title", property = "title"),@Result(column = "rule_type", property = "type"),@Result(column = "rule_enable", property = "enable"),@Result(column = "rule_request_filter", property = "reqFilter", jdbcType = JdbcType.VARCHAR, typeHandler = JSONArrayTypeHandler.class),@Result(column = "rule_response_body", property = "resBody", jdbcType = JdbcType.VARCHAR, typeHandler = JSONObjectTypeHandler.class),@Result(column = "rule_response_code",property = "resCode"),@Result(column = "rule_shell", property = "shell"),@Result(column = "rule_create_user", property = "createUser"),@Result(column = "rule_create_date", property = "createDate"),@Result(column = "rule_update_user", property = "updateUser"),@Result(column = "rule_update_date", property = "updateDate")})List<QMockApiRuleEntity> getMockApiRuleLisByApiId(@Param("apiId") Long apiId);}
同样Results标记中有一处 typeHandler = JSONArrayTypeHandler.class
,会同JSONArrayTypeHandler
在下一篇进行扩有关于自定义类型的扩展知识讲解,这里先给出具体代码:
public class JSONArrayTypeHandler extends BaseTypeHandler<JSONArray> {@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, JSONArray parameter, JdbcType jdbcType) throws SQLException {ps.setString(i, String.valueOf(parameter.toJSONString()));}// 转换处理部分@Overridepublic JSONArray getNullableResult(ResultSet rs, String columnName) throws SQLException {String sqlJson = rs.getString(columnName);if (null != sqlJson){return JSONObject.parseArray(sqlJson);}return null;}@Overridepublic JSONArray getNullableResult(ResultSet rs, int columnIndex) throws SQLException {String sqlJson = rs.getString(columnIndex);if (null != sqlJson){return JSONObject.parseArray(sqlJson);}return null;}@Overridepublic JSONArray getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {String sqlJson = cs.getString(columnIndex);if (null != sqlJson){return JSONObject.parseArray(sqlJson);}return null;}
}
业务逻辑
功能方法的使用在上一节中已经有具体的体现了,这里给大家看下完整的代码层级。
到此,有关规则的数据业务层的逻辑实现详细的展示完毕,如果你上一篇已经自主完成编码实现了,恭喜你,你学的很扎实。但如果没有也没关系跟着这篇看一遍,敲代一遍,再同上一篇好好捋一捋,将这个规则的请求调通,那也是很棒了。