软件测试常见断言,5.6 postman 常用的断言

# 编写测试

您可以使用JavaScript为Postman API请求编写测试脚本。通过测试,您可以确保您的API能够按预期运行,确定服务之间的集成可靠运行,并验证新开发是否没有破坏任何现有功能。当您的API项目出现问题时,您还可以使用测试代码来帮助调试过程。

> 例如,您可以编写测试以通过发送不完整数据的请求来验证API的错误处理。

您可以将测试添加到单个请求,文件夹和集合。

要将测试添加到请求中,请打开请求,然后在“测试”选项卡中输入代码。测试将在请求运行后执行。您将能够在**测试结果**选项卡中的响应数据旁边看到输出。

![要求测试标签](https://assets.postman.com/postman-docs/request-test-tab.jpg)

## [](https://learning.postman.com/docs/writing-scripts/test-scripts/#writing-test-scripts)编写测试脚本

您的测试脚本可以使用动态变量,对响应数据执行测试断言,并在请求之间传递数据。在**测试**的请求选项卡,您可以手动输入您的JavaScript或使用**片段**,你会看到在代码编辑器的右侧。

测试将在收到响应后执行,因此,当您单击**Send时**,当响应数据从API返回时,Postman将运行您的测试脚本。

> 如果您需要在请求运行之前执行代码,请改用“[请求前脚本”](https://learning.postman.com/docs/writing-scripts/pre-request-scripts/)。有关在请求运行时脚本如何执行的更多信息,请参见[脚本简介](https://learning.postman.com/docs/writing-scripts/intro-to-scripts/)。

要执行测试以验证请求返回的数据,可以使用`pm.response`对象。您可以使用`pm.test`函数定义测试,并提供一个名称和函数,该函数返回一个布尔值(`true`或`false`)来指示测试是通过还是失败。您可以在声明中使用[ChaiJS BDD](https://www.chaijs.com/api/bdd/)语法`pm.expect`来测试响应详细信息。

该`.test`函数的第一个参数是文本字符串,它将出现在测试结果输出中,因此您可以使用它来识别测试,并将测试的目的传达给查看结果的任何人。

例如,在“**测试”**选项卡中为任何请求输入以下内容,以测试响应状态代码是否为`200`。

~~~js

pm.test("Status test", function () {

pm.response.to.have.status(200);

});

~~~

![测试状态示例](https://assets.postman.com/postman-docs/example-test-status.jpg)

单击**发送**以运行您的请求,然后在响应部分中打开**测试结果**。选项卡标题显示通过了多少测试,总共运行了多少。您还可以在通过,跳过和失败的测试结果之间切换。

![测试结果](https://assets.postman.com/postman-docs/test-result-status.jpg)

如果请求返回了`200`状态码,则测试将通过,否则将失败。尝试在测试脚本中更改预期的状态代码,然后再次运行请求。

![测试结果失败](https://assets.postman.com/postman-docs/failed-test-status.jpg)

使用`pm.expect`语法可以为您的测试结果消息提供不同的格式-尝试各种替代方法以获得您认为最有用的输出。

![测试结果失败](https://assets.postman.com/postman-docs/expect-test-syntax.jpg)

> 使用**“**[简介](https://documenter.getpostman.com/view/1559645/RzZFCGFR?version=latest)**”中**的**“在邮递员**中**运行”**按钮[来编写测试集合,](https://documenter.getpostman.com/view/1559645/RzZFCGFR?version=latest)以将包含一些示例测试脚本的模板导入Postman并进行代码试验。

您的代码可以测试请求[环境](https://learning.postman.com/docs/sending-requests/managing-environments/),如以下示例所示:

~~~js

pm.test("environment to be production", function () {

pm.expect(pm.environment.get("env")).to.equal("production");

});

~~~

您可以使用不同的语法变体以您认为可读的方式编写测试,并且适合您的应用程序和测试逻辑。

~~~js

pm.test("response should be okay to process", function () {

pm.response.to.not.be.error;

pm.response.to.have.jsonBody("");

pm.response.to.not.have.jsonBody("error");

});

~~~

测试可以使用适合于响应数据格式的语法来确定请求响应的有效性。

~~~js

pm.test("response must be valid and have a body", function () {

pm.response.to.be.ok;

pm.response.to.be.withBody;

pm.response.to.be.json;

});

~~~

您的脚本可以包含您需要的许多测试,并且当您单击“**保存”**时,这些脚本将与其余的请求详细信息一起**保存**。如果您共享一个收藏集或发布文档/“在邮递员中运行”按钮,则查看或导入模板的任何人都将包含您的测试代码。

### [](https://learning.postman.com/docs/writing-scripts/test-scripts/#using-snippets)使用摘要

你会看到一个选择常用的测试代码摘录的**片段**,以测试编辑器的右侧。单击添加一个,它将出现在编辑器中。代码段可以加快脚本入门的速度-您可以在添加代码段以满足自己的测试要求之后对其进行编辑。

![添加了代码段](https://assets.postman.com/postman-docs/added-test-snippet.jpg)

## [](https://learning.postman.com/docs/writing-scripts/test-scripts/#testing-collections-and-folders)测试集合和文件夹

您可以将测试脚本添加到集合,文件夹或集合中的单个请求中。与集合关联的测试脚本将在集合中的每个请求之后运行。与文件夹关联的测试脚本将在文件夹中的每个请求之后运行。这样,您可以在每个请求之后重用通常执行的测试。

> 将脚本添加到集合和文件夹后,您可以测试API项目中的工作流程。这有助于确保您的请求涵盖典型场景,从而为应用程序用户提供可靠的体验。

您可以通过单击集合或文件夹名称旁边的**查看更多操作**(...),然后选择**编辑**来更新集合和文件夹脚本。选择“**测试”**选项卡以添加或更新脚本。您也可以在首次创建集合时添加集合脚本。

![收集测试](https://assets.postman.com/postman-docs/collection-test-script.jpg)

当你[运行一个集合](https://learning.postman.com/docs/running-collections/intro-to-collection-runs/),你将看到由集合亚军输出的测试结果。

![收集测试](https://assets.postman.com/postman-docs/collection-tests-run.jpg)

## 使用多个断言

您的测试可以在单个测试中包含多个断言,您可以使用此断言将相关断言分组在一起。

~~~js

pm.test("The response has all properties", () => {

//parse the response json and test three properties

const responseJson = pm.response.json();

pm.expect(responseJson.type).to.eql('vip');

pm.expect(responseJson.name).to.be.a('string');

pm.expect(responseJson.id).to.have.lengthOf(1);

});

~~~

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

## 解析响应主体数据

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

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

~~~js

const responseJson = pm.response.json();

~~~

要解析XML,请使用以下命令:

~~~js

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

~~~

### 测试响应主体

您可以在响应正文中检查特定值:

~~~js

pm.test("Person is Jane", () => {

const responseJson = pm.response.json();

pm.expect(responseJson.name).to.eql("Jane");

pm.expect(responseJson.age).to.eql(23);

});

~~~

### [](https://learning.postman.com/docs/writing-scripts/script-references/test-examples/#testing-status-codes)测试状态码

您可以测试响应状态代码:

~~~js

pm.test("Status code is 201", () => {

pm.response.to.have.status(201);

});

~~~

如果要测试状态码是否为一组,可以将它们全部包含在数组中并使用`oneOf`:

~~~js

pm.test("Successful POST request", () => {

pm.expect(pm.response.code).to.be.oneOf([201,202]);

});

~~~

### 测试头

您可以检查响应头是否存在:

~~~js

pm.test("Content-Type header is present", () => {

pm.response.to.have.header("Content-Type");

});

~~~

您还可以测试具有特定值的响应头:

~~~js

pm.test("Content-Type header is application/json", () => {

pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/json');

});

~~~

### 测试cookie

您可以测试响应中是否存在Cookie:

~~~js

pm.test("Cookie JSESSIONID is present", () => {

pm.expect(pm.cookies.has('JSESSIONID')).to.be.true;

});

~~~

您还可以测试特定的Cookie值:

~~~js

pm.test("Cookie isLoggedIn has value 1", () => {

pm.expect(pm.cookies.get('isLoggedIn')).to.eql('1');

});

~~~

### [](https://learning.postman.com/docs/writing-scripts/script-references/test-examples/#testing-response-times)测试响应时间

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

~~~js

pm.test("Response time is less than 200ms", () => {

pm.expect(pm.response.responseTime).to.be.below(200);

});

~~~

### 针对变量声明响应值

您可以检查响应属性是否与变量(在这种情况下为环境变量)具有相同的值。

~~~js

pm.test("Response property matches environment variable", function () {

pm.expect(pm.response.json().name).to.eql(pm.environment.get("name"));

});

~~~

### 断言值类型

您可以测试响应的任何部分的类型。

~~~js

/* response has this structure:

{

"name": "Jane",

"age": 29,

"hobbies": [

"skating",

"painting"

],

"email": null

}

*/

const jsonData = pm.response.json();

pm.test("Test data type of the response", () => {

pm.expect(jsonData).to.be.an("object");

pm.expect(jsonData.name).to.be.a("string");

pm.expect(jsonData.age).to.be.a("number");

pm.expect(jsonData.hobbies).to.be.an("array");

pm.expect(jsonData.website).to.be.undefined;

pm.expect(jsonData.email).to.be.null;

});

~~~

### 断言值在集合中

您可以根据有效选项列表检查响应值。

~~~js

pm.test("Value is in valid list", () => {

pm.expect(pm.response.json().type)

.to.be.oneOf(["Subscriber", "Customer", "User"]);

});

~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值