go测试库之apitest

这篇具有很好参考价值的文章主要介绍了go测试库之apitest。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

使用go语言做开发差不多快一年了,主要用来写后端Web服务,从一开始吐槽他的结构体,比如创建个复杂的JSON格式数据,那是相当的痛苦。还有 err 处理写的巨麻烦。

当然,go 也有爽的地方,创建个线协程简直太简单了。

到后来慢慢接受,觉得效率还行,因为是静态强类型语言,在修改完项目代码之后,反而很有信心(如果出现低级的类型错误,直接编译出错了),相比 Python 就要反复检查两边,对修改的代码总时心里发虚。

go语言测试相关的东西都不咋地,比如自带的测试框架相比较 pytest 那是相当的简陋。今年开始给后端写单元测试(其实应该叫接口测试),发现 apitest库 眼前一亮。采用链式调用,和 HttpRunner 3.x 的链式调用颇有几分相似。

  • HttpRunner 3.x
# httprunner 3.x 
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase


class TestCaseTestCase(HttpRunner):

    config = Config("basic test config").base_url("http://127.0.0.1:8000/api")

    teststeps = [
        Step(
            RunRequest(" test_add_event_all_null")
            .post("/add_event/")
            .with_data({"eid": "", "limit": "", "address": "", "start_time": ""})
            .validate()
            .assert_equal("body.status", 10021)
            .assert_equal("body.message", "parameter error")
        )
    ]


if __name__ == "__main__":
    TestCaseTestCase().test_start()

apitest 测试库

一个简单且可扩展的行为测试库。

测试库: https://github.com/steinfletcher/apitest jsonpath库: github.com/steinfletcher/apitest-jsonpath

  • 简单的get接口
package api

import (
 "net/http"
 "testing"
 "time"

 "github.com/steinfletcher/apitest"
)

func Client() http.Client {
 cli := &http.Client{
  Timeout: time.Second * 10,
 }
 return *cli
}

func TestGetSample(t *testing.T) {
 cli := Client()
 apitest.New().
    EnableNetworking(&cli).
  Get("http://httpbin.org/get").
  Expect(t).
  Status(http.StatusOK).
  End()
}

New(): 创建一个新的API测试。

EnableNetworking(): EnableNetworking为提供的客户端启用网络,需要一个 http.Clinet。

Get(): 发送get 请求,需要一个URL。

Expect(): Expect将请求规范标记为完整。

Status(): 断言http状态。http.StatusOK = 200

End(): End运行测试,将结果返回给调用者。

  • get接口带参数
import (
  ...
 jsonpath "github.com/steinfletcher/apitest-jsonpath"
)

...

func TestGetParams(t *testing.T) {
 cli := Client()
 apitest.New().
  EnableNetworking(&cli).
  Intercept(func(req *http.Request) {
   req.URL.RawQuery = "id=1&name=jack"
  }).
  Get("http://httpbin.org/get").
  Expect(t).
  Assert(
   jsonpath.Contains(`$.args.id`, "1")).
  Assert(
   jsonpath.Equal(`$.args.name`, "jack")).
  End()
}

req.URL.RawQuery: 用于定义get请求参数。

Assert() ,方法用于断言。

jsonpath 提供了断言方法,Contains判断包含,Equal判断相等。

  • post接口Form-data参数
...

func TestPostFormData(t *testing.T) {
 cli := Client()
 apitest.New().
  EnableNetworking(&cli).
  Post("http://httpbin.org/post").
  FormData("key1", "value1").
  FormData("key2", "value2").
  Expect(t).
  Assert(
   jsonpath.Chain().
    Equal(`$.form.key1`, "value1").
    Equal(`$.form.key2`, "value2").
    End()).
  End()
}

FormData() 用于设置form-Data格式的参数。

jsonpath 提供的断言同样支持链式调用。

  • post接口JSON参数
...

func TestPostJson(t *testing.T) {
 cli := Client()
 apitest.New().
  EnableNetworking(&cli).
  Post("http://httpbin.org/post").
  JSON(`{"message": "hi"}`).
  Expect(t).
  Assert(
   jsonpath.Chain().
    Contains(`$.data`, "message").
    Contains(`$.data`, "hi").
    End()).
  End()
}

JSON() 用于设置JSON()请求方法。

apitest 评价

官网:https://apitest.dev/

