Postman测试脚本-如何调用API两次来模拟409错误

2j4z5cfb  于 2022-12-23  发布在  Postman
关注(0)|答案(2)|浏览(242)

我正在尝试使用Postman工具运行一些自动化测试。对于常规场景,我了解如何编写预测试和测试脚本。我不知道(也不想了解)的是,如何编写脚本来检查409错误(让我们称之为重复资源检查)。
我想运行一个创建资源的API,如下所示,然后再次运行,并确保第二次调用确实返回409错误。

POST  /myservice/books

有没有办法运行相同的API两次,并检查第二次调用的返回值。如果有,我该怎么做。一个粗略的方法是创建两个测试之间的依赖关系,其中第一个创建一个资源,第二个再次使用相同的负载来创建相同的资源。我正在寻找一个单一的测试来做端到端的测试。

13z8s7eq

13z8s7eq1#

postman并没有提供一个标准的方法,但是仍然很灵活,我意识到我们必须在pre-request选项卡中编写javascript代码,来执行我们自己的http请求(使用sendRequest方法),并将结果数据存储到env vars中,以供主api调用使用。
下面是一个示例:

var phone = pm.variables.replaceIn("{{$randomPhoneNumber}}");
console.log("phone:", phone)
var baseURL = pm.variables.replaceIn("{{ROG_SERVER}}:{{ROG_PORT}}{{ROG_BASE_URL}}")
var usersURL = pm.variables.replaceIn("{{ROG_SERVICE}}/users")
var otpURL = `${baseURL}/${phone}/_otp_x`

// Payload for partner creation
const payload = {
    "name": pm.variables.replaceIn("{{username}}"),
    "phone":phone,
    "password": pm.variables.replaceIn("{{$randomPassword}}"),
}
console.log("user payload:", payload)

function getOTP (a, callback) {
    // Get an OTP
    pm.sendRequest(otpURL, function(err, response) {
        if (err) throw err
        var jsonDaata = response.json()
        pm.expect(jsonDaata).to.haveOwnProperty('otp')
        pm.environment.set("otp", jsonDaata.otp)
        pm.environment.set("phone", phone);
        pm.environment.set("username", "{{$randomUserName}}")
        if (callback) callback(jsonDaata.otp)
    }) 
}

// Get an OTP
getOTP("a", otp => {
    console.log("OTP received:", otp)
    payload.partnerRef = pm.variables.replaceIn("{{$randomPassword}}")
    payload.otp = otp

    //create a partner user with the otp.
    let reqOpts = {
        url: usersURL,
        method: 'POST',
        headers: { 'Content-Type': 'application/json'},
        body: JSON.stringify(payload)
    }
    pm.sendRequest(reqOpts, (err, response) => {
        console.log("response?", response)
        pm.expect(response).to.have.property('code', 201)
    })

   // Get a new OTP for the main request to be executed.
   getOTP() 
})
hrirmatl

hrirmatl2#

我在我的测试块中这样做了。创建你的普通请求,然后在你的测试中,验证原始的工作,然后你可以发送第二个命令并验证响应。
您还可以使用前脚本和后脚本来做类似的事情,或者在文件中一个接一个地进行测试(它们按顺序运行)来做相同的测试。
例如,我在这里发送了一个API调用来创建记录,因为我需要Key_来删除它们,所以我可以在我的API中调用GET /foo

pm.test("Response should be 200", function () { 
    pm.response.to.be.ok;
    pm.response.to.have.status(200);
});

pm.test("Parse Key_ values and send DELETE from original request response", function () {
    var jsonData = JSON.parse(responseBody);
    jsonData.forEach(function (TimeEntryRecord) {
        console.log(TimeEntryRecord.Key_);
        const DeleteURL = pm.variables.get('APIHost') + '/bar/' + TimeEntryRecord.Key_;

        pm.sendRequest({
            url: DeleteURL, 
            method: 'DELETE',
            header: { 'Content-Type': 'application/json' },
            body: { TimeEntryRecord }
        }, function (err, res) {
            console.log("Sent Delete: " + DeleteURL );
        });
    });
});

相关问题