巴青农资商城

商户管理测试用例.md 62KB

商户管理 — 测试用例

依据: 《商户管理功能需求.md》v1.9、《商户管理技术方案.md》v1.9
范围: 平台管理端 商户管理 模块(列表、入驻含 绑定经营账号、详情、编辑、认证、删除、协作接口);省市区依赖 GET /agri/region/tree(§6.8 / §9.9)
排除: C 端商城、会员模块独立 CRUD、商品/店铺/分类/订单模块的独立功能用例(订单 Facade 未建时按桩 false 测删商户正向)
环境: RuoYi v3.9.2 平台端;接口基路径 /agri/merchant;UI 默认 http://{host}/ + 农资管理菜单(以实际路由为准)


用例编号说明

前缀 类型 工具
MER-UT-xxx 单元测试 JUnit 5 + Mockito(Service/Validator/状态机)
MER-API-xxx 接口测试 Postman / Apifox / REST Assured + 平台 Token
MER-UI-xxx 界面测试 Playwright(Chromium/Chrome)

一、单元测试

MER-UT-001 个人主体 biz_complete 未补经营信息为 0

要素 内容
测试模块 商户管理
测试项 经营完整度计算
测试类型 单元测试
测试工具 JUnit
测试目的 验证仅主体入驻时 biz_complete=0
前置条件 构造个人商户实体,经营字段均为空
测试步骤 调用 BizCompleteEvaluator.evaluate(merchant)
预期结果 返回 0pendingBizFields 含商户名称、客服电话等个人必填项

MER-UT-002 个人主体经营信息齐全 biz_complete 为 1

要素 内容
测试模块 商户管理
测试项 经营完整度计算
测试类型 单元测试
测试工具 JUnit
测试目的 验证 §9.2 个人必填项齐全时完整
前置条件 个人商户,§9.2 个人字段均有合法值(无营业执照/开户许可证)
测试步骤 调用完整度评估
预期结果 biz_complete=1pendingBizFields 为空

MER-UT-003 企业主体缺营业执照 biz_complete 为 0

要素 内容
测试模块 商户管理
测试项 经营完整度计算
测试类型 单元测试
测试工具 JUnit
测试目的 验证企业专属字段纳入完整判定
前置条件 企业商户,除 businessLicenseaccountPermit 外均已填
测试步骤 调用完整度评估
预期结果 biz_complete=0;待完善含「营业执照电子版」「开户许可证」

MER-UT-004 经营地址需 code+name 同时有值

要素 内容
测试模块 商户管理
测试项 bizRegion 判定
测试类型 单元测试
测试工具 JUnit
测试目的 验证 biz_region_codebiz_region_name 缺一不可
前置条件 仅填 biz_region_codebiz_region_name 为空
测试步骤 评估完整度
预期结果 biz_complete=0;待完善含「经营地址」

MER-UT-005 新增入驻写入认证正常、biz_complete=1 与认证时间

要素 内容
测试模块 商户管理
测试项 新增 Service
测试类型 单元测试
测试工具 JUnit + Mockito
测试目的 验证 R3 + R10:入驻即正常、经营完整、biz_complete=1
前置条件 Mock Mapper;合法个人主体+经营完整 DTO
测试步骤 insertMerchant(dto)(含 bindType+bindUserId 及 §9.2 全部经营字段)
预期结果 cert_status=0cert_time 非空;shop_count=0biz_complete=1;调用 accountBindService.bindAccountOnMerchantCreate

MER-UT-006 新增经营信息不完整拒绝保存

要素 内容
测试模块 商户管理
测试项 新增 Service
测试类型 单元测试
测试工具 JUnit
测试目的 验证 R10:经营信息不完整不可保存
前置条件 新增 DTO 仅主体+绑定,缺经营字段
测试步骤 调用 insertMerchant
预期结果 ServiceException;msg 含「经营信息不完整,无法保存」及缺失字段; 调用 insert

MER-UT-007 编辑忽略 merchantType 变更

要素 内容
测试模块 商户管理
测试项 编辑 Service
测试类型 单元测试
测试工具 JUnit
测试目的 验证 R4
前置条件 DB 为个人商户 merchant_type=1
测试步骤 updateMerchant 传入 merchantType=2
预期结果 库中仍为 1;UPDATE SQL 不含 merchant_type

MER-UT-008 编辑 SQL 不更新证件号与信用代码

要素 内容
测试模块 商户管理
测试项 编辑 Service
测试类型 单元测试
测试工具 JUnit
测试目的 验证 R11
前置条件 已有 id_card_no / credit_code
测试步骤 编辑传入新证件号、新信用代码
预期结果 库中原值不变

MER-UT-009 已注销商户编辑抛错

要素 内容
测试模块 商户管理
测试项 编辑前置
测试类型 单元测试
测试工具 JUnit
测试目的 验证注销不可编辑
前置条件 cert_status=2
测试步骤 调用 updateMerchant
预期结果 ServiceException,msg 含「商户已注销,不可编辑」

MER-UT-010 编辑不更新 cert_time

要素 内容
测试模块 商户管理
测试项 编辑 Service
测试类型 单元测试
测试工具 JUnit
测试目的 验证 §7.3 编辑不改认证时间
前置条件 记录原 cert_time
测试步骤 保存编辑成功
预期结果 cert_time 与原值相同

MER-UT-011 认证状态变更更新 cert_time

要素 内容
测试模块 商户管理
测试项 改认证 Service
测试类型 单元测试
测试工具 JUnit
测试目的 验证改认证刷新认证时间
前置条件 正常商户;confirm=true
测试步骤 updateCertStatus(merchantId, 1, true)
预期结果 cert_status=1cert_time 更新为当前时间

MER-UT-012 认证状态机:正常→冻结允许

要素 内容
测试模块 商户管理
测试项 状态机
测试类型 单元测试
测试工具 JUnit
测试目的 验证 §9.1 合法流转
前置条件 cert_status=0
测试步骤 canTransition(0,1)
预期结果 trueneedConfirm=true

MER-UT-013 认证状态机:注销→冻结不允许

要素 内容
测试模块 商户管理
测试项 状态机
测试类型 单元测试
测试工具 JUnit
测试目的 验证非法流转
前置条件 cert_status=2
测试步骤 canTransition(2,1)
预期结果 false

MER-UT-014 认证状态机:注销→正常允许

要素 内容
测试模块 商户管理
测试项 状态机
测试类型 单元测试
测试工具 JUnit
测试目的 验证已注销仅可恢复正常
前置条件 cert_status=2
测试步骤 canTransition(2,0)
预期结果 true

