opendx自动化测试平台云测平台二次开发


前言

在比对了一些开源的自动化平台后,发现大象平台的功能做的很不错,里面有移动端自动化和web端自动化。平台的整体架构设计也非常的好,分为server、agent和frontend。server端主要处理页面数据的增删改查,agent主要处理用例的执行和设备的管理,可分布式部署多台agent服务。server和agent主要使用的java开发的,frontend使用的时vue。由于平台只有移动端和web端,正好公司需要开发接口自动化平台,所以我在此基础上进行二次开发,将接口自动化功能实现。


一、opendx下载地址?

opendx源码

二、功能展示

1.添加接口页面

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.server新增

server端修改比较简单,添加增删改查的接口
ApiinfoController):

package com.daxiang.controller;

import com.daxiang.mbg.po.Apiinfo;
import com.daxiang.model.PageRequest;
import com.daxiang.model.PagedData;
import com.daxiang.model.Response;
import com.daxiang.model.api.JsonString;
import com.daxiang.model.vo.ApiinfoVo;
import com.daxiang.service.ApiinfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author:何明
 * @Date:10/25/20 3:36 下午
 */
@RestController
@RequestMapping("/api")
public class ApiinfoController {
   

    @Autowired
    private ApiinfoService apiService;
    @PostMapping("/saveOrUpdate")
    public Response add(@RequestBody Apiinfo apiInfo) {
   
        apiService.saveOrUpdate(apiInfo);
        return Response.success("保存成功");
    }

    @DeleteMapping("/{apiinfoId}")
    public Response delete(@PathVariable Integer apiinfoId) {
   
        apiService.delete(apiinfoId);
        return Response.success("删除成功");
    }

    @PostMapping("/list")
    public Response list(Apiinfo query, String orderBy, PageRequest pageRequest) {
   
        if (pageRequest.needPaging()) {
   
            PagedData<ApiinfoVo> pagedData = apiService.list(query, orderBy, pageRequest);
            return Response.success(pagedData);
        } else {
   
            List<ApiinfoVo> actionVos = apiService.getApiinfoVos(query, orderBy);
            return Response.success(actionVos);
        }
    }

    @PostMapping("/importJson")
    public Response importJson(@RequestBody JsonString jsonString) {
   
        return Response.success(apiService.importJson(jsonString));
    }
}

ApiinfoService)

package com.daxiang.service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.daxiang.exception.ServerException;
import com.daxiang.mbg.mapper.ApiinfoMapper;
import com.daxiang.mbg.po.Apiinfo;
import com.daxiang.mbg.po.ApiinfoExample;
import com.daxiang.mbg.po.User;
import com.daxiang.model.PageRequest;
import com.daxiang.model.PagedData;
import com.daxiang.model.api.JsonBody;
import com.daxiang.model.api.JsonString;
import com.daxiang.model.vo.ApiinfoVo;
import com.daxiang.security.SecurityUtil;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @Author:何明
 * @Date:10/25/20 3:39 下午
 */
@Service
@Slf4j
public class ApiinfoService {
   

    @Autowired
    private ApiinfoMapper apiinfoMapper;

    @Autowired
    private UserService userService;

    private ThreadLocal<Integer> number = new ThreadLocal<>();

    private void setNumber(Integer erromsg){
   
        number.set(erromsg);
    }
    private Integer getNumber(){
   
        return number.get();
    }

    private void removeNumber(){
   
        number.remove();
    }
    /**
     * 保存或修改
     * @param apiInfo
     */
    public void saveOrUpdate(Apiinfo apiInfo){
   
        try {
   
            int insertCount = 0;
            if (apiInfo.getId() != null){
   
                apiInfo.setUpdateTime(new Date());
                apiInfo.setUpdatorUid(SecurityUtil.getCurrentUserId());
                insertCount = apiinfoMapper.updateByPrimaryKey(apiInfo);
            }else {
   
                apiInfo.setCreatorUid(SecurityUtil.getCurrentUserId());
                apiInfo.setCreateTime(new Date());
                apiInfo.setState(1);
                insertCount = apiinfoMapper.insert(apiInfo);
            }
            if (insertCount != 1) {
   
                throw new ServerException("保存失败,请稍后重试");
            }
        } catch (DuplicateKeyException e) {
   
            throw new ServerException(apiInfo.getName() + "已存在");
        }
    }

    /**
     * 获取分页
     * @param query
     * @param orderBy
     * @param pageRequest
     * @return
     */
    public PagedData<ApiinfoVo> list(Apiinfo query, String orderBy, PageRequest pageRequest) {
   
        Page page = PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize());

        if (StringUtils.isEmpty(orderBy)) {
   
            orderBy = "create_time desc";
        }

        List<ApiinfoVo> apiinfoVos = getApiinfoVos(query, orderBy);
        return new PagedData<>(apiinfoVos, page.getTotal());
    }


    public List<ApiinfoVo> getApiinfoVos(Apiinfo query, String orderBy) {
   
        List<Apiinfo> apiinfos = getApiinfos(query, orderBy);
        return convertApiinfosToApiinfosVos(apiinfos);
    }


    public List<Apiinfo> getApiinfos(Apiinfo query, String orderBy) {
   
        ApiinfoExample example = new ApiinfoExample();
        ApiinfoExample.Criteria criteria = example.createCriteria();

        if (query != null) {
   
            if (query.getId() != null) {
   
                criteria.andIdEqualTo(query.getId());
            }
            if (!StringUtils.isEmpty(query.getName())) {
   
                criteria.andNameLike("%" + query.getName() + "%");
            }
            if (query.getProjectId() != null) {
   
                criteria.andProjectIdEqualTo(query.getProjectId());
            }
            if (query.getCategoryId() != null) {
   
                criteria.andCategoryIdEqualTo(query.getCategoryId());
            }
            
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值