文章目錄
- 結構
- demo步驟
- demo運行效果
- API測試
- (1) 添加待辦事項
- (2) 獲取所有待辦事項
- (3) 切換完成狀態
- (4) 刪除待辦事項
- API測試-RESTClient一些其他的高級功能
- 環境變量管理不同環境配置
- 授權認證 測試需要登錄的接口
- 保存響應
- 測試腳本編寫自動化測試
- bug解決
結構
嘗試寫一個簡單的待辦事項(Todo)管理的NodeJs后端服務,文件架構如下:
zyxTest/
├── server.js # 主程序
├── package.json # 項目配置
└── .gitignore # 忽略文件
demo步驟
-
初始化項目并安裝依賴:
express框架似乎是nodejs寫小程序的常用框架,我們先用express進行嘗試
npm init -y
#需要首先在windows powershell里面運行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser不然會彈出vscode禁止運行腳本
npm install express
- 創建
server.js
const express = require('express');
const app = express();
app.use(express.json());// 模擬數據庫(內存存儲)
let todos = [];
let idCounter = 1;// 獲取所有待辦事項
app.get('/todos', (req, res) => {res.json(todos);
});// 添加新待辦事項
app.post('/todos', (req, res) => {const { title } = req.body;if (!title) {return res.status(400).json({ error: 'Title is required' });}const newTodo = { id: idCounter++, title, completed: false };todos.push(newTodo);res.status(201).json(newTodo);
});// 刪除待辦事項
app.delete('/todos/:id', (req, res) => {const id = parseInt(req.params.id);todos = todos.filter(todo => todo.id !== id);res.sendStatus(204);
});// 切換完成狀態
app.patch('/todos/:id/toggle', (req, res) => {const id = parseInt(req.params.id);const todo = todos.find(t => t.id === id);if (todo) {todo.completed = !todo.completed;res.json(todo);} else {res.status(404).json({ error: 'Todo not found' });}
});// 啟動服務器
const PORT = 3000;
app.listen(PORT, () => {console.log(`Server running at http://localhost:${PORT}`);
});
- vscode終端啟動服務器:
node server.js
demo運行效果
此時vscode終端會給出訪問鏈接:
點擊鏈接可以看到前端狀態,此處采用了最簡單的寫法
API測試
我們最初采用curl進行api測試,但win里面的curl不太好用(詳情見bug解決第三條)改用vscode的RestClient插件進行api測試。
這個插件能幫助我們發送寫好的http請求,效果類似postman
插件效果如下,紅框內部是模擬請求發送按鈕。
(1) 添加待辦事項
curl方法:
curl -X POST http://localhost:3000/todos \-H "Content-Type: application/json" \-d '{"title": "Buy milk"}'
使用插件編寫test.http方法:
POST http://localhost:3000/todos
Content-Type: application/json{"title": "使用 REST Client 測試"
}
獲取到響應,測試成功
(2) 獲取所有待辦事項
curl http://localhost:3000/todos
### 獲取待辦事項
GET http://localhost:3000/todos
響應如下,測試成功:
(3) 切換完成狀態
curl -X PATCH http://localhost:3000/todos/1/toggle
PATCH http://localhost:3000/todos/1/toggle
響應如下,測試成功:
(4) 刪除待辦事項
curl -X DELETE http://localhost:3000/todos/1
### 刪除待辦事項 (DELETE)
DELETE http://localhost:3000/todos/1
也可以通過@name add_todo,使用 # @name 請求名稱
語法為請求命名,后續引用響應,可以切換單獨某個請求的完成狀態:
### 1. 添加新待辦事項并命名請求
# @name add_todo
POST http://localhost:3000/todos
Content-Type: application/json{"title": "使用變量示例的任務"
}### 2. 從響應中提取ID并賦值給變量
@todoId = {{add_todo.response.body.id}}### 3. 切換完成狀態(使用變量)
PATCH http://localhost:3000/todos/{{todoId}}/toggle### 4. 刪除待辦事項(使用同一個變量)
DELETE http://localhost:3000/todos/{{todoId}}
API測試-RESTClient一些其他的高級功能
環境變量管理不同環境配置
### 設置變量
@dev = http://localhost:3000
@prod = https://api.yourserver.com### 使用變量
GET {{dev}}/todos
授權認證 測試需要登錄的接口
POST http://localhost:3000/login
Content-Type: application/json{"username": "admin","password": "123456"
}### 獲取token后使用
@token = {{login.response.body.token}}
GET http://localhost:3000/profile
Authorization: Bearer {{token}}
保存響應
GET http://localhost:3000/todos
>> response.json
測試腳本編寫自動化測試
GET http://localhost:3000/todos> {%client.test("Status OK", function() {client.assert(response.status === 200);});client.test("Has items", function() {client.assert(response.body.length > 0);});
%}
bug解決
-
端口占用:
# 查找占用3000端口的進程 netstat -ano | findstr :3000 #mac似乎是lsof -i :3000# 終止進程 taskkill /PID <PID> /F #mac是kill -9
-
依賴安裝失敗:
嘗試清除緩存
npm cache clean --force rm -rf node_modules package-lock.json npm install
-
windows的curl問題:
在 Windows PowerShell 中,
curl
命令實際上是Invoke-WebRequest
cmdlet 的別名,所以我們在win下直接用curl會報錯:
win下可以直接使用 PowerShell 原生命令進行測試:
Invoke-RestMethod -Uri http://localhost:3000/todos `-Method POST `-Headers @{"Content-Type"="application/json"} `-Body '{"title":"新任務"}'
但是還是比較建議在 VSCode 中用 REST Client 擴展,更加方便
- 創建
test.http
文件 - 添加內容:
### 添加待辦事項
POST http://localhost:3000/todos
Content-Type: application/json{"title": "使用 REST Client 測試"
}### 獲取待辦事項
GET http://localhost:3000/todos
再點擊每個請求上方的 “Send Request”,就是發送請求