apitest 在完成http接口测试方面还是非常方便的,如果你被 go语言的 http 库蹂躏过一段时间之后感触更深;怎么说了,比如你经常被老板PUA,突然有一天老板居然当面表扬了你,大概就这种感觉。文章来源地址https://www.toymoban.com/news/detail-434509.html

到了这里,关于go测试库之apitest的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【go语言开发】redis简单使用

    本文主要介绍redis安装和使用。首先安装redis依赖库,这里是v8版本;然后连接redis,完成基本配置;最后测试封装的工具类 欢迎大家访问个人博客网址:https://www.maogeshuo.com,博主努力更新中… 参考文件: Yaml文件配置,Config使用 Log日志封装 常用工具类封装 命令行安装redis

    2024年03月12日
    浏览(60)
  • 使用VSCODE配置GO语言开发环境

    1. 安装GO SDK 官方下载地址是:golan.google.cn/dl 2. 安装完毕后,会自动在配置文件中加入一些内容,其中比较重要的三个是: GOROOT(具体GO语言在硬盘上安装的位置,比如D:/GO) GOPATH(未来使用go install安装第三方工具包时,都会安装在GOPATH指定文件夹下的src或bin目录下,比如

    2024年02月06日
    浏览(46)
  • Python Web开发库之webargs使用详解

    在现代Web开发中,处理来自客户端的请求参数是一个常见任务。无论是在构建Web API、Web应用程序还是其他Web服务,都需要一种有效的方式来解析、验证和转换这些参数。Python的 Webargs 库是一个功能强大的工具,可以优雅地处理Web请求参数,使开发过程更加简单和可维护。本文

    2024年01月17日
    浏览(40)
  • Go语言开发者的Apache Arrow使用指南:内存管理

    如果你看了上一篇《Go语言开发者的Apache Arrow使用指南:数据类型》 [1] 中的诸多Go操作arrow的代码示例,你很可能会被代码中大量使用的Retain和Release方法搞晕。不光大家有这样的感觉,我也有同样的feeling:**Go是GC语言 [2] ,为什么还要借助另外一套Retain和Release来进行内存管理

    2024年02月11日
    浏览(54)
  • 在使用go语言开发的时候,程序启动后如何获取程序pid

    在Go语言中,标准库并没有直接提供获取进程ID(PID)的函数。通常,你可以使用os包和syscall包来调用底层的操作系统函数来获取PID。 以下是一个获取程序PID的示例代码: 在这个示例中,os.Getpid() 返回当前进程的PID。另外,syscall.Getpid() 也提供了相同的功能。 请注意,这种方

    2024年01月20日
    浏览(49)
  • Golang 一日一库之jwt-go

    本文地址 https://www.cnblogs.com/zichliang/p/17303759.html github地址:https://github.com/dgrijalva/jwt-go 什么是JSON Web Token? JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSON方式安全地传输信息。由于此信息是经过数字签名的,因此可以

    2023年04月11日
    浏览(49)
  • 使用 GPT4 和 ChatGPT 开发应用:前言到第三章

    原文:Developing Apps with GPT-4 and ChatGPT 译者:飞龙 协议:CC BY-NC-SA 4.0 在发布仅仅五天后,ChatGPT 就吸引了惊人的一百万用户,这在科技行业及其他领域引起了轰动。作为一个副作用,OpenAI API 用于人工智能文本生成的接口突然曝光,尽管它已经可用了三年。ChatGPT 界面展示了这

    2024年01月20日
    浏览(73)
  • 【go语言开发】本地缓存的使用,从简单到复杂写一个本地缓存,并对比常用的开源库

    本文主要介绍go语言中本地缓存的使用,首先由简单到复杂手写3个本地缓存示例,使用内置的sync,map等数据结构封装cache,然后介绍常见的一些开源库,以及对比常用的开源库 本地缓存 是指将一部分数据存储在应用程序本地内存中,以提高数据访问速度和应用程序性能的技

    2024年02月04日
    浏览(36)
  • Go语言测试——【单元测试 | Mock测试 | 基准测试】

    作者 :非妃是公主 专栏 :《Golang》 博客主页 :https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 软件测试 :软件测试(英语:Software Testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测

    2024年02月10日
    浏览(59)
  • Go语言单元测试

    Go语言中的测试依赖 go test 命令,go test 命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录 内,所有以 _test.go 为后缀名的源代码文件都是 go test 测试的一部分,不会被 go build 编译到最终的可执行 文件中。 在 *_test.go 文件中有三种类型的函数, 单元测试函数

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包