菜单

电商结算的地址测试:最小用例集和缺陷报告怎么写

结算环节的地址缺陷集中在假地址、邮编与省州不匹配、地址行截断、配送区域判断四类。本文给出可复现的最小用例集,以及一份能被别人重建的缺陷报告该写哪些字段。

发布于

  • 电商测试
  • 地址校验
  • 配送区域
  • 缺陷报告

结算页的地址输入看起来只是一个表单,但它是整条订单链路里少有的、由用户自由输入又要被下游系统反复消费的字段。地址写对了,拣货、计费、配送区域判断都正常;地址写错了,问题往往不在结算页报错,而是在发货之后才暴露。

这篇文章把结算地址的测试拆成四类典型缺陷和一份最小用例集,并给出缺陷报告的写法。

为什么结算地址比普通表单难测?

普通表单只要验证「合法输入能提交、非法输入被拒」。结算地址还要多出三层:地址被存储与截断、地址被用来判断配送区域、地址被传给下游系统。

第一层是存储。数据库列宽、接口字段长度上限、前端输入框的最大长度三者并不总是同一个值,任何一处更短都会截断地址,而且是静默截断,用户看不到任何提示。

第二层是判断。很多业务不支持配送到偏远地区、不支持邮政信箱、不支持某些国家,这些规则全部建立在地址字段之上。

第三层是传递。地址最终要交给承运方或仓储系统,对方对省份缩写、邮编写法、门牌号位置的期望,可能和你在页面上收集到的不一致。

这三层决定了地址测试的重点不是「能不能提交」,而是「提交之后发生了什么」。

四类典型缺陷分别长什么样

第一类是假地址与「格式合法但不存在」。这两件事要分开看。格式非法的地址应当被拒,这类测试很容易做。麻烦的是格式完全合法、行政区与邮编都对,但那条街根本不存在。实际业务里这种地址只有承运方揽收时才会发现。测试时不必去构造真实不存在的街道,用工具生成一条格式合规的地址,确认系统在接受它的同时,是否有环节试图做真实性判断。如果系统声称能判断地址真伪,那才是需要质疑的地方。

第二类是邮编与省州不匹配。这是最容易漏掉的一类,因为很多校验只管格式、不管对应关系。位数对、字符集对,但邮编属于另一个省;或者省名写法是别名、简称、旧称,与系统内的列表对不上。前者需要跨字段校验才能发现,后者考验的是归一化。可复现的做法是固定一条记录,只改其中一个字段,观察系统的反应是否与改动一致。城市、省份、邮编如果来自不同的数据来源,拼出来的地址几乎必然在某一层失败,这类成因在测试地址数据里另有展开,本质是跨字段一致性被破坏。

第三类是地址行截断。表现为尾部字符丢失,常见触发点是超长街道名、多行地址的第二行被丢掉,以及非拉丁字符按字节截断后出现乱码。第三种形态最典型:长度限制按字符算,数据库列按字节算,一个中文字符占多个字节,于是被截到一半,存进去的是半个字。测试时要准备超过各层限制的样本,并逐层核对最终存下来的是什么,而不是只看提交是否成功。

第四类是配送区域判断错误。边界情况集中在几处:处于配送范围边界的邮编;填了偏远地区却按标准运费计算;地址不完整时判断逻辑默认放行;支持的省份列表与承运方实际覆盖范围不一致。这类缺陷的严重度通常高于前几类,因为它不是拒绝订单,而是接受了送不到的订单。

下表把四类缺陷对照到最容易漏掉的那一项:

缺陷类型 触发位置 最容易被漏掉的检查
假地址 承运方揽收 系统是否声称能判断真伪
邮编与省州不匹配 跨字段校验 省名别名与旧称的归一化
地址行截断 落库与接口 按字节截断非拉丁字符
配送区域判断 提交之后 范围边界上的邮编

最小用例集该怎么排?

