REST Api的自动化测试


84

我想为REST API编写一个自动化测试套件。当我们完成新服务时,我们要检查以确保所有先前创建的服务都按预期工作。关于使用最佳工具完成此工作的任何建议?我知道有类似Apigee的工具可以让您一次测试一项服务,但是我们希望找到一种方法,只需单击一下按钮即可测试所有服务。


2
您可以尝试一下vREST。它同时具有单元测试和模拟。
Jangid 2014年

1
JMeter是REST API测试的最佳工具-为正在寻找使用JMeter测试REST API的一些详细步骤的人们添加此注释。 testautomationguru.com/how-to-test-rest-api-using-jmeter
vins

FRISBY胜过一切-REST API测试的完美和最强大的工具
Piyush Chordia,2016年

2
JMeter过于强大,更不用说具有可怕的UI了,仅用于REST api的基本功能测试。它用于性能/负载测试。
凯文M

2
JMeter更专注于负载测试,也许您应该检查12种出色的Web服务测试工具以找到最佳选择。此列表中的某些工具(例如SOAPUIHttpMaster)对REST API端点具有相当不错的自动化支持。
Joxi

Answers:


36

在我的工作中,我们最近汇总了一些用Java编写的测试套件,以测试我们构建的一些RESTful API。我们的服务可以调用它们依赖的其他RESTful API。我们将其分为两个套件。


  • 套件1-隔离测试每个服务
    • 模拟API依赖的任何对等服务使用restito。其他替代方案包括rest-driverwiremockbetamax
    • 测试我们正在测试的服务,并且所有模拟都在单个JVM中运行
    • 在码头启动服务

我绝对会推荐这样做。它对我们来说真的很好。主要优点是:

  • 对等服务是模拟的,因此您无需执行任何复杂的数据设置。在每次测试之前,您只需使用restito定义对等服务的行为方式,就像使用Mockito进行单元测试中的类一样。
  • 您可以询问被模拟的对等服务是否被调用。对于真正的对等服务,您无法轻松地完成这些断言。
  • 该套件非常快,因为模拟服务提供了预先设置的内存中响应。因此,我们可以在不花时间运行套件的情况下获得良好的覆盖率。
  • 该套件是可靠且可重复的,因为它隔离在自己的JVM中,因此无需担心其他套件/人们在套件运行的同时嘲笑共享环境,并导致测试失败。

  • 套房2-完整的端到端
    • 套件针对跨多台机器部署的完整环境运行
    • 在环境中的Tomcat上部署的API
    • 对等服务是真正的“实时”完整部署

该套件要求我们在对等服务中进行数据设置,这意味着测试通常需要更多时间来编写。我们尽可能使用REST客户端在对等服务中进行数据设置。

该套件中的测试通常需要更长的时间来编写,因此我们将大部分内容放在套件1中。可以说,套件中仍有明显的价值,因为套件1中的模拟可能无法像真正的服务那样运行。



25

Frisby是一个基于node.js和Jasmine的REST API测试框架,它使测试API端点变得容易,快速和有趣。 http://frisbyjs.com

例:

var frisby = require('../lib/frisby');

var URL = 'http://localhost:3000/';
var URL_AUTH = 'http://username:password@localhost:3000/';

frisby.globalSetup({ // globalSetup is for ALL requests
  request: {
    headers: { 'X-Auth-Token': 'fa8426a0-8eaf-4d22-8e13-7c1b16a9370c' }
  }
});

frisby.create('GET user johndoe')
  .get(URL + '/users/3.json')
  .expectStatus(200)
  .expectJSONTypes({
    id: Number,
    username: String,
    is_admin: Boolean
  })
  .expectJSON({
    id: 3,
    username: 'johndoe',
    is_admin: false
  })
  // 'afterJSON' automatically parses response body as JSON and passes it as an argument
  .afterJSON(function(user) {
    // You can use any normal jasmine-style assertions here
    expect(1+1).toEqual(2);

    // Use data from previous result in next test
    frisby.create('Update user')
      .put(URL_AUTH + '/users/' + user.id + '.json', {tags: ['jasmine', 'bdd']})
      .expectStatus(200)
    .toss();
  })
.toss();

我对这篇文章投了赞成票,在日常工作中都用到了它,现在所有的朋友都被扔掉了。我在自己的博客上分享了差不多的内容
Piyush Chordia


