Trade Me-5-从您的监视列表中删除列表 API 测试 | Postman接口自动化测试

API 功能

从经过身份验证的用户的监视列表中删除列表。

API - 从监视列表脚本开发步骤中删除列表

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

API规范

  • 关键请求字段

img

  • 关键响应字段 - 有关操作是否成功的详细信息。

尝试删除不存在或不在监视列表中的拍卖不会产生错误。

Success Boolean 指示操作是否成功。
Description String or null 错误的描述,如果操作失败。

更多 API 规范是指从您的监视列表中删除列表

  • 示例请求

DELETE https://api.tmsandbox.co.nz/v1/MyTradeMe/WatchList/0000000000.JSON

  • 示例响应

{
    "Success": true,
    "Description": "Success"
}

业务介绍

  • 前端页面 - 关注列表页面

登录 > Watchlist > View Watchlist > Delete > Confirm to delete

img

  • 前端页面 - 确认删除项目页面

img

  • 业务范围选择

链式组合交易

检索您的监视列表 ->从您的监视列表中删除列表(我在这里 ->检索即将关闭的列表 ->将列表添加到您的监视列表

从上游事务“检索您的监视列表 ”的响应中获取所有“ListingId ”作为请求字段。

前置请求 ‘从您的监视列表中删除一个列表 ' 从 监视列表中删除所有 ListingId 但留下最后一个。

从监视列表中删除最后一个 ListingId。

  • 业务验证点

检查监视列表中的所有项目已被删除。

API测试脚本调试

前置求脚本的主要编码逻辑如下:

​ 1.前置请求 API - 检索您的监视列表以获取监视列表中的所有项目。

console.log("Pre-Transaction: RetrieveYourWatchlist Start");

// oauth_signature = Consumer Secret%26OAuth Token Secret
const pre_request_retrieveyourwatchlist = {
    url: pm.environment.get("BaseUrl") + '/v1/MyTradeMe/Watchlist/All.JSON',

    method: 'GET',

    header:['Content-Type:application/json', 'Authorization:OAuth oauth_consumer_key="your Consumer Key",oauth_token="your OAuth Token",oauth_signature_method="PLAINTEXT",oauth_timestamp="1623834029",oauth_nonce="Zr5dzIAuVON",oauth_version="1.0",oauth_signature="your Consumer Secret%26your OAuth Token Secret"'],
    
    body: {
    }

};
...

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

​ 2.所有获取的项目都应该排除那些字段是 ‘BidCount’ = 1 以获取允许从监视列表中删除的所有项目。‘BidCount’ 字段表示该项目已被投标,无法从监视列表中删除。

pm.sendRequest(pre_request_retrieveyourwatchlist, function (err, response) {

    if (err) {

        console.log(err);

        console.log("Pre-Transaction: RetrieveYourWatchlist Failed");

    }

    else {

        // Get all ListingId on the Watchlist
        pm.test("Get all ListingId on the Watchlist", function () {

            var jsonData = response.json();

            var Listdata = jsonData['List'];

            var arr = [];

            for (i = 0; i < Listdata.length; i++) {
                
                // bidding items can't be deleted, need to exclude them
                if (Listdata[i].BidCount != 1) {

                    arr.push(Listdata[i].ListingId);

                }

            }

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

            if(arr.length < 1){

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

                console.log("WatchlistListingIdCount: " +WatchlistListingIdCount + ", nothing items need to be deleted.");

            }

            else {

                postman.setEnvironmentVariable('WatchlistListingId', arr);

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

                console.log(All the can be deleted ListingId on the Watchlist: ");

                console.log(WatchlistListingId);

            }
        
        console.log("Pre-Transaction: RetrieveYourWatchlist Pass");
        
        });
...

​ 3.如果从监视列表中提取的项目 <=0,则监视列表中没有项目。只需启动一个无意义的’ListingId’。

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

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

        if (WatchlistListingIdCount <= 0) {

            //Grant a meaningless value to LastListingId
            postman.setEnvironmentVariable('LastListingId', "0000000000");

        }
...        

​ 4.如果从监视列表中提取的项目 =1,则存储 ‘ListingId’ 以供之后的API ‘RemoveAListingFromYourWatchlist’ 请求使用。

        else if (WatchlistListingIdCount == 1) {

            postman.setEnvironmentVariable('LastListingId', WatchlistListingId[(Number(WatchlistListingIdCount) - 1)]);

        }
...        

​ 5.如果从监视列表中获取的项目 >1,则组装前置请求“从您的监视列表中删除列表” 以删除监视列表中除最后一个项目之外的所有项目,然后保留最后一个项目以供后续交易从您的监视列表中删除列表 删除。

        else {

            //Delete ListingId from Watchlist, but leave the last ListingId for later transaction to delete
            console.log("Pre-Transaction: RemoveAListingFromYourWatchlist Start");

            postman.setEnvironmentVariable('LastListingId', WatchlistListingId[(Number(WatchlistListingIdCount) - 1)]);

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

            console.log("LastListingId: " + LastListingId);

            //Exclude the last ListingId
            for (var i = 0; i < (WatchlistListingId.length - 1); i++) {

                const pre_request_removealistingfromyourwatchlist = {

                    url: pm.environment.get("BaseUrl") + '/v1/MyTradeMe/WatchList/' + WatchlistListingId[i] + '.JSON',
                    method: 'DELETE',

                    header:['Content-Type:application/json', 'Authorization:OAuth oauth_consumer_key="your Consumer Key",oauth_token="your OAuth Token",oauth_signature_method="PLAINTEXT",oauth_timestamp="1623834029",oauth_nonce="Zr5dzIAuVON",oauth_version="1.0",oauth_signature="your Consumer Secret%26your OAuth Token Secret"'],
                    
                    body: {
                    }

                };

                pm.sendRequest(pre_request_removealistingfromyourwatchlist, function (err, response) {

                    if (err) {

                        console.log(err);

                        console.log("Pre-Transaction: RemoveAListingFromYourWatchlist Failed");

                    }

                    else {

                        // Output the ListingId that has been deleted
                        pm.test("Delete ListingId from the Watchlist, but leave the LastListingId: " + LastListingId, function () {

                            // console.log(response.json());
                        });
                    }

                });

            }

            console.log("Pre-Transaction: RemoveAListingFromYourWatchlist Pass");

        }

    }

});

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

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

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

img

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

  • 组装删除请求 - 从您的监视列表中删除列表

根据 API 规范,参数 - listingId表示要删除的列表的 ID。

并且listingId 来自前置请求' 检索您的监视列表 ‘的响应,并且它已经设置为环境变量:{{LastListingId}}。

所以请求应该是 DELETE https://api.tmsandbox.co.nz/v1/MyTradeMe/WatchList/{{LastListingId}}.JSON

img

  • API连通性

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

{
    "Success": true,
    "Description": "Success"
}
  • API检查点

使用后置请求: API - 检索您的监视列表以检查它是否仍有可以删除的监视列表中的项目。

检查前置请求’ Retrieve your watchlist ‘的功能是否有效;

并且它可以从其响应中排除那些无法执行删除操作的项目,以便使用另一个前置请求事务“从您的监视列表中删除列表 ”;

并且它可以保留其对下游事务“从您的监视列表中删除列表 ”的响应中的最后一项以供使用。

检查“从您的监视列表中删除列表 ”的功能是否有效,它可以从监视列表中删除最后一个项目。

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

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

const post_request = {

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

  method: 'GET',

  header:['Content-Type:application/json', 'Authorization:OAuth oauth_consumer_key="your Consumer Key",oauth_token="your OAuth Token",oauth_signature_method="PLAINTEXT",oauth_timestamp="1623834029",oauth_nonce="Zr5dzIAuVON",oauth_version="1.0",oauth_signature="your Consumer Secret%26your OAuth Token Secret"'],

  body: {
  }
  
};

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

pm.sendRequest(post_request, function (err, response) {

    if (err) {

        console.log(err);

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

    } 

    else {

        // Confirm whether all ListingId have been deleted from the Watchlist
        pm.test("Checking LastListingId: " +LastListingId +" has been deleted", function () {

            var jsonData = response.json();

            var Listdata = jsonData['List'];

            var arr = [];

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

                //bidding items can't be deleted, need to exclude them
                if(Listdata[i].BidCount != 1){

                    arr.push(Listdata[i].ListingId);

                }

            }
            
            if (arr.length == 0){

                console.log("Current count of ListingId that can be deleted in the watchlist: " +arr.length);

            }

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

    } 

});

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

img

img

API 测试脚本增强

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

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

删除操作前显示在监视列表页面上。

img

移除操作后显示在关注列表页面。

img

API 测试脚本否定案例扩展

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

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

API测试脚本发布

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

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

版权

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