news 2026/10/9 15:01:18

微信朋友圈功能测试全攻略:从用例设计到自动化与安全验证

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微信朋友圈功能测试全攻略:从用例设计到自动化与安全验证

“如何测微信的朋友圈?”是我在面试测试工程师时最喜欢丢出去的一道题。它不像“如何测试一个登录框”那样已经被讲烂了,也不像“如何测试电梯”那样需要纯逻辑发散,它卡在一个很微妙的位置:几乎每个面试者都刷过朋友圈、发过朋友圈,甚至踩过“可见范围设错”这种社死级的坑,但真能把这道题讲到面试官点头的人并不多。

这道题表面上问的是功能测试,实际上在考察四件事:需求澄清能力、测试设计能力、专项测试的完整度,以及沟通表达的逻辑性。今天我不讲标准答案,就按照我在一线做微信业务测试的实际思考路径,把这个题目彻底拆开。你会看到,第一步不是写用例,而是把需求边界问清楚;第二步是把朋友圈拆成一张功能地图;第三步才是真正的用例设计、专项测试和自动化落地。这篇不只是一份面试答案,也适合刚转岗测试的朋友当业务测试案例来读。

1. 面试官到底在考什么:这道题背后的四个层次

1.1 先别急着写用例,需求边界才是第一关

很多候选人听到题目就开始背用例,什么“输入框为空”“输入超长字符”“密码错误提示”……这套东西只能证明你背过测试概念,不能证明你理解业务。微信朋友圈是什么?它不是一个单一页面,而是由发布、浏览、互动、权限、删除、举报等多个模块组成的社交业务闭环。面试官问“怎么测”,前提是“测什么”还没定。

所以第一件事是反问澄清。你要确认几个关键信息:

  • 被测对象是哪个端?iOS、Android、PC端、Mac端,还是小程序内嵌的朋友圈能力?
  • 测试目标是新功能上线、老功能回归,还是专项优化?
  • 本次关注重点是功能正确性、用户体验、性能容量,还是安全合规?
  • 测试环境里有没有测试账号、测试好友关系、可用的图片视频素材?

如果你不澄清,把客户端所有端的用例都堆上去,面试官反而看不到你的优先级判断。新手求全面,老手求准确,你给出的范围越清晰,后续用例才越有说服力。

1.2 “朋友圈”的功能地图:拆到模块级别

把“朋友圈”拆成模块,我习惯按用户使用路径来拆。朋友圈对用户来说就三件事:发出去、刷出来、玩起来(互动)。围绕这三件事,功能地图大概是这样的:

  • 内容生产:发文字、发图片、发视频、选位置、@好友、提醒谁看、同步到其他平台、保存草稿。
  • 内容消费:下拉刷新、上下滑动浏览、图片视频加载、分页加载、点击进入详情、查看原文。
  • 互动反馈:点赞、取消点赞、评论、回复评论、删除评论、关闭评论、可见性设置。
  • 关系与权限:好友可见、部分可见、不给谁看、仅自己可见、陌生人有限可见、屏蔽好友、拉黑后的关系处理。
  • 管理与治理:删除动态、设为私密、举报、投诉、屏蔽广告。
  • 账号与多端:多设备登录同步、账号切换后的展示差异、平台间数据一致性。

把这个地图写出来,说明你清楚“朋友圈不是一个页面,而是一整套状态机和规则”。后面所有测试点都能挂到这张地图上,不会漏,也不会重复。

1.3 从“功能点”到“测试点”的转化思路

有了功能地图,第二步是把它转化为测试点。这里建议不要平铺直叙地罗列,而是用经典的测试设计方法过一遍:

  • 等价类:文本长度、图片数量、视频大小这些参数先划分类别。
  • 边界值:重点测“恰好等于上限”和“超过上限一单位”的情况。
  • 状态转换:动态从草稿、发布中、发布成功、删除、投诉等多个状态之间流转。
  • 场景法:把单个功能点串联成一条完整的用户场景,比如新用户加好友、发一条仅好友可见的动态、好友点赞评论、再改权限、最后删除。

