使用Supertest进行接口端点测试实践的问题整理

一、前言

端点测试的作用就是当你开发了一些API接口时,如果没有时间去进行大量的人工接口测试,那么就需要一些自动化的工具来对这些接口功能就行自动测试,supertest的作用就是可以让你写一些脚本来实现接口的自动化测试。

对于supertest的安装和基础用法本文不作过多说明,本文主要是整理了一些我在使用supertest的过程中遇到的一些坑,整理了一些解决方法,希望对各位有所帮助,文章可能会持续更新,比较坑是踩不完的,bug也是修不完的。。。

二、测试GET类接口的ID传值问题

Get类的接口一般需要一些条件参数,像资源的ID,用户的ID之类的参数,这类参数一般会有两种传递形式,

  • 直接在接口的地址中挂载,写进url中,例如“https://www.test.com/api/:testId”的形式;
  • 在请求接口的时候将参数挂到请求的query里面,将参数拼起来,例如“https://www.test.com/api?testId=123456”的形式。

那么这两种形式在编写端点测试脚本的时候应该如何写呢?
首先,第一种形式,直接将ID数据写进url中,代码如下:

request(app).get("https://www.test.com/api/",testId);
request(app).get(`https://www.test.com/api/${testId}`);

两种方式都可以实现要求。

第二种形式,将数据挂到url的后面,我刚开始写的时候写了好几种错误的形式,由于官方文档说明不是很清楚,其他文档也没有说明这内容的,导致我在这里纠结了半天时间。。。
下面我先写一下我写的几种错误的形式,代码如下:

request(app).get("https://www.test.com/api")
.query("testId", testId);
request(app).get("https://www.test.com/api")
.query({testId: testId});

首先这两种形式都是不正确的,这种形式是没办法用request.query.testId来接收testId的数据的,正确的写法如下:

request(app).get("https://www.test.com/api")
.query(`testId=${testId}`);

是的,需要将完整的字符串写进query的方法里面,就这么简单,我也不知道我当时为什么会卡在这个地方。。。希望其他人不要走弯路

三、测试POST类接口的数据传送问题

Post类的接口,数据发送比较简单,data一般是挂在请求的body里面的,在测试脚本中直接写进send方法里面就可以了,代码如下:

request(app).post("https://www.test.com/api")
.send({
name: "sage"
});

四、测试PATCH类更新接口的传值问题

更新接口一般是对资源的更新,首先需要传入资源的ID来找到资源,然后在根据传入的数据来对资源进行更新,两种形式,代码如下:

request(app).patch(`https://www.test.com/api/${testId}`)
.send({
name: “sage”
});
request(app).patch("https://www.test.com/api")
.query(`testId=${testId}`)
.send({
name: "sage"
});

撸码不停,踩坑不止,文章后续更新。。。

猜你喜欢

转载自blog.csdn.net/m0_37857819/article/details/106203134