测试开发系列之——添加用例到测试集合(一)

目录

    • 测试集合页面地址
    • 测试套件表
    • 测试用例表
    • 用例参数值表
    • 添加到测试集的流程
    • 第一步:根据projectId获得suite
    • 第二步和第三步相关后端代码修改
    • 遇到的问题汇总

测试集合页面地址

url:http://www.ck.org/lemon/html/index2.html
相关页面:caseList.html

测试套件表

suite:测试套件表

id:主键,自动增长。
【核心】project_id:外键。项目id。
【核心】name:套件名称。
description:关于套件的简单说明。
【外键】create_user:创建者信息。mybatis-plus自动填充,创建用户就是登录用户。suite join user表。
create_time:创建时间。
测试开发系列之——添加用例到测试集合(一)_第1张图片

测试用例表

一个套件suite对应多个用例cases。
cases:测试用例表

id:主键,自动增长。
【核心】suite_id:外键。测试套件id。
【核心】name:用例名称。
【外键】create_user:创建者信息。mybatis-plus自动填充,创建用户就是登录用户。cases join user表。
create_time:创建时间。
测试开发系列之——添加用例到测试集合(一)_第2张图片

用例参数值表

一个用例cases对应多个参数值case_param_value。
case_param_value:用例参数值表

id:主键,自动增长。
【核心】case_id:外键。测试套件id。
api_request_param_id:用例名称。
api_request_param_value:用例名称。
【外键】create_user:创建者信息。mybatis-plus自动填充,创建用户就是登录用户。case_param_value join user表。
create_time:创建时间。
测试开发系列之——添加用例到测试集合(一)_第3张图片

添加到测试集的流程

  1. 根据projectId获得suite
  2. 添加到cases
  3. 批量添加到case_param_value

spring有事务管理的,第2步和第3步是同一事务。要么同时提交,要么同时回滚。
@EnableTransactionManagement底层是支持注解的事务,它会在所有的业务层方法上面加上一个@Transactional,表示这个方法里面执行的所有代码就是在同一个事务当中。
不是手动去提交事务,而是全面托管给spring。
可参阅:spring的@Transactional注解详细用法

第一步:根据projectId获得suite

在com.one.controller下修改类SuiteController.java的代码如下:

package com.one.controller;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.one.common.Result;
import com.one.pojo.ApiClassification;
import com.one.pojo.Suite;
import com.one.service.SuiteService;

/**
 * 

* 前端控制器 *

* * @author annie * @since 2020-02-16 */
@RestController @RequestMapping("/suite") public class SuiteController { @Autowired SuiteService suiteService; @GetMapping("/listAll") public Result findAll(Integer projectId){ QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("project_id", projectId); List<Suite> list = suiteService.list(queryWrapper); return new Result("1",list); } }

第二步和第三步相关后端代码修改

CasesController.java的代码修改如下:

package com.one.controller;


import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import com.one.common.ApiVO;
import com.one.common.Result;
import com.one.pojo.ApiRequestParam;
import com.one.pojo.CaseParamValue;
import com.one.pojo.Cases;
import com.one.service.CaseParamValueService;
import com.one.service.CasesService;

/**
 * 

* 前端控制器 *

* * @author annie * @since 2020-02-16 */
@RestController @RequestMapping("/cases") public class CasesController { @Autowired CasesService casesService; @PostMapping("/add") public Result add(Cases caseVo, ApiVO apiRunVO){ //添加到cases casesService.add(caseVo,apiRunVO); return new Result("1","添加测试集成功"); } }

CasesService.java的代码修改如下:

package com.one.service;

import com.one.common.ApiVO;
import com.one.pojo.Cases;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 

* 服务类 *

* * @author annie * @since 2020-02-16 */
public interface CasesService extends IService<Cases> { public void add(Cases caseVo, ApiVO apiRunVO); }

CasesServiceImpl.java的代码修改如下:

package com.one.service.impl;

import com.one.pojo.ApiRequestParam;
import com.one.pojo.CaseParamValue;
import com.one.pojo.Cases;
import com.one.common.ApiVO;
import com.one.common.Result;
import com.one.mapper.CasesMapper;
import com.one.service.CaseParamValueService;
import com.one.service.CasesService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 

* 服务实现类 *

* * @author annie * @since 2020-02-16 */
@Service public class CasesServiceImpl extends ServiceImpl<CasesMapper, Cases> implements CasesService { @Autowired CaseParamValueService caseParamValueService; public void add(Cases caseVo, ApiVO apiRunVO){ //添加到cases this.save(caseVo); //批量添加到case_param_value List<ApiRequestParam> requestParams = apiRunVO.getRequestParams(); List<CaseParamValue> caseParamValues = new ArrayList<CaseParamValue>(); for(ApiRequestParam apiRequestParam : requestParams){ CaseParamValue caseParamValue = new CaseParamValue(); caseParamValue.setCaseId(caseVo.getId()); caseParamValue.setApiRequestParamId(apiRequestParam.getId()); caseParamValue.setApiRequestParamValue(apiRequestParam.getValue()); caseParamValues.add(caseParamValue); } caseParamValueService.saveBatch(caseParamValues); } }

遇到的问题汇总

问题:json请求参数,单引号,存字符串到数据库 run——string。
问题:MultiValueMap传过来的{“json”:["{‘projectId’:15,‘name’:‘xxx’}"]}。
这个格式直接json转java是失败的,需要对这个不良的串进行截取,只要{‘projectId’:15,‘name’:‘xxx’}。

修改ApiServiceImpl.java中的run方法,body2和4要分开处理,再加一个else if。
测试开发系列之——添加用例到测试集合(一)_第4张图片
这里需要再写一个else if,如果字符串没值,是2这种类型的,执行以下两句,如果字符串有值,把下面第一句话改掉。把字符串写在这里,代替bodyParams,其他一概不要动。
测试开发系列之——添加用例到测试集合(一)_第5张图片
同时,需要修改ApiClassificationController.java中的add2方法。这边如果是通用的,就不需要再截取了,这几句代码就可以注释掉了。
测试开发系列之——添加用例到测试集合(一)_第6张图片
问题:apiEdit 解决本身有参数,然后在这个基础上再添加参数的时候——去除list中属性全为null的元素
解决思路一:编辑页面,所有地方干脆不用requestParams大集合,用它的子集。
现在出现的问题是,一会儿是requestParams,一会儿是bodyParams,一会儿是headerParams。
序号requestParams[0],bodyParams[1],headerParams[2]。有可能bodyParams[0]为空,就会造成数据库插入异常。就需要把bodyParams[0]为空的,在后端把它删除。

对象为null,与对象属性为null,是不一样的。目前就是bodyParams[0]这个对象是有的,但是这个对象的属性为空null,就需要把它删除。
测试开发系列之——添加用例到测试集合(一)_第7张图片

你可能感兴趣的:(测试开发)