这四种方法不是割裂的,需要组合使用。比如“发送中杀进程”这个用例,用状态转换法更容易想到,单纯列输入输出反而容易漏。真正好的测试设计是“方法服务于场景”,这也是面试官想听到的思考过程,不是用例数量的堆砌。

2. 功能测试用例设计与边界场景拆解

2.1 发布朋友圈:从编辑到发送的完整链路

发布这条链路,可以拆成三段来看:编辑阶段、发送阶段、发送成功后。

编辑阶段,核心是文字、图片、视频的组合限制。朋友圈文字最多约2000字,超过后是否有截断提示?表情是否按一个字符计算?文字里带链接时,是变成纯文本还是可点击超链接?换行多了会不会影响卡片排版?图片最多9张,第10张能否点选?9张里混入GIF、HEIC、PNG超大图,上传策略是否一致?视频有时长和大小限制,超限后是压缩还是拒绝?这些边界值都要实测确认。

发送阶段的异常处理是最容易翻车的地方。断网、弱网、飞行模式下点击发表,页面是提示“网络异常”还是假装成功?切后台再回来,内容是否还在草稿箱?发布过程中杀掉进程,重新打开后那条动态是发成功了还是无声丢失?失败重试时是重新上传还是断点续传?用户在上传九张图时切换App再回来,是否会出现重复上传或进度错乱?

发送成功后还要看真实落库和展示。发布后立刻回朋友圈,第一条是不是自己的新内容?多端同时在线时,iPad上是否同步出现?刷新后顺序是否按照时间倒序?时间显示是“刚刚”“x分钟前”还是具体时间?跨时区用户看到的时间是否错乱?

这里我放一个小范围用例示例,方便大家理解边界值怎么落地:

测试场景前置条件操作步骤预期结果
文字长度边界值已登录输入2000字发布发布成功,展示完整
文字超长已登录输入2001字发布有截断或明确提示
图片数量边界已登录选择第9张图片第9张可选中
图片数量超限已登录在选择器中点第10张第10张不可选或置灰
发送中断网后恢复弱网点击发表后断网,再连网动态自动重发成功,且无重复

还需要注意一个细节:“提醒谁看”和“@好友”的底层逻辑不一样。@好友会把对方拉进评论关联,提醒谁看只是触发通知。“提醒的人”和“可见范围”是否有交集校验?如果提醒了一个不在可见名单里的人,对方到底能不能看到?这类组合条件在功能测试里特别容易出现规则漏洞。

2.2 可见性与权限:最容易翻车的隐私场景

朋友圈的隐私是业务里最复杂的部分,也是面试时最加分的部分,建议重点展开。先列几个必须覆盖的可见范围:

  • 公开(所有朋友可见)
  • 部分可见(勾选好友)
  • 不给谁看(排除好友)
  • 仅自己可见
  • 陌生人视角(非好友只能看到有限内容)

每一种范围还要叠加“修改时机”的测试:发布后修改可见名单,是否对历史动态生效?把某个人从“部分可见”里移除,他之前是否还能看到这条动态?如果可见名单调整后对方已经点赞评论过,这条互动记录是否会被抹掉?这些规则都和权限快照有关,测试时要重点关注。

这里我特别想说一个权限组合的坑:把好友设置为“不看他/她”,再发一条动态,选择“部分可见”包含这个人,最终对方能不能看到?“不给谁看”和“不让他看我”是两个完全不同的设置,前者控制对方能否看到你,后者控制你能否看到对方。这两个开关同时存在时,优先级怎么算?如果其中一个开关没有生效,用户感知非常明显,轻则尴尬,重则投诉。所以权限测试不能只测正向流程,还要把开关组合做成矩阵用例。

提示:权限类测试,最忌讳用同一个账号既当发布方又当验证方。至少要准备三个账号:一个发布方、一个正常好友、一个陌生人,否则很容易漏掉可见性问题。

2.3 互动闭环:点赞、评论、回复的规则细节

互动测试不要只看“能点赞能评论”,重点在于规则的幂等性和可见性。

先说点赞。重复点击“赞”是否会变成两次?取消点赞后再次点赞,对方是否收到两条通知?点赞后删除动态,点赞数据是否被清掉?如果用户在自己评论下面回复自己,是否会产生多余的提醒?

