Trade Me-10-常规搜索API测试 | Postman接口自动化测试

API 功能

允许您按类别、关键字或这两者的组合搜索 Trade Me 上的列表。

结果集可以通过各种属性进行过滤,包括“立即购买”、“立即付款”、“商品状况”或“卖家”的可用性。

API - 常规搜索脚本开发步骤

API规范->业务展示->API测试脚本调试->API测试脚本增强->API测试脚本反向案例扩展->API测试脚本发布

API规范

  • 关键请求字段

img

page Integer (optional) 要返回的结果集的页码,从 1 开始。默认为 1。
rows Integer (optional) 每页结果数;也是要返回的最大结果数。对于未经身份验证的请求,最大值为 25,对于经过身份验证的请求,最大值为 500。默认为 25(未认证)或 50(已认证)。

更多参考:常规搜索

  • 关键响应字段

TotalCount Integer 集合中的结果总数。可以大于返回结果的数量。
TotalCountTruncated Boolean 如果结果总数超过允许的最大值并被截断,则为真。
Page Integer 当前结果页的索引(从 1 开始)。
PageSize Integer 当前页面中的结果数。
List Collection of or null 当前页面中的结果列表。
ListingId Long Integer 商家信息的 ID。
BuyNowPrice Number 立即购买价格。
HasBuyNow Boolean 指示该项目是否有立即购买。

更多参考:常规搜索

  • 示例请求

GET https://api.tmsandbox.co.nz/v1/Search/General.JSON?buy=All&rows=500&page=4

  • 示例响应

{
    "TotalCount": 16479,
    "Page": 4,
    "PageSize": 500,
    "List": [
    	...
        {
            "ListingId": 2149294614,
            "Title": "Cobra Glassware",
            "Category": "0341-0881-4739-",
            "StartPrice": 11.0000,
            "BuyNowPrice": 33.0000,
            ...
            "HasBuyNow": true,
            ...
        },
        ...
    ]
}   

业务介绍

  • 前端页面 - 搜索框勾选“立即购买”以过滤具有“立即购买”功能的项目。

登录 > 搜索一个种类

img

  • 业务范围选择

链式投资组合交易