MER-UT-015 confirm=false 不改库

要素 内容
测试模块 商户管理
测试项 两步确认
测试类型 单元测试
测试工具 JUnit
测试目的 验证 §3.6 预确认不落库
前置条件 正常商户
测试步骤 updateCertStatus(id, 1, false)
预期结果 返回 needConfirm=true;DB cert_status 仍为 0

MER-UT-016 统一社会信用代码唯一校验

要素 内容
测试模块 商户管理
测试项 唯一性
测试类型 单元测试
测试工具 JUnit + Mockito
测试目的 验证 R7 企业入驻信用代码唯一
前置条件 Mapper 返回已存在同 credit_code
测试步骤 企业新增校验
预期结果 校验失败,提示「该统一社会信用代码已入驻」

MER-UT-017 商户名称编辑唯一(排除自身)

要素 内容
测试模块 商户管理
测试项 唯一性
测试类型 单元测试
测试工具 JUnit
测试目的 验证 R7 商户名称唯一
前置条件 商户 A、B 均已填不同 merchant_name
测试步骤 A 编辑改为 B 的名称
预期结果 失败,「商户名称已存在」

MER-UT-018 身份证 18 位格式校验失败

要素 内容
测试模块 商户管理
测试项 字段校验
测试类型 单元测试
测试工具 JUnit
测试目的 验证 §9.4 身份证规则
前置条件 idCardNo=123
测试步骤 JSR303/Validator 校验
预期结果 校验不通过

MER-UT-019 证件区间有效 end≥start

要素 内容
测试模块 商户管理
测试项 字段校验
测试类型 单元测试
测试工具 JUnit
测试目的 验证有效期区间合法
前置条件 idValidType=1,end<start
测试步骤 校验
预期结果 校验不通过

MER-UT-020 长期有效证件 end 可空

要素 内容
测试模块 商户管理
测试项 字段校验
测试类型 单元测试
测试工具 JUnit
测试目的 验证 idValidType=2 规则
前置条件 idValidType=2idValidEnd=null,start 有值
测试步骤 校验
预期结果 通过

MER-UT-021 删除预检:有店铺不可删

要素 内容
测试模块 商户管理
测试项 删除预检
测试类型 单元测试
测试工具 JUnit
测试目的 验证 shop_count>0 阻断
前置条件 shop_count=2cert_status=0
测试步骤 deleteCheck(merchantId)
预期结果 canDelete=false;reasons 含店铺数量相关文案

MER-UT-022 删除预检:有未完成订单不可删

要素 内容
测试模块 商户管理
测试项 删除预检
测试类型 单元测试
测试工具 JUnit + Mockito
测试目的 验证 OrderFacade 联动
前置条件 shop_count=0hasUnfinishedOrdersByMerchant=true
测试步骤 deleteCheck
预期结果 canDelete=false;reasons 含「存在未完成订单」

MER-UT-023 批量删除任一条失败整批不删

要素 内容
测试模块 商户管理
测试项 批量删除
测试类型 单元测试
测试工具 JUnit + Mockito
测试目的 验证 §9.6 整批失败
前置条件 ID 列表含可删与不可删各一
测试步骤 deleteMerchants(ids)
预期结果 抛错或返回失败;两条 del_flag 均未变

MER-UT-024 openShopCheck 经营未完善

要素 内容
测试模块 商户管理
测试项 开店校验 Facade
测试类型 单元测试
测试工具 JUnit
测试目的 验证 R6 经营完整前置
前置条件 cert_status=0biz_complete=0
测试步骤 checkOpenShop(merchantId)
预期结果 allowed=false;reason=经营信息未完善

MER-UT-025 openShopCheck 不设店铺数量上限

要素 内容
测试模块 商户管理
测试项 开店校验 Facade
测试类型 单元测试
测试工具 JUnit
测试目的 验证 R1 不因 shop_count 拒绝
前置条件 biz_complete=1cert_status=0shop_count=10
测试步骤 checkOpenShop
预期结果 allowed=true;reason 为空

MER-UT-026 编辑接口不可修改 shop_count

要素 内容
测试模块 商户管理
测试项 编辑 Service
测试类型 单元测试
测试工具 JUnit
测试目的 验证 shop_count 仅店铺 Facade 维护
前置条件 shop_count=1
测试步骤 编辑 DTO 传 shopCount=99 保存
预期结果 库中 shop_count 仍为 1

MER-UT-027 证件过期标记 warnExpired 仍成功

要素 内容
测试模块 商户管理
测试项 新增 Service
测试类型 单元测试
测试工具 JUnit
测试目的 验证 §6.4 过期可提交
前置条件 idValidEnd 为昨日
测试步骤 新增个人商户
预期结果 入库成功;返回 warnExpired=trueexpiredItems 非空

MER-UT-028 认证状态机:同态变更不允许

要素 内容
测试模块 商户管理
测试项 状态机
测试类型 单元测试
测试工具 JUnit
测试目的 验证 §9.1 同态不可流转
前置条件 cert_status=0
测试步骤 canTransition(0,0)
预期结果 false

MER-UT-029 个人证件号入驻唯一

要素 内容
测试模块 商户管理
测试项 唯一性
测试类型 单元测试
测试工具 JUnit + Mockito
测试目的 验证个人 id_card_no 未删除范围内唯一
前置条件 已存在个人商户占用证件号 X
测试步骤 个人新增校验证件号 X
预期结果 失败;msg「该证件号码已入驻」

MER-UT-030 银行卡号格式 8~30 位数字

要素 内容
测试模块 商户管理
测试项 字段校验
测试类型 单元测试
测试工具 JUnit
测试目的 验证 §9.4 bankAccount
前置条件 bankAccount=123(不足 8 位)
测试步骤 编辑保存校验
预期结果 校验不通过

MER-UT-031 allowedCertStatuses 按当前状态过滤

要素 内容
测试模块 商户管理
测试项 详情 VO
测试类型 单元测试
测试工具 JUnit
测试目的 验证 §9.1 可选目标与 needConfirm
前置条件 正常、已注销商户各一
测试步骤 构建详情 allowedCertStatuses
预期结果 正常含冻结/注销且 needConfirm=true;注销 含恢复为正常

MER-UT-032 绑定管理员写入经营账号关联