再说评论。评论的排序是正序还是倒序?评论里的@是否会被识别为可点击跳转?删除一条动态后,下面的评论是否同步消失?删除某条评论后,针对该评论的回复列表如何处理?发布者关闭评论后再开放,期间用户的评论请求怎么处理?评论里发超过一定长度的文字,是自动折叠还是会撑爆卡片?

这里最容易被问住的是“共同好友的可见性”。你和A是共同好友,你评论了B的动态,A能不能看到你的评论?如果B选择“部分可见”但不包含A,那么A之前看到你评论B动态的页面里,这条评论是否会实时消失?这类问题关系到的是“内容流对每个用户来说是被裁剪过的视图”,测试时不能只看发布方视角,还要切换到其他好友视角逐一验证。

2.4 删除、屏蔽、拉黑与异常操作组合

这一组我一直认为是朋友圈业务里最考验逻辑的用例。

删除动态后,好友端刷新是否立即消失?评论过的好友再进入详情页,是提示内容已删除还是直接404?删除后重新发布一样的内容,是全新动态还是恢复旧动态?分享到群聊或会话里的朋友圈链接,在动态删除后还能否通过历史消息打开?

屏蔽和拉黑就更复杂了。你屏蔽了某人,对方看不到你新发的动态,但他之前给你点的赞是不是还在?拉黑一个好友后,你们彼此之间的历史评论和点赞是否对双方都隐藏?解除拉黑之后,这些痕迹是恢复原样还是永久消失?如果拉黑后再通过群聊加回好友,历史内容是否可见?这些问题没有唯一答案,不同版本甚至可能行为不一致。所以“先设计用例,再到真实环境中验证,最后把结论沉淀成回归用例”才是正确路径。

3. 非功能专项:界面、兼容、网络与性能

3.1 UI/UX 适配与多机型验证

朋友圈是一个图文混排的信息流页面,UI适配的坑比普通表单页多得多。文字长度不同、图片数量不同、视频是否自动播放,都会影响卡片高度和布局。全面屏手机要额外注意底部安全区、顶部状态栏沉浸式样式;折叠屏、平板和横屏状态下,朋友圈是不是还保持单列展示?深色模式下背景、文字、图片占位图是否都能正确切换?系统字体放大到特大号,卡片会不会溢出,长文字会不会被截断?

图片加载同样需要重点覆盖:加载中的占位图、加载失败后的重试按钮、点开九宫格看大图时的左右滑动、双指缩放、保存到相册的权限提示。朋友圈里还有“视频自动播放还是点击播放”的逻辑判断,在Wi-Fi和蜂窝数据下可能有不同的默认策略,这个策略在每个版本都可能微调,需要专门确认,而不是想当然。

3.2 网络异常与弱网测试

这部分建议带上工具讲,会显得你有真实测试落地经验。朋友圈的弱网测试,我常用Charles来做限速,把网络配置成高延迟、低带宽,模拟2G/3G信号,再触发各个用户操作。

要覆盖的网络场景至少有这些:

  • 飞行模式下打开朋友圈,是否有明确的错误提示?
  • 弱网下拉刷新,是显示“加载中”还是白屏?长时间不结束,超时机制是多久?
  • 发布视频时网络中断,已上传的部分是否保留,恢复后是续传还是重新传?
  • 图片在弱网下是否按模糊图到清晰图的方式渐进式加载?还是一直转圈?
  • Wi-Fi切换到4G时,正在播放的视频是暂停、继续还是重新加载?是否给出流量提醒?

弱网测试的结论不能只写通过与否,要记录具体的响应时间、是否出现toast、是否有重试机制。这些数据以后可以转成性能指标,也可以直接在回归阶段做对比。

提示:用Charles做弱网模拟时,记得只对测试设备开启限速,不要对整个电脑限速,否则调试工具本身都会卡死。

3.3 性能、稳定性与资源占用

朋友圈这种信息流页面,性能问题有几个高频爆发点:首屏加载耗时、滑动流畅度、图片内存占用、长时间停留的耗电。

