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):function → Boolean: 检查是否存在某个临时变量。
apt.variables.get(variableName:String):function → *: get 单个临时变量。
apt.variables.set(variableName:String, variableValue:String):function → void: set 单个临时变量。
apt.variables.replaceIn(variableName:String):function: 以真实的值替换字符串里的包含的动态变量,如{{variable_name}}。
apt.variables.toObject():function → Object: 以对象形式获取所有临时变量。
apt.iterationData
测试数据变量,因为测试数据是单独管理的,暂不支持在脚本中直接设置测试数据变量,但是您可以在脚本中访问测试数据变量,如下。
apt.iterationData.has(variableName:String):function → Boolean: 检查是否存在某个测试数据变量。
apt.iterationData.get(variableName:String):function → *: get 单个测试数据变量。
apt.iterationData.replaceIn(variableName:String):function: 以真实的值替换字符串里的包含的动态变量,如{{variable_name}}。
apt.iterationData.toObject():function → Object: 以对象形式获取所有测试数据变量。
apt.environment
apt.environment.getName():String: 获取当前环境名称。
apt.environment.getPreUrl():String: 获取当前环境前置URL。
apt.environment.getCollection():String: 获取当前环境变量集合。
apt.environment.has(variableName:String):function → Boolean:检查是否存在某个环境变量。
apt.environment.get(variableName:String):function → *:get 单个环境变量。
apt.environment.set(variableName:String, variableValue:String):function:set 单个环境变量。
apt.environment.replaceIn(variableName:String):function:以真实的值替换字符串里的包含的动态变量,如{{variable_name}}。
apt.environment.toObject():function → Object:以对象形式获取当前环境的所有变量。
apt.environment.unset(variableName:String):function: unset 单个环境变量。
apt.environment.clear():function:清空当前环境的所有变量。
apt.globals
apt.globals.has(variableName:String):function → Boolean:检查是否存在某个全局变量。
apt.globals.get(variableName:String):function → *:get 单个全局变量。
apt.globals.set(variableName:String, variableValue:String):function:set 单个全局变量。
apt.globals.replaceIn(variableName:String):function:以真实的值替换字符串里的包含的动态变量,如{{variable_name}}。
apt.globals.toObject():function → Object:以对象形式获取所有全局变量。
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,则测试将通过,否则将失败。选择发送并转到响应区域中的断言与校验
选项卡。
以多种方式构建您的测试断言,以适应您对结果输出方式的逻辑和偏好。以下代码是使用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
测试响应中是否存在 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