• Python搭建接口自动化测试框架-Golang-Gin


    项目介绍

    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>..incobra.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))
        }
    }
    
    
    牛人之所以是牛人,是因为你现在在踩的坑,他曾经都已经踩过了。
  • 相关阅读:
    Scanner类
    16 String类
    15_面向对象_01
    14_面向对象_01_2 完整格式
    14_面向对象_01_1 成员变量 成员方法
    13_面向对象辅助看懂实例
    面向对象的基本概念
    Servlet_03 进阶随笔 两种域的运用调用方式
    Servlet_03 资源跳转 关键字
    Servlet_02 资源跳转
  • 原文地址:https://www.cnblogs.com/dwBurning/p/autoapitest-go.html
Copyright © 2020-2023  润新知