跳转到主要内容
Chinese, Simplified

贵公司是否为其软件编写API? 如果答案是肯定的,那么你绝对需要对它进行测试 - 幸运的是,本教程逐步解释了如何使用Postman,Newman,Jenkins和qTest Manager等工具进行自动API测试。

 

但首先,让我们来看看这块土地。事实证明,您的软件API实际上是您可以测试的应用程序中最重要的部分,因为它具有最高的安全风险。

您的软件API实际上是您可以测试的应用程序中最重要的部分,因为它具有最高的安全风险

例如,容纳客户端软件的浏览器或应用程序可以防止很多糟糕的用户体验,例如发送100个字符的用户名或允许奇怪的编码字符输入,但您的API是否也会阻止这些事情?如果有人开始猜测其他用户的“独特”令牌,软件是否会回复真实数据?它是否有Apache错误消息,其中包含正在运行的服务版本?如果这些问题的答案都是肯定的,那么就存在一个相当大的安全漏洞。或者,如果有人要破解API怎么办?他们可以得到生产数据,他们可以比特币赎回服务器,或者他们可以隐藏在机器上,直到有趣的事情发生。最重要的是,使用API​​时的风险远高于应用程序用户界面中的错误 - 您的数据可能存在风险,并且通过代理可能会影响您的所有用户数据。

幸运的是,API测试不仅是对您的应用程序进行的最重要的测试,而且它也是最简单,最快速的执行。这意味着没有理由你不应该有一个广泛的API测试套件(并相信我,有一个将帮助你在晚上睡得更好)。使用持续集成的API测试套件,您可以轻松地:

  1. 无论托管在何处,从AWS Lambda到本地计算机,都要测试所有端点
  2. 快速确保所有服务按预期运行
  3. 确认您的所有端点都受到未经授权和未经身份验证的用户的保护
  4. 观察您的测试执行“神奇地”填充在您的测试管理工具中

那么你如何将所有这些付诸行动呢?你来对地方了。继续阅读有关如何设置Postman和Newman的逐步API测试教程,如何从Jenkins执行测试,以及如何将所有这些测试结果集成到qTest Manager等测试管理工具中。

让我们开始吧!

Set Up Postman


1)第一件事是第一件事:你需要下载Postman

它是免费的,很有趣,适用于Mac,Windows和Linux机器。注意:如果您拥有更大的团队并经常更新服务和测试,您可能需要考虑Postman Pro(但您可以随时决定升级)。

已移除图像。

2)确保您的应用程序的API文档很方便。

对于本演示,我将使用qTest Manager API,因为它简单明了。如果你想逐字尝试这些演示,你可以在这里免费试用qTest Manager。您还可以使用大量可在线使用的API(如果您正在寻找其他地方,我建议您从AnyAPI开始)。

3)接下来,提取您正在使用的API的登录调用文档(您可以在下面找到qTest Manager的文档)。该文件应包括:

  • Method (POST/PUT/GET/DELETE/etc)
  • URI (/oauth/token which will follow the URL for the instance of qTest you’re using)
  • Headers
  • Body


在此示例中,登录调用需要x-www-form-urlencoded内容类型标头。您只需在Postman中选择它,它就会自动添加相应的标题。选择此选项后,Postman将允许您为授权类型,用户名和密码输入名称/值对。注意:每次拨打电话时,请确保您的网络协议是HTTPS,否则您通过互联网传递的所有数据都是明文,没有人想要这样。

已移除图像。

4)如果您正在使用qTest Manager,请继续构建测试并写出您想要在测试用例中测试的内容。完成后,我们将通过映射测试用例ID将测试用例链接到自动API测试。通常,在测试用例管理工具中首先写出测试应该做的事情是编写自动化测试用例的一个很好的过程。

5)构建测试并编写您希望测试用例的内容后,将该工作链接到您的完全可跟踪性要求,然后将自动测试执行挂钩到该测试用例。如果您使用的链接到JIRA的qTest Manager等工具,您将在JIRA中看到所有匹配要求的文本执行。很酷,嗯?

6)现在让我们第一次调用登录端点,以便我们可以获得一个令牌(我们稍后会将令牌传递给后续调用,以便API知道我们已经登录)。查看登录文档,我看到这是一个POST请求。如果是GET,您将通过URL传递您的用户名和密码。为确保一切顺利进行,请确保您具有以下设置:

  •  Method: Post
  •  URL: your http://your.qTestURL/oauth/token
  •  Click on the Body tab and set the request body to x-www-form-urlencoded (these are just different standard ways to pass data in the body of your HTTP request) – and clicking the radio button just sets an HTTP header field Content-Type to be application/x-www-form-urlencoded.
  •  Now set 3 name/value in the Body:
    • grant_type : password
    • username : your qTest username
    • password : your qTest password


请注意API文档中有关未填写密码的命令,在Postman提供的字段中的名称/密码区域中。

已移除图像。

已移除图像。

已移除图像。

 

7)你的设置是否匹配?大!现在您有一个有效的API调用。我们将它保存到邮递员集合中,以便我们以后可以重复使用它。要创建新的Postman Collection,只需点击左侧面板中加号的文件夹图标即可。

