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))
}
}