• 求教,接口 mock 平台原理 at 2022年04月23日

    针对客户端、服务端,两者正常收发请求的场景来解释,一个 mock 平台关键流程如下:

    1. 接受客户端的请求
    2. 按照不同协议解析请求内容(http、https、rpc……)
    3. 按照 mock 平台上配置好的规则,来决定如何应答客户端的请求
      • 可能是直接给客户端返回响应,这个响应是人工配置的规则组成的响应
      • 可能是将请求透传给服务端(你可以想象为,mock 平台假装成客户端来请求原本的服务端),获得服务端的响应,再按照人工配置的规则将响应的部分结构或者内容做调整,把这个经过处理的响应返回给客户端
    4. 结束流程

    对于用户来说可以感知不到 mock 平台的存在,而在网络请求链路上来看,mock 平台就是一个代理角色,是一个中间人(了解一下中间人攻击概念)。mitmproxy是一个经常用来做 mock 平台的代理。

    但实际工作中也不应该只把 mock 平台当成是一个代理,mock 平台是围绕代理这个基本要素来扩展各种外围功能,包括但不仅限于:

    • 拦截请求流量
      • 可实现流量录制与回放
      • 可实现流量实时扫描报警阻断,或转储流量待日后离线扫描或追溯
    • 篡改请求&响应
      • 实现接口 Fuzz 测试
      • 实现 mock 测试(map local、map remote)
  • 非常同意这一楼的观点。

    这个项目更多是帖主展示自己的思考和技术,很值得肯定。
    但是如果让我来用或者让我给其他同学推广,我其实不太情愿,这个平台从实用性上看还处于比较浅层的封装,从产品化的角度来看,我觉得更有实际意义的方向还是如何一站式或体系化地解决问题,而不是单纯把一个工具上升为一个平台。(不是在贬低帖主的平台,只是一些实际看到的经验)

  • 对应不同的路径吧。

    工作中发现有个很蛋疼的问题 -> 简单的脚本来提高效率降低难度 -> 发现周边大家都有这个问题 -> 把简单的脚本做得更加工程化,从脚本变成工具 -> 发现大部门也有这个问题 -> 把工具扩展成平台

    上述情况一般在早期的阶段更多见,问题太多,大家各干各的,没有明显的测试中台概念。


    调研业务线了解共性痛点 -> 针对内部具体痛点并参考业界做法来设计方案 -> 将方案平台化服务化 -> 在业务试点落地验证平台对问题的解决效果 -> 获得业务反馈,迭代平台 -> 平台更大范围的推广

    上述情况是比较标准的中台做事方式,也是更加体系的做事办法,至少在逻辑上来说,上级会更加少挑战。

    至此,已经回答了【你们会去尝试开发工具吗?都开发过哪些工具?一般是通过哪些方面思考?】第一个和第三个问题。

    具体开发过哪些工具,这个看痛点,一些常见的列一下(只是我知道的,不代表是我做过的):接口测试框架(且需要平台化)、度量大盘、监控平台、压测平台、造数平台、mock 平台、UI 自动化框架、云真机、遍历测试工具、各类测试能力平台、发布卡口平台…… 这里说的各种各样的平台它是没有固定形式的,要结合公司的研发体系才能决定它应该长什么样子。

  • 诶,突然发现被点名了🍦

  • 个人已经面了三位数的候选人,社招也面试了超过一百位同学【但是我们部门依然非常缺人,详见 https://testerhome.com/topics/32296】,可以尝试回答这个问题。

    因为这个问题很虚,所以每个面试官的理解都不一样,从我的角度看,应该期望候选人回答这么些东西:

    一、你在测试建设时整体是什么思路?

    预期全局建设完是什么样子,在期间你会先做什么后做什么,为什么选择这样的顺序。其实上面也有答案说了,测试常规的事情不外乎管控流程、提供标准、设计用例、建设监控报警、建设研发测试效能等方面的事情,但是具体到不同的团队现状,决策是不一样的。需要重点突出你的决策过程,呈现你的决策逻辑。你要说明你是如何识别出问题,如何分析问题,如何转化为你要做的事情,如何评判你这个事情做得好不好。

    二、在这个过程中你自己的经验是什么?

    这里的经验会是很泛的东西,可以是目标拆解经验、可以是沟通协作经验、可以是质量运营经验、可以是技术建设经验、可以是带团队经验,但不希望听你将太细的东西,比如具体到某个技术细节如何踩坑就真的没必要说了,说了也不会有什么加分。

    三、你对你负责的测试领域,有没有思考过对应的发展路径

    其实这个问题是从第一个问题里细化出来的,要答好这个问题,是脱离不开对业界的对标和团队实际情况的理解,这个问题之所以单拎出来说,就是要体现你作为某个事情的整体负责人,到底对这个事情的理解和把控程度是多少,说服面试官招你进来你能找资源排除困难去把这个事情独立自主地完成。

    当然还是有一些回答技巧,虚的问题对应虚的回答,如果你不知道面试官要问你什么,你可以先说一些你想展开说的点,让他顺着你的思路去追问你。

    • QPS(Queries Per Second):每秒的用户访问量(也有叫 RPS 的)
    • TPS(Transcations Per Second):每秒的 Transcations 数量(Transcation 是一个抽象概念所以不好用中文直翻,可以类比事务,个人理解是业务单个分支的完整流程,而完整的业务流程可能是多个分支一同完成)

    QPS is basically similar to TPS, but the difference is that a single visit to a page forms a TPS; however, a page request may generate multiple requests to the server, which can be included in the “QPS”.

    上述出自链接

    在搞明白概念的区别之后,再来看术语的应用场景。性能测试关注点是性能上,所以只要把性能解释清楚就好,在不同的公司,无论对与错,无论术语用得专不专业,只要大家都知道在说同一个东西其实也还好。


    回到问题上,性能测试关注的是性能,而制造性能压力一般来源于并发访问量和能使用的资源,所以我们要描述压力大小,就相当于要描述并发量以及提供给系统的资源量。

    TPS 和 QPS 对比,按照老外的解释,TPS 是一个更内部更拆解的概念,在业务足够简单的情况下它可以跟 QPS 等价;QPS 是更面向用户的概念,它把整个系统看成整体,不管你系统内部怎么运作,现在每秒多一个访问过来那就是 QPS 加一,更直观更好理解也更容易统计,所以我推荐用 QPS 来表示并发或者压力程度,当然单纯说 QPS 是没用的,还要加上请求正常响应比例等条件的约束才有实际分析意义,就不展开扯了。

    还有一个很重要的点,要区分好线程数和 QPS 两个概念,个人感觉之所以会把线程数等价于 QPS,可能是习惯将 Jmeter 世界里的概念搬到其他场景来。因为 Jmeter 实现发压是基于多线程模型,不严谨地说就是一个线程发一个请求,很古老的 I/O 模型,在当时可能是很好的方案,但现在看来会有局限。对比与 Locust、Gatling、K6 等更新一代的压测工具,使用更高效的 I/O 模型更有利于榨干发压机的性能,这个时候就再也不是一个线程等价一个请求。所以,不能用线程数来代表并发,而是用该以实际发了多少请求给服务器来统计并发这篇文章写得很好建议阅读。

  • 特意了解一下财经支付同学的质量保障工作,同样也是 mock、沙盒支付、支付白名单 这几种手段。支付服务端是 go,公司内部有流量回放服务应用在支付测试上,不过仅限于线下环境,没看到线上有做特别的测试动作。
    不过恒捷那个思路确实合理,可以在监控报警上面多做建设,或者尝试做做线上支付定期的接口巡检?

    1. 应该是工具误报,因为工具一般是靠判断 response 中是否有回显 script 标签内的内容,这刚好这里的后端把内容重新吐了回来
    2. 实际上也算是一个安全问题,如果线上环境也是这样的抛错,就相当于把服务器的敏感信息暴露出来(用了什么组件,详细报错信息),这些是不应该返回给用户的。
  • 声网的混沌工程实践 at 2022年04月09日

    还会有这个话题的下一篇文章吗?期待看到更多具体的实践细节做法

  • 如果楼主确定了定居在石家庄不考虑其他二三线城市的话,那最重要的还是心态吧。

    1. 明确后续的生活方式,盘点好预想中的收入来源有哪些(工资、副业、投资……),以及不同生活质量需要达到多少收入水平
    2. 明确上面的条件后再来考虑工作,如果单纯测试岗位很明显是死路一条,那就是求变。测试开发如果太难找,那转开发其实没那么难,早期自己辛苦一点尽快熟练业务需要的那套技术脚手架就可以快速适应岗位(不然没啥工作经验的毕业生实习生为什么也能做开发)。关键还是看工资预期,要放低心态不要设置过高预期……
  • 比较好奇,对线上支付接口做拨测的目的是什么?
    个人感觉,似乎除了验证自家服务在不同地区节点的性能之外没有更多的结论。
    在依赖第三方支付接口的情况下,别人对拨测的响应速度无法控制,咱最多只能帮别人发现问题这样子?
    如果不打算连带第三方支付接口一起验证,那确实是 mock 掉第三方支付接口即能达到目的。

  • 由于第一段话和第二段话的逻辑看起来很奇怪,没有能完全理解,上面已经有人说了,你的问题其实不是测试问题,而是本身服务端实现就存在已知的性能问题,和你做性能测试没有关系,问题在线上已经验证出来了,接下来应该是排查修改。

    下面尝试回答你的两个问题。

    问题 1:如何在测试环境去模拟这种数据量较大的情况测试

    1. 解法一:在测试环境伪造同样负载程度的数据,要关注数据类型分布,数据量比例一致(注意,并不线上 1000w 条数据线下就要 1000w 条数据,线上线下配置往往不对等)等问题;数据伪造的方式,有脚本批量生成、线上导流脱敏生成,一般需要待测试标志方便后续清理,或者影子库的方式去处理。
    2. 解法二:如果数据量级不好伪造,那就重新搭另一个测试环境。这个新测试环境的硬件配置要更差,差到在较小测试数据量级时已经出现性能问题,也是另一种思路。

    问题 2:测试标准怎么定

    我假设你说的是性能测试标准,一般主要关注以下维度:

    • 响应时长维度:文字意思
    • 响应正确率维度:文字意思
    • 机器资源维度:cpu、内存、I/O(可以泛化到缓存和数据库的速度)、网络带宽

    思路是,在一定时长范围内,满足 xx% 响应率,能压到多少 QPS,这个 QPS 是否达到预定目标,在压测过程中有没有发现资源问题……具体数值,要从线上历史数据去分析预测,与研发和产品商讨确定。具体可以看看服务端压测怎么做

  • 我在 Z 厂的半年工作总结 at 2022年04月06日

    好的测开,确实还是得从业务中走出来,对业务痛点有亲身摸爬滚打经历,再慢慢走到中台化服务化

  • 三十而立,我们立了什么 at 2022年04月01日

    感觉是精力分配转移了,年纪越大越清楚想要什么,精力管理得越来越好,鸡毛蒜皮的事已经不入脑了😀

  • 不错,很明确自己的学习路径,继续加油,做到学以致用,实践到工作里加深理解(当然不要盲目实践)

  • 22 年的求职 at 2022年03月30日
    • 一方面,小厂由于体量小多数可能还是以业务生存为主,在具体方向深度上大多数时候是打不过大厂的,所以小厂看起来无法满足楼主的需要。
    • 另一方面,大厂对于楼主年龄的候选人,应该会有两种方向的要求。要不是能带团队在某个领域方向上发展壮大,做到细分领域的 top(团队带领者),这个方向显著的要求大概是具备较好的视野、规划能力、管理能力;要不就是有非常强的个人能力可以解决大家都解决不了的技术问题(个人贡献者),专一在某技术领域上发展为没有任何人能替代的资深专家。或许楼主可以想一想自己比较适合哪个方向吧,毕竟时间对于楼主来说越来越宝贵,时间花在刀刃上,让自己的能力模型符合大厂的理想,可能会更有利。

    至于技术深度方面上,可能得有标杆基线才能去评价深度,比如领域内大家一般都做成啥样,有些什么地方大家可能没做,这样去评估可能目标性更强。
    有些时候太钻牛角尖确实不是一件好事,“够用就好” 和 “深挖到最底层” 并不就是一个贬义一个褒义,还是要区分场景去看待。如果在一个快速发展的地方,“够用就好” 是一个理智的行为,强行挖深度会带来负面效果,最直接的表现可能就是自嗨和闭门造车。“深挖到最底层” 要看周围环境是否允许,当然如果是业余深挖是鼓励的,工作上去花时间深挖,就真的要权衡 ROI 了,可能有更多更重要的事情自己装看不见,挑活不想干。有时候老板可能也不好意思挑战,要自己意识到不合适。

  • 22 年的求职 at 2022年03月29日

    我看下来有些疑问(好奇)

    1. 作者个人定位是什么?专精的哪个领域范畴?之所以这样问,是看到楼主快 40 了,还有在切换新领域(最近在被老板逼着看编解码的算法,想的是超越 GOOGLE 开源),挑战新方向是好事,但经常在个人的历史经验清零的状态下面对工作,不好发挥出独特的价值,很容易被扣帽子说 “工作年限与能力不匹配”。
    2. 作者希望待在一个什么团队,觉得团队对自己的要求是什么,自己希望从团队里获取的是什么,又觉得能给团队带来的是什么?
    3. 年纪大经历多,确实不会再愿意做简单的事情,那找到一个合适的长期做下去的岗位的阻碍是什么?是个人原因还是外部原因?频繁跳槽我理解是进来后做的事情跟进来前了解的对不上。
  • 迟来的总结与回顾 at 2022年03月23日

    在豆瓣慢慢蹲大佬的新书

  • 测试开发到底应该干点啥 at 2022年03月22日

    本质职责:保产品质量底线,如有余力,再来说提升研发测试效率

    1. 常见的标准质量体系是什么
    2. 业务形态相关的特型质量问题在哪里
    3. 你的数据度量大盘有没有

    呈现上,你的能力地图(都已经有些什么能力),你的风险地图(盘点业务潜在的质量问题),早期通过度量大盘驱动业务建设,后期通过能力成熟度模型深化工程能力,这一套套看似官话套话的东西,理解下来,够做好多年。

    1. 深度结合公司内部的研发体系,从 流量抓取、发压机部署、测试流量染色、发压策略配置、压测度量 等各个环节做更深度的定制,得到更好的效果。这个是最主要的原因,大厂的基本环境,不是外部系统搬过来就能用的。
    2. 方案成熟,目标明确,建设起来晋升涨工资。
    3. 带一拨人排坑撸出来后,跳槽下一家公司涨工资,经验还能再复制一遍。
  • 中高阶的知识一般来源有:进阶书本、twitter 等各类外国社交论坛、paper、工作实战、业界了解等……

    测试技术相对来说,信息获取渠道更加局限,因为很多深入的测试技术是细分到具体领域的,而不会被人当成测试单独放在一起。

    比较可行的方式:工作实战、业界了解、paper。(书本太少、社交论坛很少深入探讨测试或者质量,更多时候可能放到效能工程里头去)

  • 数据为什么会走丢了呢? at 2022年03月15日

    找到了两篇相关文章:

    没想到协议栈底层原来会这样处理数据,send函数只是将数据写到了内核缓冲区,所以send函数的返回值不代表对方已经收到多少数据,挺有意思。

    1. 测试单独部署一个环境,在上面随便搞,搞完全量清除下次再用
    2. 测试数据添加一个标识,比如 id 或者 name 统统以某种特征开头,测完后手工 sql 删除
    3. 参考 3 楼
  • 个人看法,只要不是过度监控,就是有做得必要。
    收益:

    1. 尽早发现问题,尽早做出响应,争取更多时间,不用多解释
    2. 排查定位问题,如某特定类型的 error 日志开始暴涨,很容易知道是谁的变更引入问题

    但是在具体实施时要考虑一些因素:

    1. 监控触达率,不要搞低效的监控通知机制,比如群里甩个没啥信息量的报警,除非有明确的奖惩机制,否则一般没人管
    2. 监控误报率,监控不是做了就完事,是需要持续运营跟进的,不然后面监控准确性越来越低会直接影响正常工作,监控变成了垃圾
    3. 监控覆盖率,如果当成是一个正儿八经的事情来做,就需要考虑这个点,否则可以不管