不必为每个国家准备一套用例,先覆盖下面十组,它们能命中四类缺陷的绝大部分:

  • 一条完全正常的地址,作为基线;
  • 缺少地址第二行(公寓、楼层)的地址;
  • 缺少省份或邮编的地址;
  • 邮编格式合法但与该省不匹配的地址;
  • 省份写成简称或别名的地址;
  • 街道名恰好等于某一层长度上限的地址;
  • 街道名超过长度上限一个字符的地址;
  • 含非拉丁字符的地址,中文、日文、带附加符号的拉丁字母各一条;
  • 国家切换后未清理旧字段的地址,例如切到美国却留着中国的省份;
  • 配送到不支持区域、邮政信箱或海外的地址。

十条里有八条可以从一个固定标识重新生成,而不是手工敲进去。本站的地址生成工具覆盖多个国家和地区,同一个身份标识配上同一个国家,永远产出同一条记录。把标识写进用例,地址就是可复现的;把地址整段复制进用例,它在数据更新之后就会悄悄过期。

生成之后再用校验工具反向过一遍,确认这批数据本身没有格式问题,能把「造数错误」和「系统缺陷」分开。否则你会花半天去调一个其实是自己样本写错的用例。

缺陷报告怎么写才能被人重建?

一条能被人复现的缺陷报告,结构比文采重要。可用的字段是这几项:

  • 标题:一句话写清「谁在什么条件下发生了什么」;
  • 数据标识:使用的身份标识、国家,以及具体改动了哪个字段;
  • 环境:环境名、版本或提交号、浏览器;
  • 前置条件:购物车里有几件商品、是否登录、使用哪种支付方式;
  • 复现步骤:编号,从打开页面开始,一步一个动作;
  • 实际结果与预期结果:分开写,不要把期望混在描述里;
  • 影响面:影响下单、影响运费计算,还是仅影响展示;
  • 证据:请求与响应片段、落库之后的地址原文。

其中「数据标识」是最容易被忽略也最关键的一项。写「地址填了北京但邮编是上海的」,别人无法确定你用的是哪条数据;写清标识、国家与改动字段,任何人都能在半分钟内重建你的场景。

另外,地址类缺陷一定要附上落库后的原文。页面显示的是你输入的,数据库里存的可能已经被截断、被转录、被补全过,这三个版本经常不一样,而缺陷往往就藏在差异里。

用真实地址还是合成地址?

用真实存在的地址能避免「格式合法但不存在」这类干扰,但会引入新问题:地址是别人的,写进缺陷报告和截图就扩散了个人信息;而且真实地址分布不均,边界情况一条都没有。

更实际的做法是让两者分工。合成的、格式合规的地址用于功能与边界测试,因为它可控、可复现,可以精确构造超长和混合字符的样本;真实地址只用来确认「正常情况下确实能送达」,并且只在你不需要把它写进任何文档时使用。地址字段本身的合规要求,见地址数据隐私。

常见问题

为什么结算页通过了,订单仍然失败?

因为结算页通常只做格式校验,配送区域判断发生在提交之后、调用承运方接口的时候。排查时按链路顺序看:前端校验、接口校验、落库结果、承运方接口的响应。哪一步拒绝了,缺陷就属于哪一步。

省份用下拉框能解决问题吗?

能解决一部分。下拉框把自由文本变成受控值,省名别名和拼写错误的问题会消失。但它引入两个新问题:列表与承运方的覆盖范围是否一致,以及历史数据里的旧值如何映射。切换之前要先确认这两件事。

国际地址要不要按国家分别写用例?

要,但不必每个国家都写。先挑出业务量最大、格式差异最大的几个国家,覆盖邮编位数、字符集、省州层级和门牌号位置这四种差异。差异本身的清单见国际地址和电话格式。

超长的地址该不该直接拒绝?

先看是谁的错。用户输入超过页面限制,属于输入体验问题,应当在输入时就给出提示;输入合法但因为下游列宽更短而被截断,属于系统缺陷。把这两件事混在一起处理,最常见的后果是把长度限制一路收紧到最短的那个环节,于是合法地址也被拒。

本文讨论的是测试方法,不构成对任何承运方服务范围、运费规则或平台条款的说明;具体覆盖范围与计费口径请以承运方与平台公布的最新信息为准,文中样本仅用于测试与演示环境。

继续阅读

随机地址生成器相关文章