要素 内容
测试模块 商户管理
测试项 MerchantAccountBindService
测试类型 单元测试
测试工具 JUnit + Mockito
测试目的 验证 R12:insert (account_id=user_id, merchant_id, shop_id=NULL)
前置条件 Mock sys_user userId=10,具 role_key=merchantcountByAccountId(10)=0
测试步骤 bindAccountOnMerchantCreate(1L, dto{SYS_USER,10}, op)
预期结果 merchantAccountMapper.insertaccountId=10merchantId=1shopId=null

MER-UT-033 未选 bindType 抛错

要素 内容
测试模块 商户管理
测试项 绑定校验
测试类型 单元测试
测试工具 JUnit
测试目的 验证强制绑定
前置条件
测试步骤 bindAccountOnMerchantCreate 且 dto 无 bindType
预期结果 ServiceException;msg 含「请选择并绑定」

MER-UT-034 绑定会员要求昵称非空

要素 内容
测试模块 商户管理
测试项 绑定会员
测试类型 单元测试
测试工具 JUnit + Mockito
测试目的 验证 R13:会员名称/昵称非空校验
前置条件 会员 memberCode(=user_name)非空,nickName 为空
测试步骤 BIND_MEMBER + bindMemberId
预期结果 抛错;msg 含「会员昵称不能为空」

MER-UT-035 绑定会员写入经营账号关联

要素 内容
测试模块 商户管理
测试项 绑定会员
测试类型 单元测试
测试工具 JUnit + Mockito
测试目的 验证 R13:insert account_id=memberId;复用会员 sys_user 并追加 merchant 角色
前置条件 memberCode=张三,memberId=5,nickName=小张;会员具 role_key=member
测试步骤 完整 BIND_MEMBER 流程
预期结果 grantRoleIfAbsent(5, merchant)biz_merchant_account.account_id=5shop_id=NULL新建 sys_user

MER-UT-036 列表填充商户管理员名称

要素 内容
测试模块 商户管理
测试项 列表 Service
测试类型 单元测试
测试工具 JUnit + Mockito
测试目的 验证 selectMerchantList 批量填充 adminName
前置条件 Mock selectList 返回 merchantId=1;Mock selectMerchantAdminNamesByMerchantIds 返回 nick_name=张管理员
测试步骤 调用 selectMerchantList
预期结果 首行 adminName=张管理员

二、接口测试

MER-API-001 列表分页与默认排序

要素 内容
测试模块 商户管理
测试项 GET /list
测试类型 接口测试
测试工具 Apifox
测试目的 验证列表基础能力
前置条件 已登录;agri:merchant:list;存在≥2 条未删除商户
测试步骤 GET /agri/merchant/list?pageNum=1&pageSize=10
预期结果 code=200rowscreate_time 倒序;不含 del_flag=2 数据

MER-API-002 列表按商户名称模糊检索

要素 内容
测试模块 商户管理
测试项 GET /list
测试类型 接口测试
测试工具 Apifox
测试目的 验证 §5 名称检索(含 unitName)
前置条件 存在 merchant_name 含「农资」的商户
测试步骤 GET /list?merchantName=农资
预期结果 返回记录均匹配 merchant_name/person_name/company_name 之一

MER-API-003 列表按认证状态筛选

要素 内容
测试模块 商户管理
测试项 GET /list
测试类型 接口测试
测试工具 Apifox
测试目的 验证认证状态筛选
前置条件 存在正常、已冻结商户各一
测试步骤 GET /list?certStatus=1
预期结果 全部 certStatus=1(已冻结)

MER-API-004 列表 canEdit/canDelete 标志

要素 内容
测试模块 商户管理
测试项 GET /list
测试类型 接口测试
测试工具 Apifox
测试目的 验证列表操作可用性
前置条件 正常可删商户;已注销商户各一
测试步骤 对比两条记录的 flags
预期结果 正常且满足删条件的 canDelete=true;注销的 canEdit=false

MER-API-005 个人商户新增成功

要素 内容
测试模块 商户管理
测试项 POST /
测试类型 接口测试
测试工具 Apifox
测试目的 验证个人入驻主流程(主体+经营完整)
前置条件 agri:merchant:add;证件号未占用
测试步骤 POST / 提交 §9.3 个人完整样例 + bindType=SYS_USER+bindUserId
预期结果 code=200;msg「保存成功,已可开设店铺」;详情 certStatus=0bizComplete=1biz_merchant_account 已 1 条

MER-API-006 企业商户新增成功

要素 内容
测试模块 商户管理
测试项 POST /
测试类型 接口测试
测试工具 Apifox
测试目的 验证企业入驻主流程(主体+经营完整)
前置条件 信用代码未占用
测试步骤 POST / 提交 §9.3 企业完整样例 JSON + 绑定字段
预期结果 code=200bizComplete=1companyName 入库;列表 unitName 为企业名称

MER-API-007 新增缺少必填字段失败

要素 内容
测试模块 商户管理
测试项 POST /
测试类型 接口测试
测试工具 Apifox
测试目的 验证必填校验
前置条件
测试步骤 POST / 仅传 merchantType=1+personName,无证件号与经营字段
预期结果 code≠200;msg 含必填/经营不完整提示;未新增记录

MER-API-008 企业信用代码重复

要素 内容
测试模块 商户管理
测试项 POST /
测试类型 接口测试
测试工具 Apifox
测试目的 验证 R7 入驻唯一
前置条件 已存在企业 creditCode=A
测试步骤 再次 POST 相同 creditCode
预期结果 失败;msg「该统一社会信用代码已入驻」

MER-API-009 新增经营信息不完整拒绝

要素 内容
测试模块 商户管理
测试项 POST /
测试类型 接口测试
测试工具 Apifox
测试目的 验证 R10:缺经营字段不可保存
前置条件
测试步骤 POST / 主体+绑定合法,但缺 merchantNamecontactPhone 等经营字段
预期结果 失败;msg 含「经营信息不完整,无法保存」及缺失项;未新增记录

MER-API-010 证件过期仍 200 且带 warn

要素 内容
测试模块 商户管理
测试项 POST /
测试类型 接口测试
测试工具 Apifox
测试目的 验证过期可提交
前置条件
测试步骤 idValidEnd 设为过去日期提交
预期结果 code=200data.warnExpired=true

MER-API-011 详情含待完善字段列表

要素 内容
测试模块 商户管理
测试项 GET /{id}
测试类型 接口测试
测试工具 Apifox
测试目的 验证详情契约
前置条件 编辑后清空某经营字段的商户,或历史不完整数据
测试步骤 GET /agri/merchant/{id}
预期结果 bizComplete=0pendingBizFields 为非空中文字符串数组

MER-API-012 详情 allowedCertStatuses 与当前状态一致

