接口自动化平台扩展(四:SpringBoot生成Api管理mysql内保存的测试数据)

点点点工程师 专栏收录该内容
53 篇文章 7 订阅

之前已经讲过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进行接口调试

有疑问的小伙伴可以进行留言,我会针对大家的疑问不断的优化文章内容,谢谢!

  • 1
    点赞
  • 25
    评论
  • 8
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页

打赏

简单随风

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值