了解集成测试,帮助我们写好组件测试!

发表于:2022-12-15 09:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:vb    来源:掘金

  背景
  最近写了较多组件测试用例,由于以前没写过组件测试(or集成测试),在写的过程中曾有些困惑。
  本文主要记录以下问题:
  1、组件测试方法(方法论);
  2、前端测试代码技巧。
  组件测试
  一开始我只是考虑测试组件传入不同的props展示是否正常展示,expose的所有方法是否正常调用。
  但后来慢慢发现有一些方法/用户操作的场景无法覆盖到(方法之间相互影响),然后根据测试反馈的bug增加了一些测试用例,但这样写会很奇怪,
  就是为什么只写这些组合的测试用例?
  举一个简单的例子:
function add(a: number, b: number) {
    return a+b
}
function sub(a: number, b: number) {
    return a - b
}
// 单独测两种方法
add(a, b)
sub(a, b)
// 组合
add(sub(a, b), c)
add(a, sub(b, c))
sub(add(a, b), c)
sub(a, add(b, c))
  这个例子可能不是非常恰当,但可以看出来如果我们要覆盖所有的场景是非常困难的,这导致在写测试代码时非常难受。到底写哪些、不写哪些?还是全部写?怎么评估组件测试是否充分?
  目前关于组件测试的文章很少,基本找不到有详细的说明,但我们可以在集成测试中找到指引。
  集成测试方法
  非增量测试
  大爆炸方法属于非增量式集成测试方法,该方法一次性集成了所有模块,即它不会逐个集成模块,它会在集成后验证系统是否按预期工作。
  增量测试
  1、自顶向下集成
  逐步集成和逐步测试是按结构图自上而下进行的,即:模块集成顺序是首先集成主控模块,然后按照软件控制层次接口向下进行集成。
  从属于主控模块的模块按照深度优先策略或广度优先策略集成到结构中去。
  2、自底向上集成
  从最底层的模块开始,按结构图自下而上逐步进行集成并逐步进行测试工作。
  3、三明治方法
  改进的三明治集成方法,不仅自两头向中间集成,而且保证每个模块得到单独的测试,使测试进行得比较彻底。
  这里每个分类的优缺点/适用场景/策略等都可以参考集成测试,这里不再展开了。
  结论
  在了解了集成测试方法后,其实我没有什么可选择空间(没有这么多测试资源来进行增量测试)。但大量缓解了我的测试焦虑,我只需要进行非增量测试,测试的策略:先独立的测试每个模块(单元测试),然后再把它们组合成一个整体进行测试,最后结合边界条件尽量cover所有的分支/语句。
  前端测试技巧
  其实在写前端测试代码的时候,经常会遇到一个非常困惑的事情,当我调用了某个方法渲染数据的时候,怎么判断渲染是否正常?我在使用的时候有两个技巧:
  1、尽量使用稳定的节点去进行判断,例如我在渲染列表的时候是通过 uniqueId 去检查是否已更新/删除/添加;
  2、使用 screenshot diff 功能,但 cypress 仅提供了 screenshot 功能,没提供 diff 的功能,需要通过 cypress 插件来集成进去;
  3、使用自定义属性选择器(固定作为测试的选择器)。
  很多时候开发和测试并不是同一个人或者同一组人,使用特定的标识方便进行测试,也方便开发快速辨识到这是测试用的。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号