要素 内容
测试模块 商户管理
测试项 GET /{id}
测试类型 接口测试
测试工具 Apifox
测试目的 验证 §9.1 可选目标状态
前置条件 正常商户
测试步骤 获取详情
预期结果 含冻结、注销选项;不含「注销→冻结」类非法项

MER-API-013 编辑补全经营信息成功

要素 内容
测试模块 商户管理
测试项 PUT /
测试类型 接口测试
测试工具 Apifox
测试目的 验证补全经营主流程
前置条件 正常个人商户;agri:merchant:edit
测试步骤 PUT / 提交 §9.3 编辑样例(含经营字段)
预期结果 code=200bizComplete=1;msg 可含「已可开设店铺」;certTime 不变

MER-API-014 编辑商户名称重复失败

要素 内容
测试模块 商户管理
测试项 PUT /
测试类型 接口测试
测试工具 Apifox
测试目的 验证 R7
前置条件 商户 B 已占用名称「XX农资」
测试步骤 商户 A PUTmerchantName=XX农资
预期结果 失败;「商户名称已存在」

MER-API-015 已注销商户编辑失败

要素 内容
测试模块 商户管理
测试项 PUT /
测试类型 接口测试
测试工具 Apifox
测试目的 验证注销只读
前置条件 cert_status=2
测试步骤 PUT / 修改联系人
预期结果 失败;「商户已注销,不可编辑」

MER-API-016 编辑接口传 certStatus 无效

要素 内容
测试模块 商户管理
测试项 PUT /
测试类型 接口测试
测试工具 Apifox
测试目的 验证 R5
前置条件 正常商户
测试步骤 PUT / body 含 certStatus=2
预期结果 认证状态不变;或拒绝并提示在详情改认证

MER-API-017 改认证两步确认-预检

要素 内容
测试模块 商户管理
测试项 PUT /{id}/certStatus
测试类型 接口测试
测试工具 Apifox
测试目的 验证 confirm 协议
前置条件 正常商户;agri:merchant:cert
测试步骤 PUT .../certStatus body {certStatus:1, confirm:false}
预期结果 code=200needConfirm=trueconfirmMessage 含「冻结后不可新开店铺」;DB 仍为正常

MER-API-018 改认证确认后持久化

要素 内容
测试模块 商户管理
测试项 PUT /{id}/certStatus
测试类型 接口测试
测试工具 Apifox
测试目的 验证正常→冻结
前置条件 MER-API-017 同一商户
测试步骤 confirm:true 提交冻结
预期结果 certStatus=1certTime 更新

MER-API-019 非法认证变更拒绝

要素 内容
测试模块 商户管理
测试项 PUT /{id}/certStatus
测试类型 接口测试
测试工具 Apifox
测试目的 验证注销→冻结不允许
前置条件 cert_status=2
测试步骤 PUT 目标 certStatus=1confirm:true
预期结果 失败;「不允许的认证状态变更」

MER-API-020 已注销恢复为正常

要素 内容
测试模块 商户管理
测试项 PUT /{id}/certStatus
测试类型 接口测试
测试工具 Apifox
测试目的 验证 2→0 唯一恢复路径
前置条件 已注销商户
测试步骤 confirm:true 改为正常
预期结果 certStatus=0;之后 PUT / 编辑可成功

MER-API-021 删除预检-无店铺无订单可删

要素 内容
测试模块 商户管理
测试项 GET /{id}/deleteCheck
测试类型 接口测试
测试工具 Apifox
测试目的 验证删除前置正向
前置条件 正常;shop_count=0;订单桩 false
测试步骤 GET .../deleteCheck
预期结果 canDelete=truereasons 为空

MER-API-022 删除预检-有店铺

要素 内容
测试模块 商户管理
测试项 GET /{id}/deleteCheck
测试类型 接口测试
测试工具 Apifox
测试目的 验证 R8 有店不可删
前置条件 shop_count≥1
测试步骤 GET .../deleteCheck
预期结果 canDelete=false;reasons 含店铺相关说明

MER-API-023 逻辑删除成功

要素 内容
测试模块 商户管理
测试项 DELETE /{ids}
测试类型 接口测试
测试工具 Apifox
测试目的 验证删除主流程
前置条件 MER-API-021 通过;agri:merchant:remove
测试步骤 DELETE /agri/merchant/{id}
预期结果 code=200;列表不可见;DB del_flag=2

MER-API-024 已注销商户不可删除

要素 内容
测试模块 商户管理
测试项 DELETE /{ids}
测试类型 接口测试
测试工具 Apifox
测试目的 验证注销不可删
前置条件 cert_status=2shop_count=0
测试步骤 DELETE
预期结果 失败;msg 含「已注销商户不可删除」或等价

MER-API-025 批量删除部分失败整批取消

要素 内容
测试模块 商户管理
测试项 DELETE /{ids}
测试类型 接口测试
测试工具 Apifox
测试目的 验证批量整批失败
前置条件 ID1 可删;ID2 有店铺
测试步骤 DELETE /agri/merchant/ID1,ID2
预期结果 失败;「部分商户不满足删除条件」;两条均未逻辑删除

MER-API-026 selectList 仅返回可开店商户

要素 内容
测试模块 商户管理
测试项 GET /selectList
测试类型 接口测试
测试工具 Apifox
测试目的 验证 R6 selectList 条件
前置条件 准备:A 正常+经营完整;B 正常+经营未完整;C 冻结+完整
测试步骤 GET /agri/merchant/selectList
预期结果 仅含 A;不含 B、C、已删除

MER-API-027 openShopCheck 经营完整允许

要素 内容
测试模块 商户管理
测试项 GET /{id}/openShopCheck
测试类型 接口测试
测试工具 Apifox
测试目的 验证开店校验正向
前置条件 正常且 biz_complete=1
测试步骤 GET .../openShopCheck
预期结果 allowed=truereason 为空

MER-API-028 openShopCheck 经营未完善

要素 内容
测试模块 商户管理
测试项 GET /{id}/openShopCheck
测试类型 接口测试
测试工具 Apifox
测试目的 验证经营前置
前置条件 正常且 biz_complete=0
测试步骤 GET .../openShopCheck
预期结果 allowed=false;reason=经营信息未完善

MER-API-029 openShopCheck 已冻结/已注销

要素 内容
测试模块 商户管理
测试项 GET /{id}/openShopCheck
测试类型 接口测试
测试工具 Apifox
测试目的 验证认证状态阻断开店
前置条件 冻结、注销商户各一且经营完整
测试步骤 分别调用 openShopCheck
预期结果 冻结→「商户已冻结」;注销→「商户已注销」