创建集合后,您可以通过单击屏幕右上角的“保存”按钮来保存呼叫(标准操作系统快捷方式也可以)。我使用qTest中的测试用例ID命名了我的API调用。这将允许我映射我的测试用例,以便每次运行此API调用以及其余测试时都可以跟踪。

8)在我们实际编写测试之前再多一步,因为我们需要对HTTP响应做一些事情:

  • Verify the status code is 200 (OK)
  • Verify that you get back a non-empty access token
  • Verify that your scope is accurate


请注意,我们并不关心其他字段 - 它们对您测试您已登录并不重要。

9)现在是时候编写第一个测试了!小心不要让你的测试变得脆弱 - 要清楚你正在测试的是什么以及为什么要测试它。

10)接下来,让我们编写另一个测试,将测试用例添加到现有项目中。首先,我们需要登录并存储我们的令牌。我们将创建一个环境变量并将其命名为“access_token”:

已移除图像。

已移除图像。

存储此访问令牌的好处是您现在可以在后续调用中使用它。 这意味着您可以自动执行测试,而无需每次都手动获取登录令牌。 优秀! 在下一个调用中,您将看到使用双花括号{{access_token}}的令牌。

11)让我们看一下添加测试用例的文档,您可以在这里找到:

已移除图像。

然后继续为您的新测试用例创建一个位置:

 

已移除图像。

 

12)现在让我们创建一个新的POST请求来添加一个测试用例。 URL(路径)中有一个名为{project}的变量。 要填写此变量,我们需要在qTest中获取项目的ID,我们可以从qTest URL获取该ID。 在这种情况下,你可以看到它是45625:

已移除图像。

我们还需要在字段中填写这些字符串:

  • name: Testing Create Test Case
  • description: This test case was created by the API test
  • parent_id: 2656708


请注意,parent_id是我们刚刚为这些测试转储的文件夹/模块的ID。该ID可以在该测试模块页面的URL中找到。

13)接下来,我们必须将注意力转向我们拥有的两个数组属性。对于test_steps,这将是一个JSON数组,它是两个方括号之间的逗号分隔的JSON对象列表。每个对象都是一个步骤,数组字符串中的每个JSON对象都应该在引号内。注意不要从Microsoft Word文档或其他来源复制“漂亮的引号”,以进一步美化您的文本。

Test_steps:

“test_steps” : [{

“description”: “Step 1 – open login page”,

“expected”: “login page opens, obviously”,

“attachments”: []

},

{

“description”: “Step 2 – log in with happy path”,

“expected”: “user is redirected to the home screen”,

“attachments”: []

},

{

“description”: “Step 3 – click hamburger bar “,

“expected”: “side menu shows up”,

“attachments”: []

}]

 

14)最终请求标头使用第一次调用的令牌。如前所述,我们可以使用带有双括号表示法{{}}的已保存变量:

已移除图像。

和请求身体:

已移除图像。

  • 然后进行一些测试:

已移除图像。

要验证响应,请进入测试选项卡,确保返回正确的数据。

15)现在,您可以使用“Runner”立即运行整个测试套件或仅运行子文件夹。

已移除图像。

这些通常都是快乐的路径,但是这些调用可能会出现很多问题,而且你可以做几十或几百个测试,包括很多安全测试。如果项目属于另一个客户怎么办?如果模块ID不存在怎么办?如果你上传一个庞大的文件怎么办?写一次,每次测试!

我们没有涉及的一个重要项目是存储不同的环境。如果要对开发,QA,登台或生产环境进行测试,则可能需要为每个环境使用不同的测试数据或登录。您可以设置它并在通过GUI运行测试时选择环境(如我们所见)或从Newman的命令行中选择。我们接下来就这样做。

Set Up Newman


既然您有一个要执行的集合,并且可能是相应的环境配置,那么您将需要从命令行运行它。您必须能够执行此操作才能从Jenkins或任何其他持续集成调度程序运行它。为此,我推荐Newman,它是一个可执行程序,用于运行Postman集合,这些集合是用Javascript编写的,可以与节点包管理器(NPM)一起安装。只需几个小步骤:

1)打开您选择的终端/命令行应用程序:https://www.davidbaumgold.com/tutorials/command-line/

2)安装npm:https://www.npmjs.com/get-npm

3)在您的机器上全局安装Newman:https://www.npmjs.com/package/newman/tutorial

 

已移除图像。

4)从Postman导出您的收藏(只需右键单击要在左窗格中导出的测试)并从Postman导出您的环境(转到“管理环境”并点击下载按钮)。 将这些保存在您在终端中导航的计算机上。

5)一旦你进入你的终端,除了运行你的测试之外别无选择! 在这种情况下,您不需要任何选项或环境变量,因此命令应该只说:

`newman run path / to / my / exported / json / postman / collection.json`

已移除图像。

看起来很漂亮吧?漂亮很棒,但是当你使用Jenkins时却不是!让我们使用Jenkins可以理解的更典型的JUnit输出。就像是:

