【问题标题】:how to pass value in api body in protractor while requesting the api请求 api 时如何在量角器的 api 正文中传递值
【发布时间】:2019-05-29 20:22:44
【问题描述】:

我想在 API 请求正文中传递值。 我尝试了下面的代码

    var options = { method: 'POST',
        url: 'https://ssgpreprod.serviceurl.in/gonogo-api/atm/tw/cro-approval',
        headers:
            { 'Postman-Token': '9d6a0ad1-c3a1-402f-b845-b6416f49df6b',
                'cache-control': 'no-cache',
                'Content-Type': 'application/json' },
        body:
            { oHeader:
                { sReqType: 'application/json',
                    sAppSource: 'WEB 2.02.01',
                    sSourceID: 'GONOGO_HDBFS',
                    sAppID: 610961419000670,
                    dtSubmit: '',
                    sCroId: 'HDB_TW_CRO@cell.com',
                    sDsaId: 'default',
                    sInstID: 4019,
                    sUserName: 'CHDBTWCRO',
                    sProduct: 'TW',
                    sDealerId: '61096' },
                sRefID:testData.twPreIpa.twReferenceId,
                sAppStat: testData.twCroDetails.twCroDecision,
                aCroJustification: [ { sRemark: testData.twCroDetails.twRemark, sSubTo: testData.twCroDetails.twSubjectTo} ],
                bApprAmtExist: true,
                dApprAmt: testData.twApplyDetails.twLoanAmount,
                dItrRt: testData.twCroDetails.twRoi,
                dLtv: testData.twCroDetails.twLtv,
                aDedupeRefID: [] },
        json: true };

    request(options, function (error, response, body) {
        if (error) throw new Error(error);
        browser.logger.info(JSON.stringify(body));
        browser.logger.info(JSON.stringify(response));
        browser.logger.info('status code is : ' + response.statusCode);
        expect(response.statusCode).toBe(200).then(function () {
            browser.logger.info('case is approved');
            this.logOut(testData);
        })
    });

我从 xlsx 文件(即 testData.twPreIpa.twReferenceId)传递值,但我得到 422 状态代码和低于输出

[2019-05-28 15:42:10.403] [INFO] : - {"title":"Conversion Failed","status":422,"detail":"您发送的内容可能格式错误."}

另外,当我添加 - browser.logger.info('approved');上面的 var 选项打印在控制台上.. 但是当我添加 - browser.logger.info(testData.twPreIpa.twReferenceId);

它给了我错误..输出显示-

失败:无法读取未定义的属性“twReferenceId” TypeError:无法读取未定义的属性“twReferenceId”

【问题讨论】:

  • 请求在哪里声明?是需要请求npm包还是其他http包?
  • 对我来说,这看起来像是响应您发送了错误请求的 api。因此,您发送的数据不是它所期望的格式。此外,这与量角器完全无关。可能是jasmine,但这里没有与量角器相关的内容。
  • @DublinDev 请求在页面顶部声明。 var request = require("request");
  • @tehbeardedone 是的。这就是我没有得到如何在 API 中传递 xlsx 数据的原因,这就是响应 422 状态代码的原因。但是如果我像 sRefID: '21532562366' 一样将正常值传递给它,那么它对我有用。我也试过 sRefID:"testData.twPreIpa.twReferenceId" sRefID:'testData.twPreIpa.twReferenceId'
  • @jenny 也许 twPreIpa.twReferenceId 是一个数字而不是一个字符串?

标签: javascript api automation protractor postman


【解决方案1】:

虽然这可能无法直接回答您的问题,但它应该对您有所帮助。 我研究了一个与(我假设)你的框架类似的框架,一些 api 和一些 UI 验证。

我的 API 调用有一个单独的类,它返回一些值,有时是整个响应体。我允许自己传入任何我需要的主体作为参数。

这是我采用的方法的一个示例。

module.exports = class Endpoints {

    addSomethingToUser(bearerToken, userId, JSONbody) {
        //Function will preform a POST request and return the status code if successful
        //Else if will return the body of the response

        let endpoint = 'http://myApp.com:9090/api/users/' + userId;

        return new Promise((resolve, reject) => {
            let options = {
                method: "POST",
                headers: {
                    'Content-Type': 'application/json',
                    'Authorization': 'Bearer ' + token,
                },
                body: JSON.stringify(JSONbody),
            };

            request(
                endpoint,
                options ,
                function (error, response, body) {
                    if (!error && (response.statusCode >= 200 && response.statusCode < 300)) {
                        resolve(response.statusCode);
                    } else {
                        console.log('error:', error, response && response.statusCode);
                        reject(JSON.stringify(response, undefined, 2));
                    };
                }
            );
        });
    };
}

这样称呼

let apiCallsFile = require('../apiCalls/restCalls');
let apiCalls = new apiCallsFile();

it('simple test', async function(){
    let requiredBody = {
        "NAME": "Test Name",
        "GENDER": "MALE",
    };

    let apiResult = await apiCalls.addSomethingToUser(bearerToken, userId, requiredBody );
    expect(apiResult).toBe('201');
}

您的问题似乎与您在 excel 中使用的实际值有关。您应该在尝试发送请求之前尝试打印出您的值,以确保它们都存在并且采用您期望的格式。

【讨论】:

    猜你喜欢
    • 2021-07-15
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 2018-05-30
    相关资源
    最近更新 更多