首屏加载方面:冷启动后进入朋友圈,首屏内容什么时候出现?是在有网的情况下“秒开”,还是需要等图片全部加载完?如果首屏接口返回慢,有没有骨架屏或本地缓存兜底?我一般会关注P50和P95耗时,至少保证主流机型在普通网络下,首刷在1秒内可交互。

滑动流畅度最容易在低端机上暴露问题。连续快速滑动朋友圈,帧率是否低于25fps?图片复用到一定数量后,内存是否持续上涨而不是被回收?用LeakCanary或者PerfDog观察一段时间,如果内存曲线只升不降,大概率是图片缓存策略或列表复用出了问题。还有一个容易被忽略的点:长时间挂在朋友圈页面,播放视频时发热、掉电、卡顿,这类稳定性测试适合用自动化脚本长时间循环跑,而不是手工点几下就完事。

3.4 兼容性矩阵设计

朋友圈是微信的核心功能,兼容性测试的范围必须包括三类:系统版本、设备品牌和分辨率、微信版本。

我的做法是先拉一个兼容性矩阵,提前把主流真机列出来:最新旗舰机、上一代中端机、低端千元机,以及用户量还比较大的旧iOS版本。真机不是越多越好,重点是覆盖不同的屏幕尺寸、不同RAM大小、不同系统版本。同时,还要覆盖“低电量模式”“大字体”“深色模式”等系统设置项。

微信版本之间也有兼容性问题。朋友圈的接口经常升级,老版本微信可能调用新接口失败,所以测试时要关注自己负责的版本和上一个稳定版本的兼容性,必要时保留老版本客户端做回归。真实环境里,用户根本不会因为你发新版本就立刻升级,兼容矩阵里“比当前版本低两个大版本”的组合,有时比新功能本身更容易出事故。

4. 安全测试与数据保护

4.1 越权与数据隔离

朋友圈最容易出安全问题的地方就是越权。所谓越权,就是普通用户通过篡改请求参数、遍历ID、绕过客户端逻辑,拿到了本不该看到的数据。比如直接去访问某条接口,把ID字段改成别人的内容ID,看返回结果是否包含对方动态内容。

测试方法不算复杂:用Charles抓包,把请求里的标识字段改成其他用户的内容ID,再重新发送。如果返回了非本人可见的数据,那就是严重的水平越权。更隐蔽的问题是接口返回的数据比客户端展示的多:比如客户端不展示“仅自己可见”的内容,但响应里带了相关字段,这依然属于数据泄露风险。测试时要专门做一次“响应数据脱敏”检查,确保不可见内容在传输层就已经被过滤,而不是只在前端隐藏。

4.2 隐私设置与敏感信息

隐私开关之间是有联动效应的。用户把朋友圈设置为“仅最近三天可见”,新加的陌生人看到的是最近的动态还是空页面?用户关闭“允许陌生人查看十条朋友圈”后,别人通过群聊点进头像还能看到内容吗?动态里带上定位,别人看到的是城市级别还是精确坐标?分享到外部平台时,是否暴露了手机型号、微信号、头像原图等额外信息?

还要特别关注原图的隐私问题。很多用户发照片时没注意“原图”会携带EXIF信息,包括拍摄时间、经纬度甚至设备序列号。测试时要确认,发送原图后在朋友圈展示的是原图文件,还是经过二次压缩、擦除EXIF后的文件。这类问题一旦出安全事故,影响范围远不止功能层面。

4.3 抓包与接口安全验证

抓包的思路可以在面试时直接讲一遍。我用的是Charles,步骤大致是:手机和电脑连同一个Wi-Fi,手机设置代理到电脑IP,安装Charles的SSL证书,然后就可以看到朋友圈相关的HTTPS请求。

抓包能验证的不仅仅是功能逻辑,还有接口安全性。核心关注点有四个:

  • 是否强制HTTPS?有没有降级为HTTP的接口?
  • 关键业务参数是否有签名,还是明文传输?
  • 登录态过期后,接口是否返回403或跳登录,而不是继续返回业务数据?
  • 删除、举报、拉黑等高敏感操作,后端是否有独立校验,而不是仅凭客户端传参?

这套检查结果在面试时说出来,会比单纯说“我用过Charles抓包”有说服力得多。

5. 自动化测试怎么落地