`newman run -reporters junit,json path / to / my / exported / json / postman / collection.json

此命令实际上产生两种类型的输出:标准的,描述性较低的JUnit以及高度描述性的.json文件。看看两者 - 它们应该在你工作目录中名为“Newman”的文件夹下创建(也就是运行Newman命令的目录)。

我们很快就会编写一个脚本来将测试结果上传到qTest,并且使用JUnit输出将允许Jenkins显示内置图形并帮助系统在没有任何其他帮助的情况下通过或失败构建。

虽然您也可以使用JUnit结果和自动化内容将结果直接上传到qTest Manager,但使用API​​可以更灵活地确定测试结果在工具中的显示方式和位置。

现在我们已经从命令行运行了测试,现在是时候将它放入我们的Jenkins作业中,这样它就可以作为持续集成的一部分。我建议每次开发人员推送到工作分支时,都要针对您的开发环境运行此操作。

从Jenkins执行你的测试


我不会进入Jenkins的设置,只是作业的配置,但如果你想在本地试用,这里是下载页面。

如果您不想直接在计算机上安装Jenkins,可以使用Docker进行安装。如果您确实想使用Docker,可以先下载事实上的Jenkins Docker实例,然后使用Docker / Jenkins存储库中的以下节点安装代码将Dockerfile更改为包含节点:

#安装节点

运行curl -sL https://deb.nodesource.com/setup_4.x |庆典

运行apt-get -y安装nodejs

运行节点-v

运行npm -v

运行npm install -g newman

从这里开始,您需要重建Docker镜像,然后使用与此GitHub自述文件相同的说明启动容器。

您现在应该在本地安装一个完全正常工作的Jenkins实例。大!现在回到使用新安装的Jenkins实例的任务:

1)在Jenkins中创建一个新的“Freestyle”类型的工作。

在这种情况下,我们将其设置为允许您将集合作为参数上载。当您使用自己的项目执行此操作时,您应该将Postman集合提交到您正在使用的任何存储库中,并通过选择“此项目已参数化”然后选择“添加参数”并使用“文件参数”直接从该存储库中进行构建“。

已移除图像。

2)选择两个文件上传 - 一个用于集合,一个用于环境。

已移除图像。

3)使用“执行Shell”添加后构建步骤(如果Jenkins在Windows机器上运行,则执行“执行Windows批处理命令”)。 您将使用之前用于从您自己的命令行运行它的相同命令(假设您使用相同的操作系统),除了您的路径现在应该只是collection.js,因为您将其命名为`newman run collection.json` 在文件参数名称字段中。

4)现在测试它并运行构建。 我刚刚上传了collection.json,因为我还没有使用环境文件,但你可以将它添加到命令行:

`newman run collection.json -e environment.json`

已移除图像。已移除图像。

为确保一切正常,请检查测试的内容 - 应该在项目中添加一些新的测试用例。

此外,如果要使用内置的JUnit Jenkins查看器,可以存档XML测试结果并将测试指向它。 以下是如何归档和使用JUnit测试结果的示例。 如果您正在使用qTest Manager,也可以在此处下载Jenkins qTest Manager插件。

已移除图像。

通过API将结果上传到qTest


此时,我们已成功编写了与CI作业一起运行的测试。如果测试失败,我们可能会失败这里的构建(API测试的好主意!),但我认为我们还应该将测试结果上传到qTest,以证明这些测试通过或失败。为此,我们可以使用我编写的脚本,您可以在此处找到该脚本。

1)要使用此脚本,我们将使用纽曼的.json记者。

在该文件夹中,您应该找到您的样本Newman测试结果。如果您想在不在Postman中设置测试的情况下尝试此节点脚本,您可以,但是您需要修改.json测试结果文件以使数据与您自己的项目相匹配。在下面的示例中,您将需要更改测试用例ID以匹配您自己项目中的测试用例ID。

2)现在我们将使用该命令运行脚本

node uploadNewmanToQTest.js -f newman-json-result.json -c creds.json -i true -r“([0-9] +)\  -  *?”

-r选项之后的部分有点可怕。它是一个JavaScript正则表达式,告诉脚本在哪里查找测试用例ID(如果存在-i false,则为名称)。这将获得第一个数字并将它们用作测试用例ID。默认情况下,如果未提供正则表达式,则将使用结果中的整个测试用例名称。例如,如果测试用例名称为“Verify Successful Login”和-i false(使用测试用例名称而不是ID),那么它将查找名为“Verify Successful Login”的相应测试用例。当然,如果此名称出现两次,它将更新两个测试用例的相关测试运行。此脚本有很多选项,并非所有选项都已完成。如果您有什么想看的,请不要犹豫,评论或删除QASymphony。

就是这样,因为你应该得到一个成功的输出!

当然,这只是众多API测试的一个例子。您还可以查看这篇Postman教程和Postman&Jenkins的介绍,了解更多精彩信息。

如果您有任何具体要求,请在下面评论,我会尽力回复。否则,快乐测试!

 

Article
知识星球
 
微信公众号
 
视频号