跳转到主要内容

烟雾测试工具

项目描述

http://coveralls.io/repos/github/tarekziade/smwogger/badge.svg?branch=master http://travis-ci.org/tarekziade/smwogger.svg?branch=master

Smwogger (发音为smoger) 是一个用于Swagger的烟雾测试工具。

Smwogger的目标是提供一种快速简单的方法来使用服务的Swagger描述进行烟雾测试。

为了为您API添加烟雾测试,您有三个选项

  1. 在您的Swagger规范中添加一个部分,描述您的烟雾测试场景。

  2. 有一个包含部分的特定文件。

  3. 在您的Python脚本中使用将方法绑定到Swagger操作的API类。

使用x-smoke-test的示例

您可以通过指定Swagger规范URL(或文件的路径)来运行测试

$ smwogger smwogger/tests/shavar.yaml
..................

您可以使用-v显示正在执行的序列

$ smwogger -v smwogger/tests/shavar.yaml
Scanning spec... OK

        This is project 'Shavar Service'
        Mozilla's implementation of the Safe Browsing protocol
        Version 0.7.0


Running Scenario
1:getHeartbeat... OK
2:getDownloads... OK
3:getDownloads... OK

如果您需要获取有关发送的请求和响应的更多详细信息,可以使用-vv选项来增加详细程度

$ smwogger -vv smwogger/tests/shavar.yaml
Scanning spec... OK

        This is project 'Shavar Service'
        Mozilla's implementation of the Safe Browsing protocol
        Version 0.7.0


Running Scenario
1:getHeartbeat...
GET https://shavar.somwehere.com/__heartbeat__
>>>
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Date: Mon, 21 Nov 2016 14:03:19 GMT
Content-Length: 2
Connection: keep-alive

OK
<<<
OK
2:getDownloads...
POST https://shavar.somwehere.com/downloads
Content-Length: 30

moztestpub-track-digest256;a:1

>>>
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Date: Mon, 21 Nov 2016 14:03:23 GMT
Content-Length: 118
Connection: keep-alive

n:3600
i:moztestpub-track-digest256
ad:1
u:tracking-protection.somwehere.com/moztestpub-track-digest256/1469223014

<<<
OK
3:getDownloads...
POST https://shavar.somwehere.com/downloads
Content-Length: 35

moztestpub-trackwhite-digest256;a:1

>>>
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Date: Mon, 21 Nov 2016 14:03:23 GMT
Content-Length: 128
Connection: keep-alive

n:3600
i:moztestpub-trackwhite-digest256
ad:1
u:tracking-protection.somwehere.com/moztestpub-trackwhite-digest256/1469551567

<<<
OK

描述您的场景

通过提供要执行的操作序列及其operationId来描述场景。

对于每个操作,您可以通过提供状态码和一些头部信息的值来对响应进行一些断言。

YAML示例

x-smoke-test:
  scenario:
  - getSomething:
      request:
        params:
          foo: bar
      response:
        status: 200
        headers:
          Content-Type: application/json
  - getSomethingElse
      response:
        status: 200
  - getSomething
      response:
        status: 200

如果响应不符合,将引发断言错误。

发布数据

当您发布数据时,您可以在操作下的request键中提供请求体内容。

YAML示例

x-smoke-test:
  scenario:
  - postSomething:
      request:
        body: This is the body I am sending.
      response:
        status: 200

替换路径变量

如果您的某些路径正在使用swagger规范中定义的模板变量,您可以使用path选项

x-smoke-test:
  scenario:
  - postSomething:
      request:
        body: This is the body I am sending.
        path:
          var1: ok
          var2: blah
      response:
        status: 200

您还可以定义全局路径值,这些值将在格式化路径时被查找。在这种情况下,变量必须在顶层path部分中定义

x-smoke-test:
  path:
    var1: ok
  scenario:
  - postSomething:
      request:
        body: This is the body I am sending.
        path:
          var2: blah
      response:
        status: 200

变量

您可以从响应中提取值,以便在后续操作中使用,无论是替换路径模板中的变量还是创建一个主体。

例如,如果getSomething返回一个包含“foo”值的JSON字典,您可以通过在响应键内的vars部分中声明它来提取它

x-smoke-test:
  path:
    var1: ok
  scenario:
  - getSomething:
      request:
        body: This is the body I am sending.
        path:
          var2: blah
      response:
        status: 200
        vars:
          foo:
            query: foo
            default: baz

Smwogger将使用查询值来了解在响应体中查找的位置并提取值。如果未找到值且提供了默认值,则变量将采用该值。

一旦变量设置,它将被Smwogger用于后续操作,用于替换路径模板中的变量或填充响应数据。

路径格式化是自动完成的。Smwogger首先查看操作中定义的变量,然后查看路径部分。

如果您想在体中使用变量,则需要使用${格式化}

x-smoke-test:
  path:
    var1: ok
  scenario:
  - getSomething:
      response:
        vars:
          foo:
            query: foo
            default: baz
  - doSomething:
      request:
        body: ${foo}

使用API

如果您的场景过于复杂,无法适应描述,则可以使用–test选项中的纯Python脚本。

Python脚本测试是一个包含场景函数的模块。该函数将被执行,并将获得API类的实例以及传递给smwogger客户端的参数。

函数需要是协程。示例

from smwogger.cli import console

async def scenario(api, args):
    with console('Getting something', verbose=args.verbose):
        resp = await api.getSomething()
    assert resp.status == 200

如果您想自己处理所有内容,也可以使用纯Python脚本。

在下面的示例中,脚本打印出所有已发布的操作ID

import asyncio
from smwogger import API


async def print_operations():
    async with API('http://petstore.swagger.io/v2/swagger.json') as api:
            print(api.operations)


loop = asyncio.get_event_loop()
try:
    loop.run_until_complete(print_operations())
    finally:
        loop.close()

贡献者

由Tarek Ziade创建的项目 <tarek_AT_ziade.org>

按照出现顺序列出的贡献者

  • Lucas Cimon <lucas.cimon_AT_gmail.com>

版本

1.0 2017-03-28

  • 初始版本。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

smwogger-1.0.tar.gz (13.6 kB 查看散列值)

上传时间

由以下组织支持