使用 GODOG 进行 GOLANG 和API 测试

b49a217965c24a4db1a81c5b52cdcc67.gif

新钛云服已为您服务1493

83a62abff1d9fe756cd4f3e5ae7485ce.gif

这篇关于“API 测试”和“Godog”:Go 编程语言的 BDD框架。

使用 Godog 进行测试的步骤如下:

1、安装Godog

2、在功能文件中编写测试场景

3、实施测试

现在,让我们更详细地回顾这些步骤中的每一个:

安装Godog

像 Go 中的许多库一样,您可以使用 go get 命令安装它:

goget github.com/cucumber/godog/cmd/godog@v0.12.0

如果 go get 命令不起作用,您可以尝试使用 go install 命令。

您也可以按照 Godog 的 Readme 文件中的步骤进行操作,该文件非常易于使用。

在功能文件中指定测试场景

我将使用 reqres API 作为示例。

您可能会注意到我们在功能文件中使用了 Background 关键字。背景很像一个常规场景,我们可以在其中编写一些步骤。但它在该功能文件中的所有场景之前运行。因此,使用 Background 关键字设置配置将节省我们的时间并防止重复。

现在,让我们运行功能文件。运行功能文件,我们需要 godog 命令:

godog reqres.feature

此命令将运行该功能文件中的所有场景。

如果需要运行一些场景,可以使用标签。标签将有助于以更有效的方式组织功能文件。

4c0f556809225637f8194c263257b54f.png

要运行您的标记场景:

godog. -t=@regression

当你使用 godog.with tag,它将运行该目录中具有该标签的所有场景。

运行功能文件后,我们会得到未实现步骤的缺失函数:

b0080c81ef6c3c7eba3493ba0e6d6581.png

当我们执行 godog 命令时,GODOG 将从功能文件中读取步骤并查找此特定步骤的代码。它将继续生成这些函数,直到我们将它们粘贴到 go 文件中。

由于我们有要实现的测试函数,我们可以创建一个 go 文件,粘贴这些生成的函数并开始实现它们。

在 GO 中,如果你想创建一个测试文件,你的文件名应该以 _test.go 结尾。这个文件应该在主目录中创建。

生成的函数默认返回挂起的错误:

a47127922c538cf3beb977b3a6f53fba.png

实施测

API测试主要有四个步骤:

1、设置网址

2、设置预期数据

3、发送请求

4、断言

有几种不同的方法可以使用 Golang 完成这四个步骤。

在这个项目中,我更喜欢使用 JSON 文件来设置预期数据。Golang 提供了许多有效的方法来处理 JSON 文件。经过一番比较,我决定使用 Tidwall 的 gjson 库。

GJSON 是一个 GO 包,可帮助以非常简单快捷的方式从 JSON 中检索数据。特别是当您拥有大量 JSON 数据时,它的单行检索方法是救命稻草。

为了安装 GJSON,我们需要再次使用 go get 命令:

go get -u github.com/tidwall/gjson

利用 encoding/JSON 标准库包也是操作 JSON 文件的一种选择,但如果您想在不创建结构或映射的情况下获取部分数据,我强烈建议您使用 GJSON 库。

该库中的 Get 方法需要两个参数;JSON 数据(作为字符串)和 JSON 字段路径。因此,我创建了一些辅助函数来将 JSON 转换为字符串:

61369cc876c7667dafed5f6e9f4bf6dd.png

现在,我们可以通过为 Get 方法提供这些必需的参数来轻松地从功能文件中提供我们的测试脚本。

让我们回到 API 测试的四个步骤。

1、设置网址

由于我们将 JSON 导入您的项目,因此使用 JSON 文件将非常简单和快速。因此,我们可以选择我们的配置文件为 JSON 文件,并在该文件中设置 URL:

7c23d3b282f3131d9fe1b16277145e40.png

现在,我们可以通过从配置文件中读取 URL 来设置它。

请注意,我们的函数名称是我们在功能文件中编写的确切句子。