Frisby易于入门,功能强大,甚至可以测试高级API流程。遗憾的是,报告输出还有很多不足之处。API失败时的错误消息几乎没有用。鉴于您手动运行测试时的输出相当不错,这很奇怪。这是一个耻辱。
Kasper Holdum '16

1
万一有人像我这样迷失了方向,弗里斯比似乎还没死,正如上面提到的评论。git最近更新。github.com/vlucas/frisby
S.Huston,2015年

21

为此,我与一位同事合作启动了PyRestTest框架:https//github.com/svanoort/pyresttest

尽管您可以使用Python进行测试,但是常规测试格式为YAML。

基本REST应用程序的示例测试套件-验证API是否正确响应,检查HTTP状态代码,尽管您也可以使其检查响应主体:

---
- config:
    - testset: "Tests using test app"

- test: # create entity
    - name: "Basic get"
    - url: "/api/person/"
- test: # create entity
    - name: "Get single person"
    - url: "/api/person/1/"
- test: # create entity
    - name: "Get single person"
    - url: "/api/person/1/"
    - method: 'DELETE'
- test: # create entity by PUT
    - name: "Create/update person"
    - url: "/api/person/1/"
    - method: "PUT"
    - body: '{"first_name": "Gaius","id": 1,"last_name": "Baltar","login": "gbaltar"}'
    - headers: {'Content-Type': 'application/json'}
- test: # create entity by POST
    - name: "Create person"
    - url: "/api/person/"
    - method: "POST"
    - body: '{"first_name": "Willim","last_name": "Adama","login": "theadmiral"}'
    - headers: {Content-Type: application/json}

通过身份验证,您可以在github.com/svanoort/pyresttest/blob/master/quickstart.md引用的每个测试下面添加以下标头;-auth_username:“ foobar”-auth_password:“秘密”-Expected_status:[200]
agfe2


2

对API进行自动化测试的问题之一是,许多工具要求您在运行测试套件之前启动并运行API服务器。拥有一个能够在全自动测试环境中运行和查询API的单元测试框架,这可能是真正的优势。

对于使用Node.JS / Express实现的API来说,一个不错的选择是使用mocha进行自动化测试。除了单元测试之外,它还易于针对API编写功能测试,并分为不同的测试套件。您可以在本地测试环境中自动启动API服务器并设置本地测试数据库。使用make,npm和构建服务器,您可以创建一个“ make test”目标和一个增量构建,该构建将在每次将一部分代码提交到存储库时运行整个测试套件。对于真正挑剔的开发人员,它甚至会生成一个不错的HTML代码覆盖率报告,向您显示代码库的哪些部分是否包含测试。如果听起来很有趣,这是一篇博客文章,其中提供了所有技术细节。

如果您不使用节点,那么无论该语言的事实上的单元测试框架是什么(jUnit,cucumber / capybara等),请查看其对在本地测试环境中扩展服务器并运行HTTP查询的支持。如果是大型项目,那么进行自动化API测试和持续集成工作的努力将很快获得回报。

希望能有所帮助。


2

Runscope是一项基于云的服务,可以使用一组测试来监视Web API。可以通过参数化的Web挂钩对测试进行计划,安排和/或运行。还可以从世界各地的数据中心执行测试,以确保响应时间对于全球客户群而言是可接受的。

Runscope的免费层每月最多支持1万个请求。

免责声明:我是Runscope的开发人员拥护者。




0

API测试自动化(每分钟最多一次)是可通过theRightAPI获得的服务。您创建测试方案,然后执行它们。一旦这些测试达到了您的期望,就可以安排它们了。对于需要身份验证的方案,可以将测试“链接”在一起。例如,您可以拥有一个测试,该测试向Twitter发出OAuth请求,并创建一个共享令牌,然后其他任何测试都可以使用该共享令牌。测试还可以附加验证标准,以确保http状态代码,甚至可以使用javascript或模式验证对响应进行详细检查。安排好测试后,一旦特定测试验证失败或响应时间或响应大小超出既定范围,您便可以让警报通知您。


链接似乎已断开。

0

我已经使用TestNG和Apache HTTP类来构建自己的REST API测试框架,在Selenium工作了两年之后,我开发了这个概念。

一切都一样,除了您应该使用Apache HTTP类而不是Selenium类。

试试看,它的确非常可爱而且很好,您将有能力自定义测试框架,以实现最大的可能性。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.