MER-API-030 openShopCheck 高 shop_count 仍允许

要素 内容
测试模块 商户管理
测试项 GET /{id}/openShopCheck
测试类型 接口测试
测试工具 Apifox
测试目的 验证 R1 无店数上限
前置条件 正常完整商户 shop_count≥5(测试数据)
测试步骤 GET .../openShopCheck
预期结果 allowed=true

MER-API-031 商户下店铺简要列表

要素 内容
测试模块 商户管理
测试项 GET /{id}/shops
测试类型 接口测试
测试工具 Apifox
测试目的 验证详情协作数据
前置条件 商户下有 2 家未删除店铺
测试步骤 GET .../shops
预期结果 返回 2 条 shopId, shopName, shopStatus;与 shop_count 一致

MER-API-032 无 list 权限 403

要素 内容
测试模块 商户管理
测试项 权限
测试类型 接口测试
测试工具 Apifox
测试目的 验证 @PreAuthorize
前置条件 使用无 agri:merchant:list 的 Token
测试步骤 GET /list
预期结果 HTTP 403 或 RuoYi 无权限响应

MER-API-033 无 add 权限新增失败

要素 内容
测试模块 商户管理
测试项 权限
测试类型 接口测试
测试工具 Apifox
测试目的 验证新增权限
前置条件 agri:merchant:add
测试步骤 POST / 合法 body
预期结果 403;无新记录

MER-API-034 详情敏感字段脱敏展示

要素 内容
测试模块 商户管理
测试项 GET /{id}
测试类型 接口测试
测试工具 Apifox
测试目的 验证 §9.7 脱敏(若已实现)
前置条件 商户含完整证件号、银行卡
测试步骤 获取详情 VO
预期结果 证件号前3后4掩码;银行卡仅后4位可见(或按实现约定)

MER-API-035 正常→注销(两步确认)

要素 内容
测试模块 商户管理
测试项 PUT /{id}/certStatus
测试类型 接口测试
测试工具 Apifox
测试目的 验证 §9.1 正常→注销
前置条件 正常商户
测试步骤 1. confirm:false 2. confirm:true 目标 certStatus=2
预期结果 预检 confirmMessage 含「注销后资料不可编辑」;确认后 certStatus=2

MER-API-036 已冻结→正常恢复

要素 内容
测试模块 商户管理
测试项 PUT /{id}/certStatus
测试类型 接口测试
测试工具 Apifox
测试目的 验证冻结可恢复
前置条件 cert_status=1
测试步骤 confirm:true 改为 certStatus=0
预期结果 certStatus=0openShopCheck 在经营完整时为 allowed=true

MER-API-037 个人证件号重复入驻

要素 内容
测试模块 商户管理
测试项 POST /
测试类型 接口测试
测试工具 Apifox
测试目的 验证证件号唯一
前置条件 已存在个人证件号 X
测试步骤 再次 POST 个人主体且 idCardNo=X
预期结果 失败;「该证件号码已入驻」

MER-API-038 已冻结商户仍可编辑

要素 内容
测试模块 商户管理
测试项 PUT /
测试类型 接口测试
测试工具 Apifox
测试目的 验证 §7.2 冻结可编辑
前置条件 cert_status=1
测试步骤 PUT 修改 servicePhone
预期结果 code=200certStatus 仍为 1

MER-API-039 无 edit/cert/remove 权限

要素 内容
测试模块 商户管理
测试项 权限
测试类型 接口测试
测试工具 Apifox
测试目的 验证 §6 菜单权限
前置条件 Token 仅含 listquery
测试步骤 分别 PUT /PUT .../certStatusDELETE /{id}
预期结果 均为 403;数据无变更

MER-API-040 商户不存在返回错误

要素 内容
测试模块 商户管理
测试项 GET /{id}
测试类型 接口测试
测试工具 Apifox
测试目的 验证异常 ID
前置条件
测试步骤 GET /agri/merchant/999999999
预期结果 code≠200 或 404;无敏感数据泄露

MER-API-041 openShopCheck 已逻辑删除商户

要素 内容
测试模块 商户管理
测试项 GET /{id}/openShopCheck
测试类型 接口测试
测试工具 Apifox
测试目的 验证已删除不可开店
前置条件 del_flag=2 商户
测试步骤 GET .../openShopCheck
预期结果 allowed=false;reason=商户已删除

MER-API-042 删除预检-存在未完成订单

要素 内容
测试模块 商户管理
测试项 GET /{id}/deleteCheck
测试类型 接口测试
测试工具 Apifox
测试目的 验证 OrderFacade 接口层
前置条件 shop_count=0hasUnfinishedOrdersByMerchant=true(订单模块或 Mock)
测试步骤 GET .../deleteCheck
预期结果 canDelete=false;reasons 含「存在未完成订单」

MER-API-043 详情 shopListUrl 与店铺数一致

要素 内容
测试模块 商户管理
测试项 GET /{id}
测试类型 接口测试
测试工具 Apifox
测试目的 验证 §3.3 店铺跳转参数
前置条件 经营完整商户 merchantName=张三农资店shopCount=1
测试步骤 GET /{id}
预期结果 shopListUrlmerchantName= 编码值;shops 长度=1

MER-API-044 管理员选项 keyword 检索

要素 内容
测试模块 商户管理
测试项 GET /adminUserOptions
测试类型 接口测试
测试工具 Apifox / MockMvc
测试目的 验证 §3.4.1
前置条件 存在 role_key=merchant 用户 userName 含 admin
测试步骤 GET /agri/merchant/adminUserOptions?keyword=admin
预期结果 code=200data[] 含 userId、userName、nickName、phonenumber;均为 merchant 角色用户

MER-API-045 会员选项 keyword 检索

要素 内容
测试模块 商户管理
测试项 GET /memberOptions
测试类型 接口测试
测试工具 Apifox / MockMvc
测试目的 验证 §3.4.2
前置条件 存在 user_name(接口字段 memberCode)含「张三」的会员(role_key=member)
测试步骤 GET /agri/merchant/memberOptions?keyword=张三
预期结果 code=200data[] 含 memberId、memberCode(=user_name)、nickName、mobile

MER-API-046 新增缺少 bindType 失败

要素 内容
测试模块 商户管理
测试项 POST /
测试类型 接口测试
测试工具 Apifox
测试目的 验证强制绑定
前置条件 合法主体 JSON,无 bindType
测试步骤 POST /
预期结果 失败;msg「请选择并绑定管理员账号或会员账号」;无商户/经营账号记录

