云和安全管理服务专家 新钛云服 张春翻译
这篇关于“API 测试”和“Godog”:Go 编程语言的 BDD框架。
使用 Godog 进行测试的步骤如下:
1、安装Godog
2、在功能文件中编写测试场景
3、实施测试
现在,让我们更详细地回顾这些步骤中的每一个:
安装Godog
像 Go 中的许多库一样,您可以使用 go get 命令安装它:
go get github.com/cucumber/godog/cmd/godog@v0.12.0
如果 go get 命令不起作用,您可以尝试使用 go install 命令。
您也可以按照 Godog 的 Readme 文件中的步骤进行操作,该文件非常易于使用。
在功能文件中指定测试场景
我将使用 reqres API 作为示例。
您可能会注意到我们在功能文件中使用了 Background 关键字。背景很像一个常规场景,我们可以在其中编写一些步骤。但它在该功能文件中的所有场景之前运行。因此,使用 Background 关键字设置配置将节省我们的时间并防止重复。
现在,让我们运行功能文件。运行功能文件,我们需要 godog 命令:
godog reqres.feature
此命令将运行该功能文件中的所有场景。
如果需要运行一些场景,可以使用标签。标签将有助于以更有效的方式组织功能文件。
要运行您的标记场景:
godog. -t=@regression
当你使用 godog.with tag,它将运行该目录中具有该标签的所有场景。
运行功能文件后,我们会得到未实现步骤的缺失函数:
当我们执行 godog 命令时,GODOG 将从功能文件中读取步骤并查找此特定步骤的代码。它将继续生成这些函数,直到我们将它们粘贴到 go 文件中。
由于我们有要实现的测试函数,我们可以创建一个 go 文件,粘贴这些生成的函数并开始实现它们。
在 GO 中,如果你想创建一个测试文件,你的文件名应该以 _test.go 结尾。这个文件应该在主目录中创建。
生成的函数默认返回挂起的错误:
实施测试
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 转换为字符串:
现在,我们可以通过为 Get 方法提供这些必需的参数来轻松地从功能文件中提供我们的 测试脚本 。
让我们回到 API 测试的四个步骤。
1、设置网址
由于我们将 JSON 导入您的项目,因此使用 JSON 文件将非常简单和快速。因此,我们可以选择我们的配置文件为 JSON 文件,并在该文件中设置 URL:
现在,我们可以通过从配置文件中读取 URL 来设置它。
请注意,我们的函数名称是我们在功能文件中编写的确切句子。
既然我们现在有了 URL,我们就可以开始处理 HTTP 请求了。但是,我们需要在发送请求之前设置预期的数据。
2、设置预期数据
由于我们的项目中已经有一个 JSON 阅读器,让我们在 JSON 文件中设置预期数据。这在 JSON 的可读性方面也很有意义。
归根结底,在 API 测试中,我们总是会处理 JSON 数据,而当我们使用 JSON 文件时,就会有兼容性。此外,如果 JSON 中有更新,更新此文件中的数据会容易得多。
3、发送请求
我们设置了 URL 和期望的数据,所以我们准备好发送请求了。对于发送请求和获取响应,我发现 Resty 库非常强大。如果您熟悉 Rest Assured Library,您也会喜欢它。
由于这是一个 POST 请求,我们需要设置一个 JSON 正文。我们已经为请求正文创建了一个 JSON 文件。我们唯一需要做的就是读取该文件。让我们使用读取 JSON 文件并将 JSON 作为字符串返回的辅助方法。
如果我们将特征文件的文件路径参数化,这意味着我们的测试脚本将不包含任何硬代码,我们可以通过更改特征文件中的文件路径再次使用此POST 方法。
在 Resty 的帮助下,我们将发送请求并获得响应。
不要忘记捕获状态代码和响应正文。
在这里,我们创建了 statusCode、 request Body 和 responseBody 变量作为全局值,以便我们可以轻松地在其他函数中使用它们。现在我们可以开始断言,这是所有这些努力的目标。
在 API 测试中,我们首先需要验证的是状态码:
对于断言,我更喜欢使用 Gomega,它是一个非常强大的库。我在实用程序包中创建了断言函数,以便我可以在整个项目中使用它们。Gomega 不是这篇文章的主题,所以让我们暂时跳过这个,专注于我们如何从数据表中提取数据。
在这个函数中,为了获取预期的数据,我们再次使用 gjson 的 GET 方法。第一个参数 requestBody 在前面的函数中设置。
首先,我们使用 JSON 助手将其转换为字符串并将其用作 POST 请求的主体,现在我们使用它来检索预期数据。然后,通过使用循环,我们从功能文件中传递 JSON 字段。
通过在数据表中写入这条路径,很容易添加新字段并增加我们的测试覆盖率。只有在这种情况下,您才能通过更改 JSON 文件路径和 JSON 字段来发送许多不同的 POST 请求。这是我们自动化测试的输出:
总而言之,我解释了我们如何使用 Godog 进行 API 测试:
1、使用 Gherkin 语言将场景写入特征文件。
2、运行功能文件
3、将自动生成的函数复制并粘贴到_test.go 文件中
4、实现代码
对于 API 测试,我们遵循了四个步骤:
· 设置网址
· 设置预期数据
· 发送请求
· 断言
原文: