测试用例及黑盒测试方法
一、测试用例
1.1 基本要素
测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等4个主要要素。
1.1.1 测试环境
- 定义:测试执行所需的软硬件配置、网络条件、依赖服务等。
- 示例:
- Web 端:
Chrome 浏览器 v115 + Windows 11 + 网络带宽 100Mbps
- 移动端:
iPhone 14 Pro (iOS 16.5) + 4G 网络
- 服务端:
CentOS 7.9 + JDK 11 + MySQL 8.0
- Web 端:
- 关键点:
- 明确区分测试环境类型(开发环境、测试环境、预发布环境)。
- 记录第三方依赖(如支付接口的沙箱环境)。
1.1.2 操作步骤
-
定义:测试执行的详细流程,需清晰、无歧义,确保不同测试人员执行结果一致。
-
示例:
1. 打开应用,点击【登录】按钮。 2. 输入用户名 `test_user` 和密码 `Test@123`。 3. 勾选【记住密码】,点击【提交】。
-
关键点:
- 步骤编号化,避免复杂长句。
- 包含前置条件(如“已注册账号”)和后置操作(如“清理测试数据”)。
1.1.3 测试数据
-
定义:测试过程中使用的输入数据,需覆盖有效、无效、边界值等场景。
-
示例:
测试场景 测试数据 有效用户名 user_123
(长度 8)无效用户名 admin#
(含特殊字符)边界值用户名 a
(长度 1) -
关键点:
- 数据需独立维护(如通过 CSV 文件或数据库管理),便于复用和维护。
- 敏感数据脱敏处理(如密码用
****
替代明文)。
1.1.4 预期结果
- 定义:每个步骤执行后系统应有的正确响应,需唯一且可验证。
- 示例:
- 界面响应:
跳转至首页,显示欢迎语“Hello, test_user”
。 - 数据验证:
数据库的 user 表中新增一条状态为“激活”的记录
。 - 性能指标:
接口响应时间 ≤ 500ms
。
- 界面响应:
- 关键点:
- 避免模糊描述(如“系统正常运行”)。
- 结合自动化校验点(如断言数据库字段值)。
1.2 评价标准
1.2.1 用例表达清晰,无二义性
- 问题案例:
输入错误密码,检查系统是否提示错误
。 - 改进后:
输入密码“123”,点击登录,页面弹出提示框“密码长度需为6-20位”
。 - 关键点:
- 使用具体数值而非“错误值”等模糊描述。
- 明确界面元素名称(如按钮 ID 或文案)。
1.2.2 用例可操作性强
-
反例:
测试支付功能是否能正常扣款
(缺少步骤和验证点)。 -
正例:
1. 在订单页选择【支付宝支付】,点击【立即付款】。 2. 在支付宝沙箱环境输入账号 `test@alipay.com` 和密码 `123456`。 3. 预期结果:- 页面跳转至“支付成功”页。- 订单状态更新为“已支付”。- 支付宝账单中显示扣款金额 100 元。
1.2.3 输入与输出明确
- 常见问题:一条用例包含多个预期结果(如“登录成功并跳转首页”)。
- 改进方案:
- 拆分用例:
TC-001 验证登录成功
+TC-002 验证登录后跳转逻辑
。 - 使用自动化脚本分离校验点。
- 拆分用例:
1.2.4 用例可维护性好
- 实践建议:
- 模块化设计:按功能模块管理用例(如“登录模块”、“支付模块”)。
- 参数化数据:将易变数据(如 URL、账号)提取为配置文件。
- 版本关联:用例与需求 ID 或用户故事绑定,便于变更追踪。
1.2.5 需求覆盖率高
-
实现方法:
-
需求拆解:将用户需求转化为功能点(如“支持用户名登录”)。
-
映射矩阵:建立需求-用例追踪表,确保每个需求有对应测试用例。
需求 ID 需求描述 关联用例 覆盖类型 REQ-001 用户名长度为6-15 TC-001 ~ TC-005 功能+边界值
-
1.3 好处
测试用例是自动化测试的基础
1.3.1 提高测试效率
- 新版本迭代时,通过历史用例快速执行回归测试,减少漏测风险。
- 利用用例步骤直接生成自动化脚本(如 Selenium 或 Postman 集合)。
1.3.2 促进团队协作
- 开发人员参考测试用例理解需求验收标准。
- 新人通过用例快速熟悉系统功能。
1.3.3 降低沟通成本
- 缺陷报告中引用用例 ID,精准定位问题场景(如“TC-005 中实际结果与预期不符”)。
二、测试用例的设计方法
2.1 基于需求设计测试用例
2.1.1 功能需求测试分析
需求规格说明书、UI设计稿、测试人员经验
1. 业务流程测试设计:
-
步骤:
- 根据需求规格说明书绘制流程图(如泳道图、活动图)。
- 识别关键节点(如提交订单、支付、退款)。
- 覆盖正向流程和异常分支(如库存不足、支付超时)。
-
示例(电商下单流程):
正向流程:浏览商品 → 加入购物车 → 填写地址 → 支付 → 订单完成 异常分支: - 支付失败 → 订单状态置为“待支付” - 地址未填写 → 弹窗提示“请填写收货地址”
2. UI测试设计要点:
- 布局验证:
- 控件对齐方式(如左对齐、居中)。
- 响应式设计(不同屏幕分辨率下的显示效果)。
- 交互细节:
- 焦点跳转逻辑(如按 Tab 键切换输入框顺序)。
- 错误提示的即时性和明确性(如实时校验密码强度)。
3. 用户体验(易用性)测试:
- 测试点:
- 快捷键支持(如 Ctrl+C/V 复制粘贴)。
- 页面加载时的加载动画(避免用户误以为卡顿)。
2.1.2 非功能需求测试分析
1. 兼容性测试:
- 浏览器兼容性:
- 内核差异:Chrome(Blink)、Firefox(Gecko)、Safari(WebKit)。
- 测试工具:BrowserStack、Selenium Grid。
- 移动端兼容性:
- 分辨率适配:iPhone 14 Pro Max(2796×1290) vs. 折叠屏(2208×1768)。
- 操作系统版本:Android 13 权限控制 vs. iOS 16 隐私标签。
2. 性能测试(补充指标):
- 前端性能:
- 首屏加载时间 ≤ 2秒(Web 端)。
- FPS(帧率) ≥ 60(移动端动画流畅度)。
- 后端性能:
- 接口 99% 请求响应时间 ≤ 1秒(P99 指标)。
- 每秒事务数(TPS) ≥ 1000(高并发场景)。
3. 安全测试(渗透测试补充):
- OWASP Top 10 覆盖:
- SQL 注入:
' OR 1=1 --
攻击防御。 - XSS 攻击:输入
<script>alert(1)</script>
检测过滤机制。
- SQL 注入:
- 敏感数据保护:
- 日志中禁止记录明文密码。
- HTTPS 传输加密(TLS 1.3 协议)。
4. 网络测试(弱网模拟工具):
- 工具:Charles 网络限速、Android Emulator 网络模拟。
- 测试场景:
- 100% 丢包率下,检查本地缓存是否生效。
- 2G 网络(50kbps)下,图片懒加载功能是否正常。
2.2 黑盒设计方法
2.2.1 等价类
又分成有效等价类和无效等价类。
依据需求将输入(特殊情况下会考虑输出)划分为若干个等价类,从等价类中选出一个测试用例,如果这个测试用例测试通过,则认为所代表的等价类测试通过,这样就可以用较少的测试用例达到尽量多的功能覆盖,解决了不能穷举测试的问题。
有效等价类:对于程序的规格说明书是合理的、有意义的输入数据构成的集合,利用有效等价类验证程序是否实现了规格说明中所规定的功能和性能。
无效等价类:根据需求说明书,不满足需求的集合。
1. 等价类划分的完整步骤
步骤 | 说明 | 示例(用户名规则:6-15位字母,不区分大小写) |
---|---|---|
1. 分析需求,确定输入域 | 明确输入参数的类型、范围和约束条件。 | 输入类型:字符串; 长度范围:6-15位; 字符类型:仅A-Z/a-z。 |
2. 划分有效等价类 | 识别符合需求的有效输入组合。 | - 有效字符:A-Z 或a-z - 有效长度:6位、10位、15位。 |
3. 划分无效等价类 | 识别所有可能违反需求的无效输入类型。 | - 无效字符:数字、特殊字符、空格、中文等 - 无效长度:5位、16位、空字符串。 |
4. 设计测试用例 | 每个等价类选取至少1个代表值生成用例。 | 有效用例:"TestUser" (8位字母) 无效用例: "User123" (含数字)、"Admin#" (含特殊字符)。 |
5. 补充边界值用例 | 结合边界值分析法覆盖临界场景。 | 长度边界:"Abcdef" (6位)、"A...z" (15位)。 |
2. 常见错误与改进方案
错误类型 | 问题案例 | 改进方案 |
---|---|---|
等价类遗漏 | 仅测试字母和数字,忽略特殊字符。 | 穷举所有无效类型:数字、符号、空格、Emoji、SQL语句等。 |
用例冗余 | 对同一等价类多次测试(如测试多个特殊字符)。 | 每个等价类仅保留1个典型用例(如 "User@" 代表所有特殊字符)。 |
组合缺失 | 未覆盖等价类组合(如无效字符+超长长度)。 | 结合正交法或判定表设计组合用例(如 "Admin@1234567890" 含特殊字符且超长)。 |
3. 等价类组合策略
场景:注册功能需验证用户名和密码规则
- 用户名规则:6-15位字母。
- 密码规则:8-20位,必须包含字母和数字。
字段 | 有效等价类 | 无效等价类 |
---|---|---|
用户名 | "TestUser" | "User123" (数字) |
密码 | "Pass1234" | "password" (无数字) |
组合测试设计:
- 有效组合:有效用户名 + 有效密码 → 注册成功。
- 无效组合:
- 无效用户名 + 有效密码 → 提示用户名错误。
- 有效用户名 + 无效密码 → 提示密码格式错误。
4. 输出等价类设计(扩展场景)
需求:根据分数返回评级(A: ≥90,B: 70-89,C: <70)
输出等价类 | 分数范围 | 测试数据 | 预期结果 |
---|---|---|---|
有效输出A | 90-100 | 95 | 评级A |
有效输出B | 70-89 | 85 | 评级B |
有效输出C | 0-69 | 60 | 评级C |
无效输出 | <0或>100 | -5, 105 | 提示错误 |
5. 实战案例:邮箱格式验证
需求:邮箱格式需满足 xxx@yyy.zzz
,其中:
xxx
:1-64位字母/数字/点/下划线。yyy
:1-255位字母/数字/连字符。zzz
:2-6位字母。
输入域 | 有效等价类 | 无效等价类 | 测试用例示例 |
---|---|---|---|
用户名 | "user.name_123" | "user@#" (含非法字符) | "test@example.com" |
域名 | "example-123" | "exa_mple" (含下划线) | "user@exa_mple.com" |
顶级域名 | ".com" (2位) | ".a" (1位)、".abcdefg" (7位) | "user@domain.a" |
2.2.2 边界值
通常边界值分析法是作为对等价类划分法的补充。
1. 边界值分析的核心概念
概念 | 定义 | 示例(用户名长度规则:6-15位) |
---|---|---|
上点 | 输入域的边界值(即有效与无效的分界点) | 6位、15位 |
内点 | 输入域内任意一个有效值(通常取中间值) | 10位 |
离点 | 距离上点最近且不属于有效范围的无效值(闭区间与开区间规则不同) | 5位(闭区间左离点)、16位(闭区间右离点) |
2. 不同区间类型的离点选择规则
区间类型 | 上点选择 | 离点选择规则(以区间 [a, b] 为例) | 示例(取值范围) | 离点计算 |
---|---|---|---|---|
闭区间 [a, b] | a、b | 离点为 a-1 和 b+1,域外 | [6, 15] | 5、16 |
开区间 (a, b) | a、b | 离点为 a+1 和 b-1,域内 | (6, 15) | 7、14 |
半开半闭区间 | 根据开闭方向调整 | 如 [a, b):离点为 a-1 和 b-1 | [6, 15) | 5、14 |
3. 边界值分析的完整步骤
步骤 | 操作说明 | 用户名长度示例([6, 15]位) |
---|---|---|
1. 确定输入域边界 | 明确需求中数值、长度、时间等范围的上下限。 | 最小长度6位,最大长度15位 |
2. 识别上点、内点、离点 | 按区间类型计算三类点。 | 上点:6、15;内点:10;离点:5、16 |
3. 设计测试用例 | 每个边界点至少生成1个用例,覆盖有效和无效场景。 | 有效用例:6位、10位、15位;无效用例:5位、16位 |
4. 扩展多字段组合 | 若存在多个输入字段,需覆盖边界值的组合(如用户名长度+字符类型边界)。 | 用例:6位纯字母(有效) vs. 6位含数字(无效) |
4. 复杂场景下的边界值设计
场景1:时间范围边界(跨天/跨月)
- 需求:允许选择2023-01-01至2023-12-31的日期。
- 边界用例:
- 上点:2023-01-01、2023-12-31
- 离点:2022-12-31、2024-01-01
场景2:多字段联合边界(折扣计算)
- 需求:订单金额 ≥100元且商品数量 ≥3件,可享受9折。
- 边界用例:
- 金额99元 + 数量3件 → 无折扣
- 金额100元 + 数量2件 → 无折扣
- 金额100元 + 数量3件 → 折扣生效
5. 常见错误与改进方案
错误类型 | 问题案例 | 改进方案 |
---|---|---|
遗漏边界类型 | 仅测试数值边界,忽略字符串空值。 | 穷举所有边界类型(空值、超长文本、特殊字符)。 |
错误计算离点 | 对开区间 (6,15) 测试5位和16位。 | 严格按区间类型选择离点(开区间离点为6和15)。 |
忽略多字段组合边界 | 单独测试长度和字符,未组合验证。 | 使用正交法生成组合用例(如6位+特殊字符)。 |
6. 边界值分析工具
工具示例:Boundary Value Checker
-
输入规则:定义字段类型、范围、步长(如数值型字段范围[1-100],步长1)。
-
自动生成:工具输出所有上点、离点和内点用例。
-
输出示例:
字段 测试数据 类型 年龄 0 离点 年龄 1 上点 年龄 50 内点 年龄 100 上点 年龄 101 离点
7. 边界值与等价类法的结合策略
-
先用等价类划分输入域:将用户名输入分为有效字母、无效字符等等价类。
-
对每个等价类应用边界值:在字符类型有效等价类中,测试长度边界(如6位字母、15位字母)。
-
生成综合用例:
等价类 边界值用例 预期结果 有效字母 6位字母(“Abcdef”) 注册成功 无效特殊字符 6位含@符号(“User@@”) 提示“含非法字符”
8. 边界值分析法局限性
- 不覆盖组合缺陷:无法发现多个字段非边界值组合引发的问题(需结合判定表)。
- 不适用于连续型数据:如浮点数边界(需额外考虑精度问题,如0.999999≈1.0)。
2.2.3 因果图/判定表
因果图与判定表是处理 多条件逻辑组合 场景的核心方法,尤其适用于规则复杂的业务逻辑(如促销活动、权限控制)。
1. 因果图/判定表完整流程
步骤1:识别输入(因)与输出(果)
- 输入(条件桩):所有可能影响结果的独立条件。
- 输出(动作桩):系统应有的响应或动作。
示例(618购物优惠规则):“618购物活动,订单已提交,订单合计金额大于300元或有红包,则优惠”。
- 输入:订单已提交、金额>300元、有红包。
- 输出:享受优惠。
步骤2:构建因果图(逻辑关系可视化)
- 基本逻辑符号:
- 恒等(→):条件为真 → 结果为真
- 非(¬):条件为假 → 结果为真
- 或(∨):任一条件为真 → 结果为真
- 与(∧):所有条件为真 → 结果为真
618购物优惠因果图:
订单已提交 ∧ (金额>300 ∨ 有红包) → 享受优惠
步骤3:转换为判定表(穷举所有规则)
- 条件组合数:
n
个条件 →2^n
种组合(需合并无效场景)。 - 618购物案例判定表:
条件桩 | 规则1 | 规则2 | 规则3 | 规则4 | 规则5 | 规则6 | 规则7 | 规则8 |
---|---|---|---|---|---|---|---|---|
订单已提交 | Y | Y | Y | Y | N | N | N | N |
金额 >300元 | Y | Y | N | N | Y | Y | N | N |
有红包 | Y | N | Y | N | Y | N | Y | N |
动作桩 | ||||||||
享受优惠 | Y | Y | Y | N | N | N | N | N |
合并简化规则:
- 规则1-3:订单已提交且(金额>300 或 有红包)→ 享受优惠。
- 规则4-8:订单未提交 或 金额≤300且无红包 → 不享受优惠。
步骤4:生成测试用例
用例ID | 订单状态 | 金额 | 红包 | 预期结果 |
---|---|---|---|---|
TC1 | 已提交 | 400元 | 有 | 享受优惠 |
TC2 | 已提交 | 400元 | 无 | 享受优惠 |
TC3 | 已提交 | 200元 | 有 | 享受优惠 |
TC4 | 已提交 | 200元 | 无 | 不享受优惠 |
TC5 | 未提交 | 400元 | 有 | 不享受优惠 |
2. 判定表设计技巧
技巧1:条件优先级与默认值
- 条件优先级:某些条件可能覆盖其他条件(如“管理员权限”优先于普通用户)。
- 默认值标记:用
-
表示条件无关(减少冗余组合)。
示例(权限系统):
条件桩 | 规则1 | 规则2 | 规则3 |
---|---|---|---|
是管理员 | Y | N | N |
有访问权限 | - | Y | N |
动作桩 | |||
允许访问 | Y | Y | N |
技巧2:合并重复动作
-
动作合并:不同条件组合导致相同结果时,合并规则。
示例(合并购物规则4-8):条件桩 有效规则 无效规则 订单已提交 Y N 金额>300 或 有红包 Y N 享受优惠 Y N
技巧3:处理多结果场景
示例(登录功能):
条件桩 | 规则1 | 规则2 | 规则3 |
---|---|---|---|
用户名有效 | Y | Y | N |
密码有效 | Y | N | - |
动作桩 | |||
跳转首页 | Y | N | N |
提示密码错误 | N | Y | N |
提示用户名不存在 | N | N | Y |
3. 常见错误与改进方案
错误类型 | 问题案例 | 改进方案 |
---|---|---|
条件遗漏 | 未考虑“订单已提交”状态导致错误优惠。 | 需求分析阶段识别所有显性和隐性条件。 |
动作歧义 | 多个动作同时触发但未定义优先级(如弹窗冲突)。 | 明确动作执行顺序(如先校验再提交)。 |
规则冗余 | 重复测试相同逻辑组合(如规则1和规则2完全相同)。 | 合并相同输出的规则。 |
4. 工具辅助设计
- 在线判定表生成器:
输入条件和动作,自动生成所有组合(如 Decision Table Tester)。 - Excel 公式:
使用条件公式(如IF(AND(A2="Y", OR(B2="Y", C2="Y")), "Y", "N")
)快速填充判定表。
2.2.4 正交表
正交排列法(Orthogonal Array Testing)是高效覆盖多参数组合的核心技术,特别适合参数多但组合爆炸的场景。
以下以用户注册功能为案例进行讲解,考虑以下5个因素(用户名、邮箱、密码、确认密码、验证码)
1. 正交表核心概念
术语 | 定义 | 示例(用户注册功能) |
---|---|---|
因素 | 测试中需要验证的独立变量 | 用户名、密码、验证码 |
水平 | 每个因素可能的取值 | 填写/不填写 |
正交表 | 满足"任意两列组合均衡"的特殊矩阵 | L 4 ( 2 3 ) L_4(2^3) L4(23) |
行数(N) | 测试用例数量(最少组合数) | 4行 |
因素数© | 变量个数 | 5(用户名、邮箱、密码、确认密码、验证码) |
水平数(T) | 每个变量的取值数量 | 2(填写/不填写) |
2. 正交表表示法
- 通用格式: L N ( T C ) L_N(T^C) LN(TC)
3. 正交表设计五步法
步骤1:需求分析 → 提取因素和水平
因素:- 用户名:填写/不填写- 邮箱:填写/不填写- 密码:填写/不填写- 确认密码:填写/不填写- 验证码:填写/不填写
步骤2:选择正交表
-
选择原则:
-
正交表列数 ≥ 实际因素数 正交表必须能容纳所有因素 正交表水平数 ≥ 因素水平数 水平数需匹配或可映射 最小化行数 在满足组合均衡前提下选最小N -
对于 C C C 个因素 且每个因素有 T T T 个水平 的场景,完整约束为
-
{ N ≥ 1 + C ( T − 1 ) (最小行数约束) N ≡ 0 ( m o d λ ) (组合均衡约束) \begin{cases} N \geq 1 + C(T-1) & \text{(最小行数约束)} \\ N \equiv 0 \pmod{\lambda} & \text{(组合均衡约束)} \end{cases} {N≥1+C(T−1)N≡0(modλ)(最小行数约束)(组合均衡约束)
-
λ \lambda λ 为均衡系数:二水平时 λ = 4 \lambda=4 λ=4
-
-
本案例: T = 2 , C = 5 T=2,\ C=5 T=2, C=5
- 1 + 5 × ( 2 − 1 ) = 6 1 + 5×(2-1) = 6 1+5×(2−1)=6
- 但 6 ≢ 0 ( m o d 4 ) 6 \not\equiv 0 \pmod{4} 6≡0(mod4) → 无解
- 最小满足 N ≡ 0 ( m o d 4 ) N \equiv 0 \pmod{4} N≡0(mod4) 且 N > 6 N>6 N>6 → N = 8 N=8 N=8
✅ 正确结论: L 8 ( 2 7 ) L_8(2^7) L8(27) 是数学约束下的唯一可行解
步骤3:因素映射到列
列号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
因素 | 姓名 | 邮箱 | 密码 | 确认 | 验证 | (空) | (空) |
步骤4:填充水平值
用例 | 姓名 | 邮箱 | 密码 | 确认密码 | 验证码 |
---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 1 |
2 | 1 | 1 | 1 | 2 | 2 |
3 | 1 | 2 | 2 | 1 | 2 |
4 | 1 | 2 | 2 | 2 | 1 |
5 | 2 | 1 | 2 | 2 | 1 |
6 | 2 | 1 | 2 | 1 | 2 |
7 | 2 | 2 | 1 | 2 | 2 |
8 | 2 | 2 | 1 | 1 | 1 |
- 水平映射:1:填写;2:未填写
步骤5:转换为可执行用例
用例 | 姓名 | 邮箱 | 密码 | 确认密码 | 验证码 | 预期结果 |
---|---|---|---|---|---|---|
TC1 | 填写 | 填写 | 填写 | 填写 | 填写 | 注册成功 |
TC2 | 填写 | 填写 | 填写 | 不填写 | 不填写 | 提示"确认密码未填写" |
TC3 | 填写 | 不填写 | 不填写 | 填写 | 不填写 | 提示"邮箱未填写" |
… | … | … | … | … | … | … |
4. 正交法优势与局限
优势 | 局限 |
---|---|
✅ 用例数从 2 5 = 32 2^5=32 25=32减至8(-75%) | ❌ 不覆盖三三组合缺陷 |
✅ 保证所有两两组合被覆盖 | ❌ 水平数不同时需特殊处理 |
✅ 适合配置项、兼容性测试等场景 | ❌ 业务逻辑复杂时需结合判定表 |
2.3 万能测试用例模板
- 功能测试
- 核心流程验证: 登录/支付/提交等关键路径
- 异常处理: 空输入、重复提交、非法操作
- 数据一致性: DB字段校验、状态同步
- 边界值覆盖: 数值、长度、时间临界点
- 性能测试
- 响应时间: 单操作≤1s,复杂操作≤3s
- 并发能力: 最大用户数、TPS阈值
- 资源消耗: CPU≤80%、内存≤90%
- 稳定性: 持续运行12小时无故障
- 界面测试
- 布局规范: 间距对齐、字体统一
- 交互反馈: 加载动画、错误提示
- 响应式: 手机/平板/PC自适应
- 视觉验收: 颜色对比度≥4.5:1
- 兼容性测试
- 浏览器: Chrome/Firefox/Safari/Edge
- 操作系统: Win11/macOS Ventura/Ubuntu 22.04
- 移动端: iOS 16+/Android 13+主流机型
- 分辨率: 720P/1080P/2K/4K/折叠屏
- 易用性测试
- 操作路径: 核心功能≤3步完成
- 指引设计: 新手指引/空白页提示
- 快捷键: Ctrl+S保存/Enter提交
- 文案清晰: 错误提示含解决方案
- 网络测试
- 弱网模拟: 3G(500kbps)/高延迟(500ms),比如高延迟+低带宽 → 模拟偏远地区;低延迟+高丢包 → 模拟地铁场景
- 断网恢复: 自动重连/数据同步
- 协议验证: HTTPS/TLS1.3加密
- 流量优化: 图片懒加载/API合并
- 安全测试
- 注入攻击: SQL/XSS/命令注入
- 权限控制: 越权访问/垂直权限
- 数据安全: 密码加密/日志脱敏
- 漏洞扫描: OWASP Top 10覆盖
相关文章:
测试用例及黑盒测试方法
一、测试用例 1.1 基本要素 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等4个主要要素。 1.1.1 测试环境 定义:测试执行所需的软硬件…...
CentOS 7 环境下部署 LAMP
在 CentOS 7 环境下部署 LAMP(Linux Apache MySQL 5.7 PHP 7.4) 环境的详细步骤如下: 1. 系统准备 1.1 更新系统 sudo yum update -y 1.2 安装依赖 sudo yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel e…...

vscode实用配置
前端开发安装插件: 1.可以更好看的显示文件图标 2.用户快速打开文件 使用步骤:在html文件下右键点击 open with live server 即可 刷力扣: 安装这个插件 还需要安装node.js即可...

React 项目中封装 Excel 导入导出组件:技术分享与实践
文章目录 前言一、为什么需要封装 Excel 组件?二、技术选型三、核心实现1. 安装依赖2. 封装Excel导出3. 封装导入组件 (UploadExcel) 总结 前言 在 React 项目中,处理 Excel 文件的导入和导出是常见的业务需求。无论是导出报表数…...
【PhysUnits】15.1 引入P1后的加一特质(add1.rs)
一、源码 代码实现了类型系统中的"加一"操作(Add1 trait),用于在编译期进行数字的增量计算。 //! 加一操作特质实现 / Increment operation trait implementation //! //! 说明: //! 1. Z0、P1,、N1 1࿰…...

【2025CCF中国开源大会】RISC-V 开源生态的挑战与机遇分论坛重磅来袭!共探开源芯片未来
点击蓝字 关注我们 CCF Opensource Development Committee 开源浪潮正从软件席卷硬件领域,RISC-V作为全球瞩目的开源芯片架构,正在重塑计算生态的版图!相较于成熟的x86与ARM,RISC-V生态虽处爆发初期,却蕴藏着无限可能。…...

python完成批量复制Excel文件并根据另一个Excel文件中的名称重命名
import openpyxl import shutil import os # 原始文件路径 original_file "C:/Users/Administrator/Desktop/事业联考面试名单/郑州.xlsx" # 读取包含名称的Excel文件 # 修改为您的文件名 wb openpyxl.load_workbook( "C:/Users/Administrator/Desktop/事…...

Vue-2-前端框架Vue基础入门之二
文章目录 1 计算属性1.1 计算属性简介1.2 计算属性示例 2 侦听器2.1 简单的侦听器2.2 深度监听2.3 监听对象单个属性 3 vue-cli3.1 工程化的Vue项目3.2 Vue项目的运行流程 4 vue组件4.1 Vue组件的三个部分4.1.1 template4.1.2 script4.1.3 style 4.2 组件之间的关系4.2.1 使用组…...

CPT208 Human-Centric Computing 人机交互 Pt.7 交互和交互界面
文章目录 1. 界面隐喻(Interface metaphors)1.1 界面隐喻的应用方式1.2 界面隐喻的优缺点 2. 交互类型2.1 Instructing(指令式交互)2.2 Conversing(对话式交互)2.3 Manipulating(操作式交互&…...
ubuntu20.04.5-arm64版安装robotjs
ubuntu20.04.5arm上使用robotjs #ssh,可选 sudo apt update sudo apt install openssh-server sudo systemctl status ssh sudo systemctl enable ssh sudo systemctl enable --now ssh #防火墙相关,可选 sudo ufw allow ssh sudo ufw allow 2222/tc…...

[网页五子棋][匹配模块]前后端交互接口(消息推送机制)、客户端开发(匹配页面、匹配功能)
让多个用户,在游戏大厅中能够进行匹配,系统会把实力相近的两个玩家凑成一桌,进行对战 约定前后端交互接口 消息推送机制 匹配这样的功能,也是依赖消息推送机制的 玩家 1 点击开始匹配按钮,就会告诉服务器࿱…...

【数据分析】Matplotlib+Pandas+Seaborn绘图
【数据分析】MatplotlibPandasSeaborn绘图 (一)Matplotlib绘图1.1 matplotlib绘图方式1: 状态接口1.2 matplotlib绘图方式2: 面向对象1.3 通过安斯科姆数据集, 说明可视化的重要性1.4 MatPlotlib绘图-单变量-直方图1.5 MatPlotlib绘图-双变量-散点图1.6 …...

NLP学习路线图(十五):TF-IDF(词频-逆文档频率)
在自然语言处理(NLP)的浩瀚宇宙中,TF-IDF(词频-逆文档频率) 犹如一颗恒星,虽古老却依然璀璨。当ChatGPT、BERT等大模型光芒四射时,TF-IDF作为传统方法的代表,其简洁性、高效性与可解…...

[Redis] Redis命令在Pycharm中的使用
初次学习,如有错误还请指正 目录 String命令 Hash命令 List命令 set命令 SortedSet命令 连接pycharm的过程见:[Redis] 在Linux中安装Redis并连接桌面客户端或Pycharm-CSDN博客 redis命令的使用见:[Redis] Redis命令(1…...

openpnp - 给M4x0.7mm的直油嘴加油的工具选择
文章目录 openpnp - 给M4x0.7mm的直油嘴加油的工具选择概述如果换上带卡口的M4x0.7直油嘴END openpnp - 给M4x0.7mm的直油嘴加油的工具选择 概述 X导轨用了一个HG15的滑块 滑块上的注油口的黄油嘴是M4x0.7mm的直油嘴。 外表面是6边形的柱子,没有可以卡住加油嘴工…...
Azure Devops 系列之三- vscode部署function app
Azure Function App 是 Microsoft Azure 提供的一项无服务器计算服务,它允许您运行事件驱动的应用程序,而无需管理底层基础架构。它使您能够执行代码来响应各种事件,例如 HTTP 请求、队列消息、计时器以及许多其他类型的触发器。 Azure Function App 的主要功能: 无服务器…...

EasyExcel复杂Excel导出
效果图展示 1、引入依赖 <!-- easyExcel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.2</version> </dependency>2、实体类 import com.alibaba.excel.annotatio…...

1,QT的编译教程
目录 整体流程: 1,新建project文件 2,编写源代码 3,打开QT的命令行窗口 4,生成工程文件(QT_demo.pro) 5,生成Make file 6,编译工程 7,运行编译好的可执行文件 整体流程: 1,新建project文件 新建文本文件,后缀改为.cpp 2,编写源代码...
C++基础算法————深度优先搜索(DFS)
一、DFS算法原理 (一)基本思想 深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。它从一个起始节点开始,沿着一个方向尽可能深入地探索,直到无法继续为止,然后回溯到上一个节点,继续探索其他方向。这一过程可以用递归或栈结构来实现。 (二…...
React 第五十节 Router 中useNavigationType的使用详细介绍
前言 useNavigationType 是 React Router v6 提供的一个钩子,用于确定用户如何导航到当前页面。 它提供了关于导航类型的洞察,有助于优化用户体验和实现特定导航行为。 一、useNavigationType 核心用途 1.1、检测导航方式: 判断用户是通过…...

【笔记】在 MSYS2(MINGW64)中安装 Python 工具链的记录
#工作记录 📌 安装背景 操作系统:MSYS2 MINGW64当前时间:2025年6月1日Python 版本:3.12(默认通过 pacman 安装)目标工具链: pipxnumpypipsetuptoolswheel 🛠️ 安装过程与结果记录…...
npm install命令都做了哪些事情
npm install(或其简写 npm i)是 Node.js 项目中最重要的命令之一,它负责安装项目所需的所有依赖项。下面我将详细解释这个命令的完整执行过程和底层机制,让你彻底理解它背后的工作原理。 一、npm install 的完整工作流程 1. 依赖…...

Linux 学习-模拟实现【简易版bash】
1、bash本质 在模拟实现前,先得了解 bash 的本质 bash 也是一个进程,并且是不断运行中的进程 证明:常显示的命令输入提示符就是 bash 不断打印输出的结果 输入指令后,bash 会创建子进程,并进行程序替换 证明&#x…...

【中国・珠海】2025 物联网与边缘计算国际研讨会(IoTEC2025)盛大来袭!
2025 物联网与边缘计算国际研讨会(IoTEC2025)盛大来袭! 科技浪潮奔涌向前,物联网与边缘计算已成为驱动各行业变革的核心力量。在此背景下,2025 物联网与边缘计算国际研讨会(IoTEC2025)即将震撼…...
企业级安全实践:SSL/TLS 加密与权限管理(二)
案例分析:成功与失败的经验教训 成功案例分析 以一家知名电商企业 ABC 为例,该企业每天处理数百万笔订单,涉及大量用户的个人信息、支付信息和商品数据。在网络安全建设方面,ABC 电商高度重视 SSL/TLS 加密与权限管理。 在 SSL…...
Java面试:从Spring Boot到分布式系统的技术探讨
场景一:电商平台的订单处理 面试官: “谢先生,假设我们在一个电商平台工作,你将如何使用Spring Boot构建一个订单处理服务?” 谢飞机: “这个简单,我会使用Spring Boot快速启动项目࿰…...
NodeJS全栈开发面试题讲解——P7 DevOps 与部署和跨域等
✅ 7.1 如何部署 Node.js 项目到生产环境?用过哪些工具? 面试官您好,我部署 Node.js 项目通常分为 构建 → 上传 → 启动服务 三步,常用工具包括 PM2、Nginx、Docker、Git Hooks、CI/CD 工具。 🛠️ 主要部署步骤&…...

中国高分辨率高质量地面CO数据集(2013-2023)
时间分辨率:日空间分辨率:1km - 10km共享方式:开放获取数据大小:9.83 GB数据时间范围:2013-01-01 — 2023-12-31元数据更新时间:2024-08-19 数据集摘要 ChinaHighCO数据集是中国高分辨率高质量近地表空气污…...

GO——内存逃逸分析
一、可能导致逃逸的5中情况 package mainimport "fmt"func main() {f1()f2()f3()f4()f5() }type animal interface {run() }type dog struct{}func (d *dog) run() {fmt.Println("狗在跑") }// 指针、map、切片为返回值的会发生内存逃逸 func f1() (*int,…...

MinVerse 3D触觉鼠标的技术原理与创新解析
MinVerse3D触觉鼠标通过三维交互和触觉反馈技术,彻底颠覆了传统二维鼠标的操作方式。用户在操作虚拟物体时,可以真实感知表面质感、重量和阻力。这种技术不仅为数字环境注入了深度与临场感,还在3D设计、游戏开发和工程仿真等领域展现了广泛潜…...