5.1 从手工用例到自动化用例的筛选

朋友圈的用例非常多,但并不是所有用例都适合自动化。我看到很多团队一开始就想把全部功能自动化,最后维护成本拖垮了整个项目。我的筛选标准很简单:需要重复回归的、数据组合繁多的、跨版本稳定性要求高的,优先自动化;依赖复杂人工判断的UI视觉效果、涉及真实社交关系链的权限组合,人工测试更合适。

在方向上我倾向于“接口自动化为主,UI自动化做冒烟补充”。接口自动化速度快、稳定性高,适合验证发布接口、评论接口、权限校验这些逻辑;UI自动化则覆盖“核心主流程能跑通”,比如登录、发朋友圈、刷新看到内容、点赞、退出。

5.2 Appium + pytest 的实践要点

我现在的朋友圈UI自动化用的是Appium加pytest。Appium负责驱动手机,pytest负责组织用例和断言。说一下几个最核心的实践要点:

定位器不要太依赖id。微信的控件id经常带随机后缀,用xpath和text内容组合定位反而更稳。等待条件用显式等待,不用固定sleep,不然脚本时快时慢。启动时处理掉权限弹窗、升级弹窗,不然第一个用例就直接翻车。

测试数据必须独立。不要用员工自己微信号去跑自动化,很容易互相同步、污染数据。我一般准备一套测试微信号矩阵,包括两个普通好友、一个拉黑账号、一个非好友账号、一个大量动态的账号,这样权限类和分页类场景都能覆盖。

用例之间做好清理。跑完自动化的数据要么删掉,要么标记成自动化专用,避免干扰手工测试。可以用setup和teardown在用例前后造数和清理,必要时直接调用后端测试接口清数据。

5.3 接口自动化与数据构造

接口自动化做朋友圈测试,核心任务是数据构造。比如要测“好友看不到某条动态”,直接在UI上一层层操作太慢了,更快的做法是先调用创建好友关系的接口,再发布一条指定可见范围的动态,然后用目标账号的接口去查询,断言返回里没有这条动态。

这里有一个细节:时间依赖。朋友圈分页和时间排序强相关,测试数据里如果包含“昨天”“三天前”这类时间字段,接口返回的顺序可能不稳定。我踩过的坑是,用当前时间造数后,跑一段时间再执行用例,顺序和预期对不上。最后是固定造数时间,或者在断言里对排序字段做兼容才解决问题。

自动化脚本的断言要判断核心结果,不要追求所有字段都完全相等。比如发布动态后,断言返回了新的内容ID、可见状态正确、评论数从0变成1,就可以了。全字段断言在版本更新时脆得一碰就碎,反而增加无意义的维护成本。

6. 面试回答话术与避坑清单

6.1 一分钟版本的“标准回答”框架

如果你明天要去面试,需要一个容易复述的回答框架,我建议这样说:

“我会先澄清被测范围,再拆功能地图。假设测的是iOS版朋友圈的发布和互动。第一步列发布链路:文字、图片、视频、位置、可见范围;第二步列可见性与互动:部分可见、不给谁看、点赞评论、删除屏蔽;第三步补专项:弱网、兼容、性能、安全越权;第四步回归和自动化:核心链路跑自动化,复杂权限组合用测试账号矩阵手工覆盖。”

这个框架的优点在于,它先告诉面试官你懂需求澄清,再展示你系统化拆解的能力,最后落到具体手段,逻辑层层递进,比上来就背二十条用例有力得多。

6.2 加分的细节:测试右移、灰度、线上监控

如果面的是高级岗位,你还可以往“测试右移”方向补一段:朋友圈这类核心功能,除了上线前测试,还需要设计上线后的监控方案。

比如,发布接口的成功率、评论接口的耗时、朋友圈首刷的崩溃率,这些都值得在灰度阶段按天盯。灰度放量时,要关注不同可见范围的配置有没有生效,而不是只盯一个“功能可用了”。如果线上出现“某个版本用户看不到新内容”的反馈,常见排查方向是先看发布接口成功率,再看下发内容的权限缓存,最后看客户端版本分布。

这些内容会让面试官觉得你不只是一个执行者,而是一个能看到线上质量全局的测试负责人。

