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

测试集合页面地址

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:创建时间。
在这里插入图片描述

测试用例表

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

id:主键,自动增长。
【核心】suite_id:外键。测试套件id。
【核心】name:用例名称。
【外键】create_user:创建者信息。mybatis-plus自动填充,创建用户就是登录用户。cases join user表。
create_time:创建时间。
在这里插入图片描述

用例参数值表

一个用例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:创建时间。
在这里插入图片描述

添加到测试集的流程

  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;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @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;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @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;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @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;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @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。
在这里插入图片描述
这里需要再写一个else if,如果字符串没值,是2这种类型的,执行以下两句,如果字符串有值,把下面第一句话改掉。把字符串写在这里,代替bodyParams,其他一概不要动。
在这里插入图片描述
同时,需要修改ApiClassificationController.java中的add2方法。这边如果是通用的,就不需要再截取了,这几句代码就可以注释掉了。
在这里插入图片描述
问题:apiEdit 解决本身有参数,然后在这个基础上再添加参数的时候——去除list中属性全为null的元素
解决思路一:编辑页面,所有地方干脆不用requestParams大集合,用它的子集。
现在出现的问题是,一会儿是requestParams,一会儿是bodyParams,一会儿是headerParams。
序号requestParams[0],bodyParams[1],headerParams[2]。有可能bodyParams[0]为空,就会造成数据库插入异常。就需要把bodyParams[0]为空的,在后端把它删除。

对象为null,与对象属性为null,是不一样的。目前就是bodyParams[0]这个对象是有的,但是这个对象的属性为空null,就需要把它删除。
在这里插入图片描述

发布了64 篇原创文章 · 获赞 2 · 访问量 2801

猜你喜欢

转载自blog.csdn.net/anniewhite/article/details/104877633