使用Swagger在DevWeb中进行API测试

作者 : IT 大叔 本文共4314个字,预计阅读时间需要11分钟 发布时间: 2020-11-6

什么是DevWeb

DevWeb(技术预览版为TruWeb)是从Micro Focus到HTTP传输级别和WebSocket的性能测试应用程序的新协议。

独立产品称为LoadRunner Developer,它是跨Windows,Linux和macOS的跨平台,使用轻量级JavaScript SDK和可伸缩性。

这是Wiki的定义:

Swagger是一种界面描述语言,用于描述使用JSON表示的RESTful API。Swagger与一组开源软件工具一起使用,以设计,构建,记录和使用RESTful Web服务。Swagger包括自动文档编制,代码生成和测试用例生成。

Swagger由SmartBear Software开发。

使用Swagger在DevWeb中进行API测试

LoadRunner Professional 2020 SP 3使用Swagger Specification 2.0支持DevWeb中的API测试

您只需要在DevWeb中导入swagger json文件,即可swaggerApi.jsExtra Files下生成文件,如下所示。

使用Swagger在DevWeb中进行API测试插图
使用Swagger在DevWeb中进行API测试

swaggerApi.js包含将从调用的所有JSON定义Main。以下是此Pet Store Swagger中的getPetById定义。

/**
* Find pet by ID
* @param {petId} ID of pet to return
**/
function getPetById(petId){
    const webRequest0 = new load.WebRequest({
        url: `${this.$.getSchema()}://${this.$.getHost()}/${this.$.getBasePath()}/pet/${petId}`,
        method: "GET",
        headers: {
            "accept": "application/json,application/xml"
        },
    })
    return webRequest0;
}

如何在DevWeb中导入swagger文件?

创建一个新的DevWeb脚本,如下所示,转到Record> Import API File

使用Swagger在DevWeb中进行API测试插图(2)
导入API文件-步骤1

单击浏览并浏览下载的json文件,如下所示,然后单击导入。这会将所有定义导入swaggerApi.js文件。

使用Swagger在DevWeb中进行API测试插图(4)
导入API文件-步骤2

生成DevWeb脚本的最佳方法是使用HAR文件。

如何从摇摇欲坠的定义生成脚本?

有两种方法可以生成脚本:

  1. 使用HAR文件
  2. 通过记录
  3. 使用OfflineGenerator.exe

使用HAR文件

当我们使用Pet Store swagger时,让我们捕获get pet id请求并将其保存为HAR。

在您喜欢的浏览器中启动https://petstore.swagger.io/#/pet/getPetById并启动网络工具。我正在使用Firefox将请求保存为HAR。

使用Swagger在DevWeb中进行API测试插图(6)
另存为HAR

现在回到VuGen,单击“记录”按钮,并使用以下设置浏览保存的HAR文件,然后单击“开始记录”

使用Swagger在DevWeb中进行API测试插图(8)
使用HAR录制

swaggerApi.js将具有来自json的所有操作。使用HAR或Recording或Offline Generator生成DevWeb脚本。

这将分析流量并为getPetById生成相应的文件,如下所示。

// This script was generated and reflects raw data. It is recommended to change this code to your required logic

const swaggerApi = require('./swaggerApi.js')(load);


load.initialize("Initialize", async function () {
});

load.action("Action", async function () {
    load.WebRequest.defaults.returnBody = false;
    load.WebRequest.defaults.headers = {
        "Accept": "application/json",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "en-US,en;q=0.5",
        "Connection": "keep-alive",
        "DNT": "1",
        "Referer": "https://petstore.swagger.io/",
        "TE": "Trailers",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0"
    };

    let webRequest1 = swaggerApi.getPetById("12");
    const webResponse1 = await webRequest1.send();


});

load.finalize("Finalize", async function () {
});

如果一切顺利,则重放将成功,如下所示。

使用Swagger在DevWeb中进行API测试插图(10)
重播成功

通过记录

现在,让我们通过记录生成getPetById请求。单击“记录”按钮并进行如下配置,然后单击“开始记录”

使用Swagger在DevWeb中进行API测试插图(12)
开始录音

在浏览器中,只需执行getPetById请求,一旦录制完成,就转到Main查看捕获的呼叫。

// This script was generated and reflects raw data. It is recommended to change this code to your required logic

const swaggerApi = require('./swaggerApi.js')(load);


load.initialize("Initialize", async function () {
});

load.action("Action", async function () {
    load.WebRequest.defaults.returnBody = false;
    load.WebRequest.defaults.headers = {
        "accept-encoding": "gzip, deflate, br",
        "accept-language": "en-US,en;q=0.9",
        "dnt": "1",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36"
    };

    const webResponse1 = new load.WebRequest({
        id: 1,
        url: "https://petstore.swagger.io/",
        method: "GET",
        headers: {
            "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
            "cache-control": "max-age=0",
            "sec-fetch-dest": "document",
            "sec-fetch-mode": "navigate",
            "sec-fetch-site": "none",
            "sec-fetch-user": "?1",
            "upgrade-insecure-requests": "1"
        },
        resources: [
            "https://petstore.swagger.io/swagger-ui.css",
            "https://petstore.swagger.io/swagger-ui-bundle.js",
            "https://petstore.swagger.io/swagger-ui-standalone-preset.js",
            "https://petstore.swagger.io/favicon-32x32.png",
        ],
    }).sendSync();

    const webResponse2 = new load.WebRequest({
        id: 2,
        url: "https://petstore.swagger.io/v2/swagger.json",
        method: "GET",
        headers: {
            "accept": "application/json,*/*",
            "referer": "https://petstore.swagger.io/",
            "sec-fetch-dest": "empty",
            "sec-fetch-mode": "cors",
            "sec-fetch-site": "same-origin"
        },
    }).sendSync();

    let webRequest3 = swaggerApi.getPetById("14");
    const webResponse3 = await webRequest3.send();


});

load.finalize("Finalize", async function () {
});

使用OfflineGenerator.exe

导航到LoadRunner安装位置,通常在C:\Program Files (x86)\Micro Focus\Virtual User Generator\bin\DevWeb下面,并发出以下命令以使用OfflineGenerator.exe程序生成脚本。

OfflineGenerator.exe –mode=swagger -level=pages -har=<path to har file> <path or URL to swagger.json> <path to result folder>

例如

OfflineGenerator.exe -mode=swagger -level=pages -har="C:\Users\Downloads\petstore.swagger.io_Archive [20-11-05 02-36-37].har" C:\Users\Downloads\petstore.json C:\Users\Documents\VuGen\Scripts\Swagger-Demo\

结论:

利用Swagger规范,DevWeb使测试API性能变得容易。它加快了脚本创建过程,并有助于向左移动。强大的力量伴随着巨大的责任。创建脚本后,我们有责任进行参数化,处理错误,实现逻辑等。

免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 使用Swagger在DevWeb中进行API测试

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论