05 | 一个好的自动化测试长什么样?
郑晔
你好,我是郑晔!
在上一讲里我们讲了测试的一个关键点是自动化测试,而自动化刚好是程序员的强项。自从有了自动化测试框架,自动化测试就从业余走向了专业,但这并不是说,有了测试框架你就能把测试写好了,我们来看几个典型的问题:
测试不够稳定,一次运行通过,下次就不能通过了;
要测的东西很简单,但是为了测这个东西,光是周边配套的准备就要写很多的代码;
一个测试必须在另一个测试之后运行;
……
这是让很多团队在测试中挣扎的原因,也是很多人放弃测试的理由。之所以测试会出现这样那样的问题,一个重要的原因是这些测试不够好。这一讲,我们就来讲讲好的测试应该长什么样。
测试的样子
关于自动化测试,其实有一个关键的问题我们一直还没有讨论。我们用测试来保证代码的正确性,然而,测试的正确性如何保证呢?
这是一个会问懵很多人的问题:测试保证代码的正确性,那测试代码的正确性也用测试保证?但你见过有人给测试写测试吗?没有。因为这是一个循环的问题,你给测试写了测试,那新的测试怎么保证正确性呢?难不成要递归地写下去?是不是有种大脑要堆栈溢出的感觉了。
既然给测试写测试不是一个行得通的做法,那唯一可行的方案就是,把测试写简单,简单到一目了然,不需要证明它的正确性。由此,我们可以知道,一个复杂的测试肯定不是一个好的测试。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
自动化测试在软件开发中扮演着重要的角色,然而,很多团队在测试中遇到了挑战。本文从测试的正确性出发,探讨了好的自动化测试应该具备的特点。作者指出,一个好的测试应该是简单明了的,不需要证明其正确性。文章给出了一个例子,将测试分为准备、执行、断言和清理四个阶段,强调了测试用例的简洁性和结构化。作者强调了测试中常见的问题,如缺乏断言和一个测试中包含多个执行目标,提出了相应的解决方案。总的来说,本文通过简单的例子和清晰的逻辑,向读者展示了一个好的自动化测试应该具备的特点,为读者提供了一种思考测试质量的新视角。 文章中提到了A-TRIP这一概念,即自动化、全面的、可重复的、独立的和专业的,作为衡量好的测试的标准。自动化测试的核心增强在于自动化,而测试应该尽可能全面覆盖各种场景,保证可重复性和独立性。此外,作者还强调了测试代码也是代码,需要按照代码的标准去维护,包括清晰的命名、函数的拆分、重构和抽象出测试的基础库等。测试的命名也应该能够清晰地描述测试用例的场景,以及在什么条件下应该出现什么效果。通过这些要点,读者可以了解到好的自动化测试应该具备的特点,以及如何衡量一个测试是否做好。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《程序员的测试课》,新⼈⾸单¥59
《程序员的测试课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(13)
- 最新
- 精选
- إ并向你招手إ祥子Junit5 的@DisplayName 注解,可以文档化测试的内容,用它说明测试的内容和条件可以让测试更友好一些
作者回复: 多谢分享
2021-08-149 - 北风一叶测试四步走:准备、执行、 断言、清理 测试五标准:自动化、全面的、可重复的、独立的、专业的 测试起名:应该怎么怎么样,应该怎么怎么样 当什么条件出现的时候
作者回复: 这个总结很漂亮
2021-08-2527 - 就叫Hugo也行测试的基本结构:我联想到戴明PDCA质量环
作者回复: 这个联想很漂亮,是这么回事。
2021-09-144 - sylan215郑老师对测试理解的很到位,提到的几个理念都非常的准确,而且还做了很精炼的总结,真给力。 1、每一条测试的测试目的必须非常准确,比如我之前推荐的测试用例写法就是「验证XXXX」,测试目的一目了然; 2、每一条测试的测试目的必须唯一,越简单越好,这对于测试执行和测试维护都大有裨益; 3、一般测试会包含 4 个阶段:准备、执行、断言、清理,这是从自动化测试的角度做的总结,也一样适用于手工测试; 4、一个好的自动化测试用例的 5 个特点:Automatic(自动化)、Thorough(全面的)、Repeatable(可重复的)、Independent(独立的)和 Professional(专业的); 5、重点说一下 Independent,每条测试用例之间,尽量降低耦合性,这样对于测试用例的理解和执行,都大有裨益; 以上,期待老师后续的精彩分享。
作者回复: 很好的总结
2021-08-184 - 大茄子实验室背景:从事数仓开发,没有对应的测试人员,也没有使用过测试框架。一般都是自己写测试脚本进行比对 测试后,清理会延迟做,因为一天的数据对,不代表每天的数据对,备份数据会保留一段时间。 问题: 1.命名比较随意。 2.测试有时候不是独立的 3.全面性比较难做到,第一,有可能是开发人员对所有的业务场景没有全面了解。 第二呢,是用户本身对业务场景没有做到全面了解
作者回复: 多谢分享
2021-08-164 - davix請問那種協議交互的場景:來回幾個消息的ㄧ系列過程,用什麼結構好?
作者回复: 把业务和技术实现隔离开,单独测业务,再单独测通信。
2021-08-1324 - aoeTestNG有提供按测试方法顺序执行的注解,开始觉得好厉害,后来发现这样依赖执行顺序的测试耦合性太强了,前面的测试没通过,后面的就无法执行了,现在的测试代码都是像老师说的这样可以独立运行,也回归到了JUnit5,TestNG文档还停留在2000年
作者回复: TestNG 是 JUnit 没升级到 Java 5 语法之前的产物,后来,JUnit 5 升级了,TestNg 也没有太多本质性的创新,路就难走了。
2021-11-093 - 邓志国我喜欢有时候用中文命名测试方法,感觉更容易阅读理解
作者回复: 这取决于团队对于英文水平的要求
2021-08-142 - 晴天了有个问题问下郑大 new a(new b(new c)) 背景逻辑: a类的aa方法, 调用外部依赖b类的bb方法, b类的bb方法, 调用外部依赖c类的cc方法. 问题: 当测试 a类的aa方法时, 应该mock b的bb方法, 还是mock c类的cc方法??
作者回复: 最直截了当的就是Mock B的方法。
2021-12-081 - Geek_3b1096周末来学习
作者回复: 好样的
2021-08-29
收起评论