MER-API-047 绑定管理员-用户无 merchant 角色

要素 内容
测试模块 商户管理
测试项 POST /
测试类型 接口测试
测试工具 Apifox
测试目的 验证 R12 角色校验
前置条件 sys_user 无 role_key=merchant
测试步骤 bindType=SYS_USER+该 userId
预期结果 失败;「所选用户未分配商户经营角色」

MER-API-048 绑定会员成功并追加 merchant 角色

要素 内容
测试模块 商户管理
测试项 POST /
测试类型 接口测试
测试工具 Apifox
测试目的 验证 R13 全链路
前置条件 会员有 user_name(memberCode)、nickName;该 memberId 未绑定经营账号
测试步骤 POST / §9.8 会员样例
预期结果 商户成功;sys_user_role 追加 merchantbiz_merchant_account.account_id=member_idshop_id=NULL

MER-API-049 经营账号重复绑定失败

要素 内容
测试模块 商户管理
测试项 POST /
测试类型 接口测试
测试工具 Apifox
测试目的 验证同一 account_id 不可重复绑定
前置条件 会员 user_id 已存在于 biz_merchant_account.account_id
测试步骤 再次以该会员绑定新商户
预期结果 失败;「该账号已绑定商户经营账号」

MER-API-050 无 add 权限不可查绑定选项

要素 内容
测试模块 商户管理
测试项 权限
测试类型 接口测试
测试工具 Apifox
测试目的 验证选项接口权限
前置条件 Token 无 agri:merchant:add
测试步骤 GET /adminUserOptions
预期结果 403

MER-API-051 省市区树接口(经营/注册地址数据源)

要素 内容
测试模块 商户管理(依赖)
测试项 GET /agri/region/tree
测试类型 接口测试
测试工具 Apifox
测试目的 验证 §6.8 三级树供地址选择
前置条件 已登录平台;biz_region 表有数据
测试步骤 GET /agri/region/tree
预期结果 code=200data[] 为省级节点;含 type=1children;末级区县 type=3 且带 code

MER-API-052 编辑写入经营地址省市区

要素 内容
测试模块 商户管理
测试项 PUT /
测试类型 接口测试
测试工具 Apifox
测试目的 验证 §9.9 落库与 biz_complete
前置条件 经营信息不完整的正常商户;从 MER-API-051 选取区县
测试步骤 PUT / 提交 bizRegionCode=110101bizRegionName=北京市/市辖区/东城区 及其余经营必填项
预期结果 成功;库表 biz_region_code/name 一致;biz_complete=1 时 msg 可含「已可开设店铺」

MER-API-053 列表返回商户管理员名称

要素 内容
测试模块 商户管理
测试项 GET /list
测试类型 接口测试
测试工具 Apifox
测试目的 验证 §3.2 adminName 契约
前置条件 存在已绑定经营账号的商户;已知该账号 sys_user.nick_name
测试步骤 GET /agri/merchant/list?pageNum=1&pageSize=10
预期结果 对应行 adminName 等于绑定账号 nick_name;无绑定账号时为 null/空,前端显示「—」

三、界面测试(Playwright)

通用前置: 平台管理员账号已登录;浏览器 Chromium;baseURL 配置为测试环境;菜单路径以「农资管理 → 商户管理」为准(路由实现后替换选择器)。

MER-UI-001 进入商户列表页

要素 内容
测试模块 商户管理
测试项 列表页加载
测试类型 界面测试
测试工具 Playwright (Chrome)
测试目的 验证菜单与列表渲染
前置条件 agri:merchant:list 权限
测试步骤 1. 登录平台 2. 点击「商户管理」菜单
预期结果 展示表格列:所属单位、类型、商户名称、商户管理员、联系人、店铺数、认证状态、认证时间、操作;默认分页

MER-UI-002 列表按商户名称检索

要素 内容
测试模块 商户管理
测试项 高级检索
测试类型 界面测试
测试工具 Playwright
测试目的 验证 §5 检索
前置条件 存在名称含「测试农资」商户
测试步骤 1. 输入商户名称「测试农资」 2. 点击查询
预期结果 列表仅显示匹配行;分页重置

MER-UI-003 列表按认证状态筛选

要素 内容
测试模块 商户管理
测试项 高级检索
测试类型 界面测试
测试工具 Playwright
测试目的 验证状态筛选 UI
前置条件 存在已冻结商户
测试步骤 认证状态选「已冻结」→ 查询
预期结果 列表均为已冻结;标签样式正确

MER-UI-004 添加个人商户-含主体与经营表单

要素 内容
测试模块 商户管理
测试项 添加商户
测试类型 界面测试
测试工具 Playwright
测试目的 验证 R10 新增表单范围
前置条件 有 add 权限
测试步骤 1. 点击「新增」 2. 选个人 3. 查看 Tab 与表单项
预期结果 有「主体资质」「商户经营信息」「绑定经营账号」三个 Tab;经营 Tab 含商户名称、经营地区、联系人、银行等必填项

MER-UI-005 添加个人商户成功提示

要素 内容
测试模块 商户管理
测试项 添加商户
测试类型 界面测试
测试工具 Playwright
测试目的 验证入驻成功交互
前置条件 合法个人数据;证照已上传
测试步骤 填写主体+经营+绑定全部必填项→提交
预期结果 成功提示「保存成功,已可开设店铺」;列表新增行认证=正常;商户名称显示所填名称

MER-UI-006 添加企业商户成功

要素 内容
测试模块 商户管理
测试项 添加商户
测试类型 界面测试
测试工具 Playwright
测试目的 验证企业入驻 UI
前置条件 未占用信用代码
测试步骤 选企业→填法人+企业+经营信息+绑定→提交
预期结果 成功;bizComplete=1;列表所属单位=企业名称

MER-UI-007 添加必填项为空提交校验

要素 内容
测试模块 商户管理
测试项 添加商户
测试类型 界面测试
测试工具 Playwright
测试目的 验证前端/后端必填提示
前置条件 打开新增页
测试步骤 不填姓名或经营必填项直接提交
预期结果 表单项标红或 Toast 提示;不关闭弹窗/不跳转

MER-UI-008 查看详情-经营待完善展示

要素 内容
测试模块 商户管理
测试项 查看详情
测试类型 界面测试
测试工具 Playwright
测试目的 验证 §8.1 待完善
前置条件 经营信息不完整的商户(编辑清空某字段或历史数据)
测试步骤 列表点「查看详情」
预期结果 经营信息区显示「待完善」及缺失字段清单;主体资质只读展示

