项目介绍

AutoApiTest

基于python的接口自动化测试框架
Test部分基于yingoja开源的DemoApi优化修改而来
API部分将继续完善,提供基于C#,Go,Java,Python版本的Api服务程序,目的是为了学习接口测试的同学不需要去搭建其他语言的运行环境,顺便我也复习一下这几门语言的基础语法。

项目仓库

https://github.com/dwBurning/AutoApiTest.git

API部分-Golang-Gin

cobra

简介

Cobra是一个用于创建强大的现代CLI应用程序的库,也是一个用于生成应用程序和命令文件的程序。

安装

go get -v github.com/spf13/cobra/cobra

使用cobra生成应用程序

假设现在我们要开发一个基于CLIs的命令程序,名字为AutoApiTest。首先打开CMD,切换到GOPATH的src目录下,执行如下指令:

D:GOPATHsrc>..bincobra.exe init AutoApiTest --pkg-name api
Your Cobra application is ready at
D:GOPATHsrc/AutoApiTest

在src目录下会生成一个AutoApiTest的文件夹,如下:

D:GOPATHSRCAutoApiTest
| LICENSE
| main.go
|
---cmd
root.go

D:GOPATHsrcgo-blog>go mod init api
go: creating new go.mod: module api

运行

Microsoft Windows [版本 6.3.9600]
(c) 2013 Microsoft Corporation。保留所有权利。

D:GOPATHsrcAutoApiTest>go run main.go
Api服务正在启动
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.

  • using env: export GIN_MODE=release
  • using code: gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET /api/person --> api/controller.Get (1 handlers)
[GIN-debug] GET /api/person/:id --> api/controller.GetById (1 handlers)
[GIN-debug] POST /api/person --> api/controller.Add (1 handlers)
[GIN-debug] PATCH /api/person/:id --> api/controller.Patch (1 handlers)
[GIN-debug] DELETE /api/person/:id --> api/controller.Delete (1 handlers)
http://127.0.0.1:5000
Enter Control + C Shutdown Server

核心代码


package controller
import (
    "api/model"
    "api/response"
    "net/http"
    "strconv"
    "github.com/gin-gonic/gin"
)
var persons = make(map[int]model.Person)
func Get(ctx *gin.Context) {
    var ps []model.Person
    for _, v := range persons {
        ps = append(ps, v)
    }
    ctx.JSON(http.StatusOK, response.New(0, "获取成功", ps))
}
func GetById(ctx *gin.Context) {
    id := ctx.Param("id")
    key, _ := strconv.Atoi(id)
    person, ok := persons[key]
    if ok {
        ctx.JSON(http.StatusOK, response.New(0, "获取成功", person))
    } else {
        ctx.JSON(http.StatusOK, response.New(-1, "人事资料不存在", nil))
    }
}
func Delete(ctx *gin.Context) {
    id := ctx.Param("id")
    key, _ := strconv.Atoi(id)
    person, ok := persons[key]
    if ok {
        delete(persons, key)
        ctx.JSON(http.StatusOK, response.New(0, "删除成功", person))
    } else {
        ctx.JSON(http.StatusOK, response.New(-1, "人事资料不存在", nil))
    }
}
func Patch(ctx *gin.Context) {
    id := ctx.Param("id")
    key, _ := strconv.Atoi(id)
    person, ok := persons[key]
    if ok {
        var p model.Person
        ctx.ShouldBindJSON(&person)
        persons[key] = p
        ctx.JSON(http.StatusOK, response.New(0, "修改成功", nil))
    } else {
        ctx.JSON(http.StatusOK, response.New(-1, "人事资料不存在", nil))
    }
}
func Add(ctx *gin.Context) {
    var p model.Person
    ctx.ShouldBindJSON(&p)
    _, ok := persons[p.Id]
    if ok {
        ctx.JSON(http.StatusOK, response.New(-1, "人事资料已存在", nil))
    } else {
        persons[p.Id] = p
        ctx.JSON(http.StatusOK, response.New(0, "添加成功", nil))
    }
}