跳到主要内容

apt对象API

全局方法

apt

apt:Object

apt对象包含了接口(或测试集)运行的相关信息,并且可以通过它访问需要发送的请求信息和发送后返回的结果信息。另外还可以通过它get或set环境变量和全局变量。

apt.info:Object

apt.info 对象包含了接口(或测试集)运行的相关信息。

apt.info.eventName:String

当前执行是什么类型的脚本:前置脚本(pre_script),或后置脚本(test)。

apt.info.iteration:Number

当前执行第几轮循环(iteration),仅针对自动化测试的循环有效,单接口测试永为 0。

apt.info.iterationCount:Number

本次执行需要循环的总轮数,仅针对自动化测试的循环有效,单接口测试永为 1。

apt.info.requestId:String

当前正在运行的接口用例名称的唯一 ID

apt.variables

临时变量。不同类型的变量,有不同的优先级,不同类型变量的优先级顺序为: 临时变量 < 环境变量 < 全局变量

apt.variables.has(variableName:String):functionBoolean: 检查是否存在某个临时变量。
apt.variables.get(variableName:String):function*: get 单个临时变量。
apt.variables.set(variableName:String, variableValue:String):functionvoid: set 单个临时变量。
apt.variables.replaceIn(variableName:String):function: 以真实的值替换字符串里的包含的动态变量,如{{variable_name}}
apt.variables.toObject():functionObject: 以对象形式获取所有临时变量。

apt.iterationData

测试数据变量,因为测试数据是单独管理的,暂不支持在脚本中直接设置测试数据变量,但是您可以在脚本中访问测试数据变量,如下。

apt.iterationData.has(variableName:String):functionBoolean: 检查是否存在某个测试数据变量。
apt.iterationData.get(variableName:String):function*: get 单个测试数据变量。
apt.iterationData.replaceIn(variableName:String):function: 以真实的值替换字符串里的包含的动态变量,如{{variable_name}}
apt.iterationData.toObject():functionObject: 以对象形式获取所有测试数据变量。

apt.environment

apt.environment.getName():String: 获取当前环境名称。
apt.environment.getPreUrl():String: 获取当前环境前置URL
apt.environment.getCollection():String: 获取当前环境变量集合。
apt.environment.has(variableName:String):functionBoolean:检查是否存在某个环境变量。
apt.environment.get(variableName:String):function*get 单个环境变量。
apt.environment.set(variableName:String, variableValue:String):functionset 单个环境变量。
apt.environment.replaceIn(variableName:String):function:以真实的值替换字符串里的包含的动态变量,如{{variable_name}}
apt.environment.toObject():functionObject:以对象形式获取当前环境的所有变量。
apt.environment.unset(variableName:String):function: unset 单个环境变量。
apt.environment.clear():function:清空当前环境的所有变量。

apt.globals

apt.globals.has(variableName:String):functionBoolean:检查是否存在某个全局变量。
apt.globals.get(variableName:String):function*get 单个全局变量。
apt.globals.set(variableName:String, variableValue:String):functionset 单个全局变量。
apt.globals.replaceIn(variableName:String):function:以真实的值替换字符串里的包含的动态变量,如{{variable_name}}
apt.globals.toObject():functionObject:以对象形式获取所有全局变量。
apt.globals.unset(variableName:String):function: unset 单个全局变量。
apt.globals.clear():function:清空当前环境的全局变量。

apt.test

apt.test(testName:String, specFunction:Function):Function

该方法用来断言某个结果是否符合预期。

以下示例为检查返回的 respone 是否正确:

apt.test("response should be okay to process", function() {
apt.response.to.not.be.error;
apt.response.to.have.jsonBody("");
apt.response.to.not.have.jsonBody("error");
});

测试脚本示例

hello word! 第一个测试脚本

要编写您的第一个测试脚本,请在 Apipost 中打开一个请求,然后选择“后执行脚本”选项卡。输入以下 JavaScript 代码:

apt.test("响应码为 200", function () {
apt.response.to.have.status(200);
});

此测试检查 API 返回的响应代码。如果响应代码是200,则测试将通过,否则将失败。选择发送并转到响应区域中的断言与校验选项卡。

image.png

以多种方式构建您的测试断言,以适应您对结果输出方式的逻辑和偏好。以下代码是使用expect语法实现与上述代码相同测试的另一种方法:

apt.test("Status code is 200", () => {
apt.expect(apt.response.code).to.eql(200);
});

什么是 apt.expect ?

apt.expect(assertion:*):Function → Assertion

上述示例用到了apt.expert,这是一个针对测试的断言诊断库,有关断言语法选项的完整概述,请参阅 Chai 断言库文档

使用多个断言

您的测试可以包含多个断言作为单个测试的一部分。使用它来将相关的断言组合在一起:

apt.test("The response has all properties", () => {
//parse the response JSON and test three properties
const responseJson = apt.response.json;
apt.expect(responseJson.type).to.eql('vip');
apt.expect(responseJson.name).to.be.a('string');
apt.expect(responseJson.id).to.have.lengthOf(1);
});

如果包含的任何断言失败,则整个测试将失败。所有断言都必须成功才能使测试通过。

解析响应体数据

要对您的响应执行断言,您首先需要将数据解析为您的断言可以使用的 JavaScript 对象。

要解析 JSON 数据,请使用以下语法:

const responseJson = apt.response.json;

要解析 XML,请使用以下内容:

const responseJson = xml2Json(apt.response.text());

要解析 CSV,请使用CSV 解析实用程序:

const responseJson = csv2array(apt.response.text());

处理不解析的响应

如果您无法将响应正文解析为 JavaScript,因为它的格式不是 JSON、XML、HTML、CSV 或任何其他可解析的数据格式,您仍然可以对数据进行断言。

测试响应主体是否包含字符串:

apt.test("Body contains string",() => {
apt.expect(apt.response.text()).to.include("customer_id");
});

这不会告诉您遇到字符串的位置,因为它是对整个响应主体进行测试。测试响应是否与字符串匹配(通常只对短响应有效):

apt.test("Body is string", function () {
apt.response.to.have.body("whole-body-text");
});

对 HTTP 响应进行断言

您的测试可以检查请求响应的各个方面,包括body、status codes、headers、cookies、response times等等。

测试响应体

检查响应正文中的特定值:

apt.test("Person is Jane", () => {
const responseJson = apt.response.json;
apt.expect(responseJson.name).to.eql("Jane");
apt.expect(responseJson.age).to.eql(23);
});

测试状态码

测试响应状态码:

apt.test("Status code is 201", () => {
apt.response.to.have.status(201);
});

如果你想测试状态代码是否是一组中的一个,请将它们全部包含在一个数组中并使用oneOf:

apt.test("Successful POST request", () => {
apt.expect(apt.response.code).to.be.oneOf([201,202]);
});

查看状态码文本:

apt.test("Status code name has string", () => {
apt.response.to.have.status("Created");
});

测试标头

检查是否存在响应标头:

apt.test("Content-Type header is present", () => {
apt.response.to.have.header("Content-Type");
});

测试具有特定值的响应标头:

apt.test("Content-Type header is application/json", () => {
apt.expect(apt.response.headers['Content-Type']).to.eql('application/json');
});

测试响应中是否存在 cookie:

apt.test("Cookie JSESSIONID is present", () => {
apt.expect(apt.response.cookies['cookie-test1']).to.not.be.undefined;
});

测试特定的 cookie 值:

apt.test("Cookie isLoggedIn has value 1", () => {
apt.expect(apt.response.cookies['cookie-test1']).to.eql('0');
});

测试响应时间

测试响应时间是否在指定范围内:

apt.test("Response time is less than 200ms", () => {
apt.expect(apt.response.responseTime).to.be.below(200);
});

apt.response.to.be.*

apt.response.to.be 是用来快速断言的一系列内置规则。

apt.response.to.be.info

检查状态码是否为1XX

apt.response.to.be.success

检查状态码是否为2XX

apt.response.to.be.redirection

检查状态码是否为3XX

apt.response.to.be.clientError

检查状态码是否为4XX

apt.response.to.be.serverError

检查状态码是否为5XX

apt.response.to.be.error

检查状态码是否为4XX或5XX

apt.response.to.be.ok

检查状态码是否为200

apt.response.to.be.accepted

检查状态码是否为202

apt.response.to.be.badRequest

检查状态码是否为400

apt.response.to.be.unauthorized

检查状态码是否为401

apt.response.to.be.forbidden

检查状态码是否为403

apt.response.to.be.notFound

检查状态码是否为404

apt.response.to.be.rateLimited

检查状态码是否为429