31c0b47b1792a49684a0c77bf3928b27.png

既然我们现在有了 URL,我们就可以开始处理 HTTP 请求了。但是,我们需要在发送请求之前设置预期的数据。

2、设置预期数据 

由于我们的项目中已经有一个 JSON 阅读器,让我们在 JSON 文件中设置预期数据。这在 JSON 的可读性方面也很有意义。

归根结底,在 API 测试中,我们总是会处理 JSON 数据,而当我们使用 JSON 文件时,就会有兼容性。此外,如果 JSON 中有更新,更新此文件中的数据会容易得多。

63d6a01c56a8189c49425f8cc8fa837c.png

3、发送请求

我们设置了 URL 和期望的数据,所以我们准备好发送请求了。对于发送请求和获取响应,我发现 Resty 库非常强大。如果您熟悉 Rest Assured Library,您也会喜欢它。

由于这是一个 POST 请求,我们需要设置一个 JSON 正文。我们已经为请求正文创建了一个 JSON 文件。我们唯一需要做的就是读取该文件。让我们使用读取 JSON 文件并将 JSON 作为字符串返回的辅助方法。

如果我们将特征文件的文件路径参数化,这意味着我们的测试脚本将不包含任何硬代码,我们可以通过更改特征文件中的文件路径再次使用此POST 方法。

760a7696f0df3d045849ec227e26c99f.png

在 Resty 的帮助下,我们将发送请求并获得响应。

98163a8bc8896ea379eaa66165442e10.png

不要忘记捕获状态代码和响应正文。

在这里,我们创建了 statusCode、requestBody 和 responseBody 变量作为全局值,以便我们可以轻松地在其他函数中使用它们。现在我们可以开始断言,这是所有这些努力的目标。

在 API 测试中,我们首先需要验证的是状态码:

6f97da4c9185b08de6eef2f3e5cf96d8.png

对于断言,我更喜欢使用 Gomega,它是一个非常强大的库。我在实用程序包中创建了断言函数,以便我可以在整个项目中使用它们。Gomega 不是这篇文章的主题,所以让我们暂时跳过这个,专注于我们如何从数据表中提取数据。

01a752f9f761e29da76b5bac69df64d5.png

在这个函数中,为了获取预期的数据,我们再次使用 gjson 的 GET 方法。第一个参数 requestBody 在前面的函数中设置。

首先,我们使用 JSON 助手将其转换为字符串并将其用作 POST 请求的主体,现在我们使用它来检索预期数据。然后,通过使用循环,我们从功能文件中传递 JSON 字段。

通过在数据表中写入这条路径,很容易添加新字段并增加我们的测试覆盖率。只有在这种情况下,您才能通过更改 JSON 文件路径和 JSON 字段来发送许多不同的 POST 请求。这是我们自动化测试的输出:

375a94a2b57156e201db3f417b5655c9.png

总而言之,我解释了我们如何使用 Godog 进行 API 测试:

1、使用 Gherkin 语言将场景写入特征文件。

2、运行功能文件

3、将自动生成的函数复制并粘贴到_test.go 文件中

4、实现代码

对于 API 测试,我们遵循了四个步骤:

· 设置网址

· 设置预期数据

· 发送请求

· 断言

原文:https://medium.com/propertyfinder-engineering/golang-api-testing-with-godog-2de8944d2511

了解新钛云服

新钛云服荣膺第四届FMCG零售消费品行业CIO年会「年度数字化服务最值得信赖品牌奖」

新钛云服三周岁,公司月营收超600万元,定下百年新钛的发展目标

当IPFS遇见云服务|新钛云服与冰河分布式实验室达成战略协议

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案

往期技术干货

Kubernetes扩容到7,500节点的历程

低代码开发,全民开发,淘汰职业程序员!

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

0a9cefa8666d2439103e27f96ab05048.gif

点👇分享

24ddbbc9122ddf7a81df80311c434a82.gif

戳👇在看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值