MER-UI-009 详情改认证-正常转冻结二次确认

要素 内容
测试模块 商户管理
测试项 认证状态
测试类型 界面测试
测试工具 Playwright
测试目的 验证 §7.4 冻结确认文案
前置条件 正常商户;有 cert 权限
测试步骤 详情选「已冻结」→确认弹窗点确定
预期结果 弹窗含「冻结后不可新开店铺」;保存后状态=已冻结;认证时间更新

MER-UI-010 详情改认证-取消确认不落库

要素 内容
测试模块 商户管理
测试项 认证状态
测试类型 界面测试
测试工具 Playwright
测试目的 验证两步确认取消
前置条件 正常商户
测试步骤 改冻结→弹窗点取消
预期结果 仍为正常;认证时间不变

MER-UI-011 详情改认证-注销后编辑入口不可用

要素 内容
测试模块 商户管理
测试项 认证状态
测试类型 界面测试
测试工具 Playwright
测试目的 验证注销权限矩阵
前置条件 已注销商户
测试步骤 打开详情/返回列表
预期结果 列表无「编辑」或编辑禁用;详情可改认证仅「恢复为正常」

MER-UI-012 编辑页含主体+经营且无认证修改

要素 内容
测试模块 商户管理
测试项 编辑商户
测试类型 界面测试
测试工具 Playwright
测试目的 验证 §8.3、§9
前置条件 正常商户
测试步骤 点「编辑」
预期结果 有经营信息区块; 认证状态下拉(或只读);商户类型不可改

MER-UI-013 编辑补全经营信息成功 Toast

要素 内容
测试模块 商户管理
测试项 编辑商户
测试类型 界面测试
测试工具 Playwright
测试目的 验证 §9.5 可开店提示
前置条件 经营未完整商户
测试步骤 填写 §6.6 全部经营字段→保存
预期结果 Toast「已可开设店铺」或等价;详情 bizComplete 展示完整

MER-UI-014 编辑证件号/信用代码只读

要素 内容
测试模块 商户管理
测试项 编辑商户
测试类型 界面测试
测试工具 Playwright
测试目的 验证 R11 UI
前置条件 个人/企业商户各一
测试步骤 打开编辑页查看证件号、信用代码控件
预期结果 控件 disabled 或只读文本,不可输入

MER-UI-015 已冻结商户仍可编辑

要素 内容
测试模块 商户管理
测试项 编辑商户
测试类型 界面测试
测试工具 Playwright
测试目的 验证 §7.2 冻结可编辑
前置条件 已冻结商户
测试步骤 修改客服电话→保存
预期结果 保存成功;仍为已冻结

MER-UI-016 删除商户-二次确认与成功

要素 内容
测试模块 商户管理
测试项 删除商户
测试类型 界面测试
测试工具 Playwright
测试目的 验证删除 UI 流程
前置条件 正常;0 店铺;0 未完成订单
测试步骤 点删除→确认框「删除后不可恢复」→确定
预期结果 列表消失;提示成功

MER-UI-017 删除商户-有店铺按钮禁用或失败提示

要素 内容
测试模块 商户管理
测试项 删除商户
测试类型 界面测试
测试工具 Playwright
测试目的 验证删商户约束
前置条件 shop_count>0
测试步骤 尝试删除
预期结果 删除按钮不可用,或点击后提示「请先删除该商户下全部店铺」

MER-UI-018 列表联系人未完善显示破折号

要素 内容
测试模块 商户管理
测试项 列表展示
测试类型 界面测试
测试工具 Playwright
测试目的 验证 §4.1 联系人列
前置条件 未补经营商户
测试步骤 查看列表该行
预期结果 联系人、联系人手机显示「—」

MER-UI-019 详情跳转店铺列表(若有)

要素 内容
测试模块 商户管理
测试项 详情协作
测试类型 界面测试
测试工具 Playwright
测试目的 验证 §8.1 店铺跳转
前置条件 商户有店铺;详情有「查看店铺」链接
测试步骤 点击链接
预期结果 打开店铺列表且自动带 merchantName 筛选(不断言 店铺模块 CRUD,仅验证跳转与参数)

MER-UI-020 无 add 权限不显示新增按钮

要素 内容
测试模块 商户管理
测试项 权限
测试类型 界面测试
测试工具 Playwright
测试目的 验证菜单按钮权限
前置条件 角色仅 list+query
测试步骤 进入商户列表
预期结果 无「新增」按钮

MER-UI-021 证件过期提交成功带风险提示(若 UI 展示)

要素 内容
测试模块 商户管理
测试项 添加商户
测试类型 界面测试
测试工具 Playwright
测试目的 验证 §6.4 过期提示
前置条件
测试步骤 填过期证件有效期→提交
预期结果 仍成功;页面展示过期风险提示(或成功弹窗含 warn 文案)

MER-UI-022 列表无会员相关列

要素 内容
测试模块 商户管理
测试项 列表展示
测试类型 界面测试
测试工具 Playwright
测试目的 验证列表不展示会员运营列
前置条件 打开列表
测试步骤 检查表头
预期结果 「会员等级」「注册来源」等会员运营列(绑定仅在新增页)

MER-UI-029 新增-选管理员远程搜索

要素 内容
测试模块 商户管理
测试项 绑定账号
测试类型 界面测试
测试工具 Playwright
测试目的 验证 §6.7.1 UI
前置条件 存在 role_key=merchant 用户
测试步骤 新增→绑定类型选「平台管理员」→输入手机号/用户名搜索→选中
预期结果 下拉展示昵称/用户名;选中后提交可用

MER-UI-030 新增-选会员远程搜索

要素 内容
测试模块 商户管理
测试项 绑定账号
测试类型 界面测试
测试工具 Playwright
测试目的 验证 §6.7.2 UI
前置条件 存在会员
测试步骤 绑定类型选「会员」→按会员名称/手机号搜索→选中
预期结果 展示会员名称、昵称;选中后可提交

MER-UI-031 新增-未选绑定不可提交

要素 内容
测试模块 商户管理
测试项 绑定账号
测试类型 界面测试
测试工具 Playwright
测试目的 验证强制绑定
前置条件 主体已填
测试步骤 不选绑定直接提交
预期结果 前端校验或后端 Toast「请选择并绑定…」

MER-UI-023 添加企业-信用代码重复提示

要素 内容
测试模块 商户管理
测试项 添加商户
测试类型 界面测试
测试工具 Playwright
测试目的 验证 R7 企业唯一性 UI
前置条件 已存在企业信用代码 A
测试步骤 企业入驻填相同信用代码→提交
预期结果 Toast/表单错误「该统一社会信用代码已入驻」;未新增行