检索您赢得的物品 ->从您赢得的物品列表中删除购买 ->常规搜索(我在这里 ->检索单个列表的详细信息 ->使用“立即购买”购买拍卖

通过搜索功能搜索 500 件商品,并仅从下游交易“检索单个列表的详细信息”的响应中选择具有“HasBuyNow”功能和 BuyNowPrice <= $20 的商品以供使用。

  • 业务验证点

检查给定的搜索条件可以获得项目,这些项目中的一个随机项目可以存储供下游事务’RetrieveTheDetailsOfASingleListing’使用。

API测试脚本调试

  • 在 Postman 的 Authorization 标签中选择 OAuth 1.0 对请求进行授权。

OAuth 1.0 是针对发送前需要授权的交易。模板如下:

img

如何获取Consumer Key、Consumer Secret、OAuth Token、OAuth Token Secret,请参考**API测试前的准备demo **

根据 API 规范,参数buy=All表示将列表过滤为仅包含“立即购买”的列表。

参数rows=500表示对于经过身份验证的请求,每页的最大结果数为500

参数page=4表示要返回的结果集的第4页。

所以请求应该是 GET https://api.tmsandbox.co.nz/v1/Search/General.JSON?buy=All&rows=500&page=4

img

  • API连通性

连通性测试通过并获得响应示例。

{
    "TotalCount": 16479,
    "Page": 4,
    "PageSize": 500,
    "List": [
    	...
        {
            "ListingId": 2149288229,
            "Title": "The Shawshank Redemption (Special Edition)",
            "Category": "0003-9232-9241-",
            "StartPrice": 0,
            "BuyNowPrice": 12,
            "StartDate": "/Date(1625090253613)/",
            "EndDate": "/Date(1625695053613)/",
            "ListingLength": null,
            "HasGallery": true,
            "AsAt": "/Date(1625649443316)/",
            "CategoryPath": "/Movies-TV/Bluray/Drama",
            "PictureHref": "https://images.tmsandbox.co.nz/photoserver/thumb/104197832.jpg",
            "Region": "Wellington",
            "Suburb": "Wellington City",
            "HasBuyNow": true,
            "NoteDate": "/Date(0)/",
            "ReserveState": 3,
            "IsBuyNowOnly": true,
            "PriceDisplay": "$12.00 per item",
            "HasFreeShipping": true,
            "PromotionId": 2,
            "AdditionalData": {
                "BulletPoints": [],
                "Tags": []
            },
            "MemberId": 4007156
        },
        ...
    ]
}
  • API检查点

检查“常规搜索”的功能是否有效,它可以从其对下游交易的响应中获取任何具有“HasBuyNow”功能的 ListingId ‘检索单个列表的详细信息 ‘或’使用立即购买的拍卖 ‘来使用.

然后我们根据示例功能得到下面的检查代码片段。

console.log("Post-Transaction: CheckingListingIdHasBuyNow Start");

pm.test("GetListingIdHasBuyNow", function () {

    var jsonData = pm.response.json();

    var Page = jsonData.Page;

    var PageSize = jsonData.PageSize;

    var arr =[];

    var List = jsonData.List;

    if (typeof(List) !== "undefined"){

        for (i in List){

            var ListingId = List[i].ListingId;

            //Only pick the items that has the 'HasBuyNow' feature and the BuyNowPrice <= $20
            if(List[i].HasBuyNow == true && List[i].BuyNowPrice <=20){

                arr.push(ListingId);

                }

        }

        postman.setEnvironmentVariable('ListingIdHasBuyNowCount', arr.length);  

    }

    if(Array.isArray(arr) && arr.length === 0){        

        console.log(pm.response.json());

        console.log("Didn't fetch any ListingId has the 'HasBuyNow' feature: " +SingleListingId);

        console.log("Post-Transaction: CheckingListingIdHasBuyNow Failed");

    }
    else{

        postman.setEnvironmentVariable('ListingIdHasBuyNow', arr);

        console.log("Page: "+Page+", total items: "+PageSize);
        
        console.log("'HasBuyNow and BuyNowPrice <=20' items counts to: " + arr.length + ", ListingId details: ");

        console.log(arr);

        // Randomly get one ListingId from the stored ListingId list that has the 'HasBuyNow' feature.
        // The ListingId will be picked for downstream transaction 'RetrieveTheDetailsOfASingleListing' to use.
        var ListingIdHasBuyNowCount = pm.environment.get("ListingIdHasBuyNowCount");

        var ListingIdHasBuyNow=pm.environment.get("ListingIdHasBuyNow").split(",");

        postman.setEnvironmentVariable('SingleListingId', ListingIdHasBuyNow[Math.floor(Math.random() * Number(ListingIdHasBuyNowCount))]);

        var SingleListingId = pm.environment.get("SingleListingId");
        
        console.log("Get random SingleListingId: " +SingleListingId);

        console.log("Post-Transaction: CheckingListingIdHasBuyNow Pass");

    }

});

运行脚本以从控制台日志验证检查点是否正常工作。

img

img

API 测试脚本增强

增强脚本,如添加事务功能、异常验证、参数化等。

运行最终脚本并从前端页面或控制台日志进行验证。

API 测试脚本否定案例扩展

使用我们在手动测试案例中所做的“等效类划分”和“边界值分析”。

这些API测试脚本都是做反方向的业务,作为上述API正案例的延伸。

API测试脚本发布

当我们完成 API 正面和反面案例时,将脚本从调试文件夹移动到公共文件夹。

然后等待使用 CICD 工具与其他脚本结合发布到 GitHub 特定存储库。

版权

本作品采用 CC BY-NC-ND 4.0 授权。