# 宁夏智慧养殖监管平台 测试文档 ## 版本历史 | 版本 | 日期 | 作者 | 描述 | |------|------|------|------| | v1.0 | 2025-01-20 | 测试团队 | 初始版本 | ## 1. 测试概述 ### 1.1 测试目标 本文档旨在为宁夏智慧养殖监管平台提供全面的测试指导,确保系统的功能性、性能、安全性和可靠性满足产品需求。 ### 1.2 测试范围 **包含的测试内容:** - 前端应用测试(Vue 3 + Vite) - 后端API测试(Node.js + Express) - 数据库测试(MySQL) - 小程序测试(uni-app) - 集成测试 - 性能测试 - 安全测试 **不包含的测试内容:** - 第三方服务测试(百度地图API等) - 硬件设备测试 - 网络基础设施测试 ## 2. 测试策略 ### 2.1 测试类型 #### 2.1.1 单元测试 - **目标覆盖率**: ≥80% - **测试框架**: Jest (后端), Vitest (前端) - **测试内容**: 函数、组件、工具类 - **执行频率**: 每次代码提交 #### 2.1.2 集成测试 - **测试框架**: Supertest (API), Vue Test Utils (组件) - **测试内容**: API接口、组件交互、数据流 - **执行频率**: 每日构建 #### 2.1.3 端到端测试 - **测试框架**: Cypress - **测试内容**: 完整业务流程、用户交互 - **执行频率**: 版本发布前 #### 2.1.4 性能测试 - **测试工具**: Jest (单元性能), 自定义脚本 - **测试内容**: 响应时间、并发处理、资源使用 - **执行频率**: 版本发布前 ### 2.2 测试环境 #### 2.2.1 开发环境 - **用途**: 开发人员自测 - **数据**: 模拟数据 - **配置**: 本地开发配置 #### 2.2.2 测试环境 - **用途**: QA团队测试 - **数据**: 测试数据集 - **配置**: 接近生产环境 #### 2.2.3 预生产环境 - **用途**: 用户验收测试 - **数据**: 生产数据副本 - **配置**: 生产环境配置 ## 3. 测试工具和框架 ### 3.1 后端测试工具 #### 3.1.1 Jest 配置 ```json { "testEnvironment": "node", "collectCoverageFrom": [ "controllers/**/*.js", "models/**/*.js", "routes/**/*.js", "utils/**/*.js", "!**/node_modules/**", "!**/migrations/**", "!**/seeds/**" ], "coverageDirectory": "coverage", "coverageReporters": ["text", "lcov", "html"] } ``` #### 3.1.2 Supertest API测试 ```javascript const request = require('supertest'); const app = require('../app'); describe('API Tests', () => { test('GET /api/farms', async () => { const response = await request(app) .get('/api/farms') .expect(200); expect(response.body).toHaveProperty('data'); expect(Array.isArray(response.body.data)).toBe(true); }); }); ``` ### 3.2 前端测试工具 #### 3.2.1 Vitest 配置 ```typescript import { defineConfig } from 'vitest/config' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [vue()], test: { environment: 'jsdom', coverage: { reporter: ['text', 'json', 'html'] } } }) ``` #### 3.2.2 Vue Test Utils 组件测试 ```typescript import { mount } from '@vue/test-utils' import StatusTag from '@/components/StatusTag.vue' describe('StatusTag.vue', () => { it('renders correctly', () => { const wrapper = mount(StatusTag, { props: { status: 'success', text: '正常' } }) expect(wrapper.text()).toContain('正常') expect(wrapper.classes()).toContain('status-success') }) }) ``` ### 3.3 小程序测试工具 #### 3.3.1 uni-app 测试配置 ```typescript // jest.config.ts export default { preset: 'ts-jest', testEnvironment: 'jsdom', moduleNameMapping: { '^@/(.*)$': '/src/$1' }, transform: { '^.+\\.vue$': '@vue/vue3-jest' } } ``` ## 4. 测试用例设计 ### 4.1 功能测试用例 #### 4.1.1 用户认证测试 ```javascript describe('用户认证', () => { test('正确的用户名密码应该登录成功', async () => { const loginData = { username: 'testuser', password: 'testpass123' }; const response = await request(app) .post('/api/auth/login') .send(loginData) .expect(200); expect(response.body).toHaveProperty('token'); expect(response.body.user.username).toBe('testuser'); }); test('错误的密码应该返回401', async () => { const loginData = { username: 'testuser', password: 'wrongpass' }; await request(app) .post('/api/auth/login') .send(loginData) .expect(401); }); }); ``` #### 4.1.2 数据CRUD测试 ```javascript describe('养殖场管理', () => { let farmId; test('创建养殖场', async () => { const farmData = { name: '测试养殖场', location: '宁夏银川', type: 'cattle' }; const response = await request(app) .post('/api/farms') .send(farmData) .expect(201); farmId = response.body.data.id; expect(response.body.data.name).toBe('测试养殖场'); }); test('获取养殖场列表', async () => { const response = await request(app) .get('/api/farms') .expect(200); expect(Array.isArray(response.body.data)).toBe(true); expect(response.body.data.length).toBeGreaterThan(0); }); test('更新养殖场信息', async () => { const updateData = { name: '更新后的养殖场' }; const response = await request(app) .put(`/api/farms/${farmId}`) .send(updateData) .expect(200); expect(response.body.data.name).toBe('更新后的养殖场'); }); test('删除养殖场', async () => { await request(app) .delete(`/api/farms/${farmId}`) .expect(204); }); }); ``` ### 4.2 性能测试用例 #### 4.2.1 响应时间测试 ```javascript describe('性能测试', () => { test('API响应时间应小于500ms', async () => { const startTime = Date.now(); await request(app) .get('/api/farms') .expect(200); const responseTime = Date.now() - startTime; expect(responseTime).toBeLessThan(500); }); test('并发请求处理', async () => { const promises = []; for (let i = 0; i < 10; i++) { promises.push( request(app) .get('/api/farms') .expect(200) ); } const results = await Promise.all(promises); expect(results.length).toBe(10); }); }); ``` ### 4.3 安全测试用例 #### 4.3.1 输入验证测试 ```javascript describe('安全测试', () => { test('SQL注入防护', async () => { const maliciousInput = { name: "'; DROP TABLE farms; --" }; await request(app) .post('/api/farms') .send(maliciousInput) .expect(400); }); test('XSS防护', async () => { const xssInput = { name: '' }; const response = await request(app) .post('/api/farms') .send(xssInput) .expect(201); expect(response.body.data.name).not.toContain('