Trade Me-12-使用Buy Now购买拍卖API 测试 | Postman接口自动化测试

API 功能

使用“立即购买”购买商品。

API - 使用“立即购买”购买拍卖脚本开发步骤

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

API规范

  • 关键请求字段

img

  • 关键响应字段 - Buy Now 请求的详细信息。

Success Boolean 指示操作是否成功。
Description String or null 错误的描述,如果操作失败。
StatusCode Enumeration 立即购买请求的状态。
Success 0 竞标成功。
PurchaseId Long Integer 刚刚购买的 ID。

More refer to: Buy an auction using Buy Now

  • 示例请求

POST https://api.tmsandbox.co.nz/v1/Bidding/BuyNow.JSON

{

“ListingId”:2149302816,

“ShippingOption”:2

}

  • 示例响应

{
    "Success": true,
    "Description": "Seller's email owen4@snipesoft.net.nz",
    "StatusCode": 0,
    "PurchaseId": 26231
}

业务介绍

  • 前端页面 - 商品详情页面点击“立即购买”按钮。

登录 > 搜索一个种类 > 过滤’buy now' 商品并进入商品详情页面 > 单击’Buy Now' > 选择运输方式并确认购买

img

  • 前端页面-确认购买页面

img

  • 前端页面 - 购买详情页面

img

  • 业务范围选择

链式组合交易

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

从上游事务“通用搜索 ”的响应中获取“ListingId”作为请求字段之一。

从上游交易“检索单个列表的详细信息 ”的响应中获取“ShippingId” 作为请求字段之一。

  • 业务验证点

检查给定的项目详细信息显示在页面上。

API测试脚本调试

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

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

img

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

根据 API 规范,参数 - ListingId表示 Buy Now 请求所针对的列表的 ID。

并且listingId来自上游请求’ General search ‘的响应,并且已经设置为环境变量:{{SingleListingId}}。

根据 API 规范,参数 - ShippingOption表示如果立即购买请求成功将使用的首选运输选项的 ID。此 ID 可从商品详情中的 ShippingId 字段中检索。

来自上游请求“从您赢得的商品列表中删除购买 ”的响应的 ShippingOption 来源 ,并且它已经设置为环境变量:{{ShippingId}}。

所以请求应该是https://api.tmsandbox.co.nz/v1/Bidding/BuyNow.JSON

img

  • API连通性

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

{
    "Success": true,
    "Description": "Seller's email mp70@abcde.com",
    "StatusCode": 0,
    "PurchaseId": 26262
}
  • API检查点

检查“使用立即购买购买拍卖”功能是否有效,可以成功将物品购买到赢得的物品列表中。

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

// Check BuyNow operation is sucessful
console.log("Post-Transaction: CheckingBuyNow Start");

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

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

    var jsonData = pm.response.json();

    var Success = jsonData.Success;

    var StatusCode = jsonData.StatusCode;

    var PurchaseId= jsonData.PurchaseId;

    postman.setEnvironmentVariable('BuyNowPurchaseId', PurchaseId);  

    if(Success == true && StatusCode == 0){
        
        console.log("Get sucessful StatusCode: " +StatusCode+" (0-Success)");    

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

    }

    else{

        //0-Success, 1-None, 2-ReserveMet, ..., 42-AutoBidDecreased
        console.log("Get failed StatusCode: " +StatusCode);

        var Description = jsonData.Description;

        console.log("Failed Description: " +Description);

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

    }

});

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

const post_request = {

  url:  pm.environment.get("BaseUrl")+'/v1/MyTradeMe/Won/All.JSON',

  method: 'GET',

  header:['Content-Type:application/json', 'Authorization:OAuth oauth_consumer_key="4B34BCCFD24CF3497EE36E54204AA7E2",oauth_token="38B073E4F6C65F722A0CF964492EA6A2",oauth_signature_method="PLAINTEXT",oauth_timestamp="1623834029",oauth_nonce="Zr5dzIAuVON",oauth_version="1.0",oauth_signature="0D8635F6A51F0EA381A8D97F5D7812E2%26293BD08354D18D33871C4EBB02D67ACA"'],

  body: {
  }

};

// setTimeout(()=>{
    pm.sendRequest(post_request, function (err, response) {

        if (err) {

            console.log(err);

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

        } 

        else {

            // Confirm whether PurchaseId of new buy item existed on the won list.
            pm.test("Checking NewPurchasedListId existed in the won list", function () {

                console.log(response.json());

                var jsonData = response.json();

                var Listdata = jsonData['List'];

                var SingleListingId = pm.environment.get("SingleListingId");

                var BuyNowPurchaseId = pm.environment.get("BuyNowPurchaseId");

                breakloop:{

                    for(var i = 0; i < Listdata.length; i++) {

                    // console.log("ListingId: " + Listdata[i].ListingId + ", PurchaseId: " + Listdata[i].PurchaseId);
                    
                        if (SingleListingId == Listdata[i].ListingId && BuyNowPurchaseId == Listdata[i].PurchaseId){

                            console.log("Found PurchaseId " +BuyNowPurchaseId +" and ListingId "+SingleListingId + " exists on the won list"); 

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

                            break breakloop;

                        }

                    }

                    if (i==0){

                        console.log("Not Found any PurchaseId and ListingId exist on the won list.");

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

                    }

                    else{

                        console.log("The purchased item hasn't been shown on the won list page, please waiting 60 seconds to check again.");

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

            });            

        }
        
    });

// }, 70000);

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

img

img

API 测试脚本增强

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

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

在“立即购买”操作之前,请查看商品详情。

img

在“立即购买”操作后,查看商品详情。

img

在“立即购买”操作后,查看赢得的项目列表。

img

API 测试脚本否定案例扩展

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

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

API测试脚本发布

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

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

版权

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