接口自动化平台扩展(四:SpringBoot生成Api管理mysql内保存的测试数据)
之前已经讲过java接口自动化的框架搭建,具体请查看:
接口自动化落地(一:MySQL+MyBatis实现对测试用例数据的读取)
接口自动化落地(二:HttpClient+testNG实现对接口的测试及校验)
接口自动化落地(三:jenkins集成httpclient项目并生成在线报告)
如果有问题的地方请留言,我会针对留言不断优化文章内容,谢谢~
本篇文章讲解的是通过api去管理mysql内存储的测试数据,使用的是SpringBoot框架,同样是使用java语句。
关于SpringBoot的环境搭建,在之前的文章内讲解过,本篇不做过多叙述,有疑问的小伙伴请戳SpringBoot框架使用(SpringBoot框架的安装和启用)
本篇仍以登录接口举例进行讲解,首先贴出项目结构
因为我实现的是对每一张表的增删改查,不涉及连表查询,不涉及其他的逻辑控制,所以目录结构比较简单,controller层内是api的代码实现,model层是数据声明,mapper文件下放置各表操作的sql语句。下面是具体的代码讲解:
1.model层
login_case表中包含以下字段:id、mobile、password、device_uid、loginType
新建LoginCase类,使用lombok的Data注解
package com.course.model;
import lombok.Data;
@Data
public class LoginCase {
private int id;
// 用户登录手机号
private String mobile;
// 用户登录密码
private String password;
// 设备id
private String device_uid;
// 登录方式
private String loginType;
}
2.xml文件
mapper文件下新建login.xml文件。一共包含4条语句,查询单条信息、查询全表、删除单条、插入单条、更新单条。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.course.controller.LoginController">
<sql id="Login_Case_List" >
id, mobile, password, device_uid, loginType
</sql>
<!--根据id查询某条信息-->
<select id="loginSelectById" resultType="com.course.model.LoginCase" parameterType="Integer" >
select
<include refid="Login_Case_List" />
from login_case
where id = #{id,jdbcType=INTEGER}
</select>
<!--获取所有数据-->
<select id="loginGetAll" resultType="com.course.model.LoginCase">
select
<include refid="Login_Case_List"/>
from login_case
</select>
<!--根据id删除某条信息-->
<delete id="loginDeleteById" parameterType="Integer">
delete
from login_case
where id = #{id,jdbcType=INTEGER}
</delete>
<!--插入一条数据-->
<insert id="loginInsertData" parameterType="com.course.model.LoginCase" keyProperty="id" useGeneratedKeys="true">
insert into login_case
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="mobile != null">mobile,</if>
<if test="password != null">password,</if>
<if test="device_uid != null">device_uid,</if>
<if test="loginType != null">loginType,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="mobile != null" >#{mobile,jdbcType=VARCHAR},</if>
<if test="password != null" >#{password,jdbcType=VARCHAR},</if>
<if test="device_uid != null" >#{device_uid,jdbcType=VARCHAR},</if>
<if test="loginType != null" >#{loginType,jdbcType=VARCHAR},</if>
</trim>
</insert>
<!--根据id更新数据-->
<update id="loginUpdateById" parameterType="com.course.model.LoginCase">
update login_case
<set>
<if test="mobile != null">mobile = #{mobile,jdbcType=VARCHAR},</if>
<if test="password != null" >password = #{password,jdbcType=VARCHAR},</if>
<if test="device_uid != null" >device_uid = #{device_uid,jdbcType=VARCHAR},</if>
<if test="loginType != null" >loginType = #{loginType,jdbcType=VARCHAR},</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>
其中有一个特殊的是插入单条数据的sql语句,这时候返回结果是插入数据后,在mysql内存的id
3.control层
因为我的项目集成了swaggerUI(第三方框架,可自动生成Api文档),所以在以下代码中,我会注明是SpringBoot的注解还是swaggerUI的注解,如果不使用swaggerUI可无视它的注解。
对swaggerUI感兴趣的请戳SpringBoot集成SwaggerUI。
以下是接口实现部分代码:
package com.course.controller;
import com.course.model.LoginCase;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@Api(value = "/login",description = "login_case表") //swaggerUI注解
@RequestMapping("/login") //spring注解,接口路径
public class LoginController {
@Autowired
private SqlSessionTemplate template;
/**
* 获取表完整数据
*/
@GetMapping(value = "/getall") //spring注解,接口路径
@ApiOperation(value = "获取表完整数据",httpMethod = "GET") //swaggerUI注解
public List<LoginCase> getAllLoginCase(){
return template.selectList("loginGetAll");
}
/**
* 单条数据查询
*/
@GetMapping(value = "/getcase/{id}") //spring注解,接口路径
@ApiOperation(value = "单条数据查询",httpMethod = "GET") //swaggerUI注解
public LoginCase getOneLoginCase(@PathVariable("id") Integer id){
return template.selectOne("loginSelectById",id);
}
/**
* 新增单条数据
*/
@PostMapping(value = "/addcase") //spring注解,接口路径
@ApiOperation(value = "新增单条数据",httpMethod = "POST") //swaggerUI注解
public String insertLoginCase(@RequestBody LoginCase loginCase){
template.insert("loginInsertData",loginCase);
return "新增数据id ="+loginCase.getId();
}
/**
* 删除单条数据
*/
@PostMapping(value = "/deletecase") //spring注解,接口路径
@ApiOperation(value = "删除单条数据",httpMethod = "POST") //swaggerUI注解
public String deleteLoginCase(@RequestBody Integer id){
template.delete("loginDeleteById",id);
return "删除成功!";
}
/**
* 修改单条数据
*/
@PostMapping(value = "/updatecase") //spring注解,接口路径
@ApiOperation(value = "修改单条数据",httpMethod = "POST") //swaggerUI注解
public String updateLoginCase(@RequestBody LoginCase loginCase){
template.update("loginUpdateById",loginCase);
return "更新成功!";
}
}
template的执行方法中,以“template.selectOne(“loginSelectById”,id);”举例,loginSelectById是xml文件中对应sql语句的id,”id”是接口的入参。
到这里,login_case单张表的增删改查就全部实现了,运行一下Application文件,可以看到启用成功。
这时候可以调用接口去获取数据,也可以通过swaggerUI进行接口调试
有疑问的小伙伴可以进行留言,我会针对大家的疑问不断的优化文章内容,谢谢!