MER-UI-024 编辑商户名称重复

要素 内容
测试模块 商户管理
测试项 编辑商户
测试类型 界面测试
测试工具 Playwright
测试目的 验证 R7 名称唯一 UI
前置条件 商户 B 已占用名称「YY农资」
测试步骤 编辑商户 A,商户名称改为「YY农资」→保存
预期结果 保存失败并提示「商户名称已存在」

MER-UI-025 详情改认证-正常转注销

要素 内容
测试模块 商户管理
测试项 认证状态
测试类型 界面测试
测试工具 Playwright
测试目的 验证注销流转与 §7.4 文案
前置条件 正常商户
测试步骤 详情选「已注销」→确认弹窗确定
预期结果 弹窗含「注销后资料不可编辑」;保存后列表认证=已注销;编辑按钮不可用

MER-UI-026 已注销恢复为正常后可编辑

要素 内容
测试模块 商户管理
测试项 认证状态
测试类型 界面测试
测试工具 Playwright
测试目的 验证 2→0 恢复路径
前置条件 已注销商户
测试步骤 详情改认证为「正常」并确认→返回列表点编辑
预期结果 确认文案含「恢复后可编辑、可开店」;编辑页可打开并保存

MER-UI-027 添加企业表单含经营结算字段

要素 内容
测试模块 商户管理
测试项 添加商户
测试类型 界面测试
测试工具 Playwright
测试目的 验证 R10 企业新增须含经营 Tab
前置条件 有 add 权限
测试步骤 新增→选企业→打开「商户经营信息」Tab
预期结果 含商户名称、开户银行、营业执照电子版开户许可证 等经营项;均为必填

MER-UI-028 详情展示店铺数与下属店铺

要素 内容
测试模块 商户管理
测试项 查看详情
测试类型 界面测试
测试工具 Playwright
测试目的 验证 §8.1 店铺关联展示
前置条件 shop_count≥1
测试步骤 打开详情
预期结果 「已绑定店铺数量」与列表一致;展示下属店铺名称列表(或表格)

四、用例统计

类型 数量 编号段
单元测试 36 MER-UT-001~036
接口测试 51 MER-API-001~053
界面测试 31 MER-UI-001~031
合计 118

五、业务规则覆盖索引

规则 含义 对应用例(示例)
R1 不设开店数量上限 MER-UT-025, MER-API-030
R2 入驻绑定账号 MER-UT-032~035, MER-API-044~049, MER-UI-029~031
R12 绑定管理员字段 MER-UT-032, MER-API-047
R13 绑定会员 MER-UT-034/035, MER-API-048/049
R3 入驻即正常+认证时间 MER-UT-005, MER-API-005/006
R4 类型不可互转 MER-UT-007, MER-API-009
R5 认证仅详情改 MER-API-016, MER-UI-009/012
R6 开店选商户三条件 MER-API-026~030, MER-UT-024
R7 名称/信用代码唯一 MER-UT-016/017/029, MER-API-008/014/037, MER-UI-023/024
R8 逻辑删除前置 MER-UT-021~023, MER-API-021~025/042, MER-UI-016/017
R9 认证变更不级联店/商品 (店铺/商品模块联调;本文档不重复)
R10 添加须主体+经营完整 MER-UT-005/006, MER-API-005/009, MER-UI-004/027
R11 证件号/信用代码不可改 MER-UT-008, MER-UI-014
功能域 正常流程 异常/约束
列表 MER-API-001~004/053, MER-UI-001~003 MER-API-032, MER-UI-020
入驻 MER-API-005/006/048, MER-UI-005/006 MER-API-007/008/037/046~049, MER-UI-007/023/031
绑定选项 MER-API-044/045 MER-API-050
详情 MER-API-011/012, MER-UI-008 MER-API-040
编辑 MER-API-013, MER-UI-012/013 MER-API-014/015, MER-UI-024
认证 MER-API-017~020/035/036, MER-UI-009/010 MER-API-019, MER-UI-025/026
删除 MER-API-023, MER-UI-016 MER-API-022/024/025/042, MER-UI-017
协作接口 MER-API-026~031/041/043 MER-API-028/029/041

六、测试数据建议

数据 说明
个人商户-经营不完整 编辑清空某经营字段后,用于待完善详情/openShopCheck 负向
个人商户-经营完整 用于新增成功、openShopCheck/selectList 正向
企业商户-信用代码唯一 用于重复校验
冻结/注销商户 用于状态机与权限
高 shop_count 商户 用于 R1 无上限(≥5,由店铺测试数据准备,本文仅断言 openShopCheck)
有店铺商户 用于删除阻断
证件/营业已过期主体 用于 warnExpired(MER-API-010, MER-UI-021)
role_key=merchant 的平台用户 用于 adminUserOptions、SYS_USER 绑定(MER-API-044/047)
有 user_name(memberCode)+ nickName 的会员 用于 MEMBER 绑定(MER-API-048)
会员 user_id 已绑定经营账号的会员 用于 MER-API-049
biz_region 省市区表数据 MER-API-051 树接口;MER-API-052 编辑落库

七、Playwright 执行说明(UI 用例)

依赖: Node.js 18+;@playwright/test;Chromium(npx playwright install chromium)。

建议 playwright.config.ts 片段:

import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
  testDir: './tests/merchant',
  use: {
    baseURL: process.env.BASE_URL || 'http://localhost:80',
    ...devices['Desktop Chrome'],
    locale: 'zh-CN',
  },
});

登录与导航(示例):

// tests/merchant/merchant-list.spec.ts
import { test, expect } from '@playwright/test';

test.beforeEach(async ({ page }) => {
  await page.goto('/login');
  await page.fill('input[name="username"]', process.env.ADMIN_USER!);
  await page.fill('input[name="password"]', process.env.ADMIN_PASS!);
  await page.click('button:has-text("登")');
  await page.getByRole('menuitem', { name: '商户管理' }).click(); // 按实际菜单文案调整
});

test('MER-UI-001 列表加载', async ({ page }) => {
  await expect(page.getByRole('columnheader', { name: '商户所属单位' })).toBeVisible();
});

选择器以 RuoYi-Vue 实际 DOM 为准;菜单路由、弹窗 class 实现后替换 getByRole / data-testid。UI 用例 MER-UI-001~028 与上表一一对应编写 spec 即可。


文档版本:v1.6 · 关联《商户管理功能需求.md》v1.9、《商户管理技术方案.md》v1.9