6.3 踩过的坑与个人心得

最后分享几个我在朋友圈测试里真实踩过的坑。

第一个坑是“没考虑对方视角”。刚做业务测试时,我发了一条仅自己可见的动态,自己看着一切正常,但忘了换另一个账号去验证不可见效果。后来发现有些版本里,部分可见名单的校验逻辑在服务端缓存了旧数据,客户端刷新后还是能看到。从那以后,我所有的权限用例都是“发布方验证一次,接收方验证一次,陌生人再验证一次”。

第二个坑是“自动化脚本在周末必挂”。因为测试账号存在空闲超时和离线状态,很多人工作日保持在线,周末无人操作就被踢下线,脚本跑起来第一步就失败。现在我会在自动化用例前置步骤里加一个登录状态检查,一旦失效就自动重新登录,不能假设环境永远不变。

第三个坑是“只用Wi-Fi测性能”。朋友圈的性能问题在移动网络下比在Wi-Fi下明显得多。图片加载策略、视频缓冲、接口超时,在不同网络下表现完全不同。我现在做性能专项都会强制切到至少两种真实网络去对比,不能只看办公室的千兆网。

我个人在实际带团队的体会是,面试题的意义从来不是让你背答案,而是看你如何把一个所有人都用过的东西,拆解成别人没想到的测试维度。朋友圈这个题目真正值钱的不是那些用例列表,而是“需求澄清、功能地图、专项展开、落地复盘”这套思考路径。如果你能把这条路径讲顺,再自然带出几个真实踩坑细节,面试官基本拦不住你。

最后再分享一个小技巧:平时刷朋友圈的时候,别只当用户,多问自己一句“如果这条逻辑是我负责的,我要在哪几个场景下测试它”。带着这个视角刷上两个月,这类面试题对你来说就不再是“经典难题”,而是送分题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/9 15:00:45

财经会计账务系统:从凭证到报表的业财一体实战指南

简介:财经会计账务系统是一份基于PowerBuilder 9.0开发的财务软件完整源码包,面向财经领域财务人员、PB开发者及需要定制账务系统的企业。系统涵盖总账、明细账、科目设置、凭证处理、报表生成、成本核算、税务处理与资产管理等模块,借助PB9.…

作者头像 李华
网站建设 2026/10/9 15:00:10

VSCode扩展离线安装全攻略:从VSIX包到TaoToken配置的完整实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/9 14:51:44

请假管理系统源码与数据库设计:审批流、余额扣减与并发控制实战

简介:这份资源面向计算机相关专业学生、课程设计开发者及需要快速搭建请假审批流程的开发者,提供一套请假管理系统的完整实现素材,涵盖源码、原型与数据库三部分,适合作为毕业设计、课程作业或小型企业办公自动化的参考方案。压缩…

作者头像 李华
网站建设 2026/10/9 14:49:32

FireBird 2.5.2 Win32数据库包:安装、管理与避坑实战指南

简介:FireBird 2.5.2 数据库安装包与 FireBird Maestro 管理工具的组合资源,面向需要在 Windows 平台快速部署轻量级关系数据库的开发者、数据库管理员及 Delphi 应用开发者。FireBird 脱胎于 Interbase 6.0,支持存储过程、触发器、并发控制&…

作者头像 李华
网站建设 2026/10/9 14:48:25

uni-app项目创建到安卓APK打包保姆级实操教程

我最早接触 uni-app 是在几年前,当时手上一个项目要同时覆盖微信小程序、H5 网页和安卓 App 三个端。前后对比了好几个方案,最终选它,原因说白了就一句话:把多端开发语言统一到 Vue 这一套语法上,后端接口、公共组件、…

作者头像 李华
网站建设 2026/10/9 14:47:48

IPTV元数据治理:SQLite轻量数据库设计与EPG注入实战

简介:本资源为IPTV系统与数据库集成应用的技术学习包,面向网络工程、流媒体开发及广电系统运维方向的中高级技术人员与高校相关专业学习者,聚焦IPTV平台中用户管理、节目编排、权限控制等核心业务的数据建模与后端支撑实践。压缩包共362个文件…

作者头像 李华