关于 QA 和自动化测试

现在流行叫 QA,而不是测试。这是因为大家意识到:保证软件质量,仅仅靠编码完成后的测试是不够的,从需求分析、设计阶段开始就要严格把关。QA 的职责从之前的”编码完成后测试”延伸到软件开发的全过程。

参与了软件开发全过程的 QA,不仅对测试工作更有把握,还能提出产品方面的建议、制定有效的项目计划、找出开发设计存在的问题。例如:

  • 功能是不是过度设计了?用户只要 xx 就够了。
  • 在什么时间点合代码?
  • 这样的表结构,功能满配的情况下,数据量是多少?这样规模的数据,用这样的算法操作,是否影响系统性能?

现在流行敏捷开发,为了保证质量和速度,测试的工作需要向自动化发展。因此 QA 又多了一项任务:编写端到端自动化测试脚本。

这种端到端自动化测试脚本,编写、调试体验很差。打开一个浏览器,模拟用户在网页操作,速度很慢,盯着看让人心急。但编写、调试阶段你还不得不盯着看。其实前端开发更了解元素定位,更清楚用什么定位方式更可靠,但因为编写效率低,影响开发进度,这个工作一般都是 QA 来做。

jsdom 实现了浏览器 api,运行在 nodejs 环境中,可以模拟浏览器。基于 React 的 web 项目 UT 时, ReactDOM 把组件渲染到 jsdom 模拟的浏览器中。

这个方案只用来做 UT 可惜了。如果你把 jsdom 就看作真实浏览器,把请求变成真实请求,这不就是”端到端测试”吗?和 selenium 的区别仅仅是:一个用 jsdom 浏览器,一个用真实浏览器。就连基于 @testing-library/react 的测试脚本,写的也是模拟用户操作,和 selenium 脚本差不多。如下方代码示例,模拟初始化加载和用户点击刷新:

it("loading & refreshing", async () => {
  render();
  expect(
    await screen.findByText(/apolis/i)
  ).toBeInTheDocument();

  user.click(
    screen.getByRole("button", {
      name: /refresh/i,
    })
  );
  expect(
    await screen.findByText(/kzhang/i)
  ).toBeInTheDocument();
});

我理想的样子是: QA 和前端开发共同实现产品的端到端自动化测试。QA 设计测试用例、搭建测试环境、提供用于测试环境初始化的脚本;前端按照 QA 设计的测试用例编写自动化测试脚本,自动化测试脚本中会调用 QA 的环境初始化脚本。

在实际工作中,”端到端测试”也许是终极目标,要实现这一目标,把 UT 做起来是第一步。

一些想法:

  • 使用msw 做 UT 和编码的 Mock Server,共用 handlers。开发新功能时,UT 和编码一起进行,练习看着 test result 开发,通过这种方式,让团队熟悉 @testing-library
  • 团队积累 UT 经验的同时,需总结、提取、封装适合项目 UT 的工具库。
  • 提高 UT Case 的质量,设计更容易发现错误的 UT Case。这一方面需要学习一些测试理论,一方面需要多总结项目中的衰退 Bug。

让 UT 从无到有到快到好。

关于 QA 和自动化测试

Original: https://www.cnblogs.com/apolis/p/15060788.html
Author: apolis
Title: 关于 QA 和自动化测试

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/622082/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【二】pig4cloud项目一键build — 编写发布脚本

    在开发测试阶段,代码从仓储发布到测试服务器总是少不了的过程,在这个过程中我喜欢把一些繁琐的步骤全部全部聚合到一个脚本里面,只需要执行一个脚本或者把脚本配置到jenkins上通过按钮…

    Java 2023年6月8日
    093
  • SpringBoot接口-API接口有哪些不安全的因素?如何对接口进行签名?

    在以SpringBoot开发后台API接口时,会存在哪些接口不安全的因素呢?通常如何去解决的呢?本文主要介绍API 接口有不安全的因素以及 常见的保证接口安全的方式,重点 实践如何…

    Java 2023年6月6日
    0143
  • 【开源】 bsf.mvc spingboot的扩展

    自动requestmapping(无需配置)实现。 2. freemarker java扩展实现,使freemarker更加便于使用。 3. request 参数大小写兼容实现,传…

    Java 2023年6月8日
    092
  • 基于Dom4j实现javaBean转xml的功能

    一、前言前面实现了xml转javaBean的功能,今天继续完成javaBean转xml的功能。这一块实现的比较早现在看来可能有很多可以优化的地方(也说明了我有成长) 三、功能实现 …

    Java 2023年6月14日
    0112
  • MarkDown的基础语法

    MarkDown学习 ## 标题 几个#号+空格代表几级标题 ## 字体 注: 两边分别使用**即可实现字体加粗效果。 注: 两边分别使用两个*即可实现字体斜体效果。 注: 两边分…

    Java 2023年6月8日
    054
  • SQL语句的整合

    基础语法 https://blog.csdn.net/m0_37989980/article/details/103413942 CRUD 提供给数据库管理员的基本操作,CRUD(…

    Java 2023年6月16日
    0118
  • 二分查找步骤及问题总结

    参数: 有序数组arr(这里按升序来讲),待搜索的值target 根据以上步骤可以写出递归、和非递归两种二分查找的方法 代码实现 public static void main(S…

    Java 2023年6月7日
    080
  • Java中使用feign遇到的坑

    1.解析接口返回的数据时,失败了。 feign.codec.DecodeException: Could not extract response: no suitable Htt…

    Java 2023年5月29日
    096
  • 基于java实现的简单区块链

    使用java创建第一个非常基本的区块链 实现一个简单的工作量证明系统即挖矿 区块链就是一串或者是一系列区块的集合,类似于链表的概念,每个区块都指向于后面一个区块,然后顺序的连接在一…

    Java 2023年5月29日
    081
  • Java-函数式编程大全指南

    前言 这里总结记录一下,所有java中可以用到的函数式编程以及使用场景和方法 Original: https://www.cnblogs.com/houzheng/p/160163…

    Java 2023年5月29日
    081
  • java中synchronized关键字

    synchronized是java中的一个关键字,在中文中为同步,也被称之为’同步锁’,以此来达到多线程并发访问时候的并发安全问题,可以用来修饰代码块、非静…

    Java 2023年6月8日
    091
  • Java学习 (八)基础篇 运算符

    运算符 基本运算符 1.一元基础运算(重点) 一元运算符 (a++ / ++a) (a– / –a) 2.二元基础运算 基础 计算返回值类型 关系运算 幂运…

    Java 2023年6月8日
    0101
  • springcloud技术栈系列4:分布式定时任务

    问题 回答 xxljob支持自定义http接口来添加调度任务吗? . 支持的,我们基于低代码的实际场景,封装成了openfeign的接口,这实际上也是一种http接口,我们封装了两…

    Java 2023年6月8日
    092
  • MySQL五:InnoDB线程模型

    转载~ 一、InnoDB线程模型的组成 在Innodb存储引擎中,后台线程的主要作用是 「负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据」。此外它会将已经修改的数据文…

    Java 2023年6月8日
    087
  • MongoDB 学习笔记

    概述 MongoDB 是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库中功能最丰富,最像关系型数据库的。 MongoDB 支持的数据结构非常松散,类似 json …

    Java 2023年6月8日
    0176
  • 记录下在阿里云linux上安装与配置Mysql

    环境:阿里云ECS服务器,系统为centos7.2 用户:root 参考博客: https://blog.csdn.net/kunzai6/article/details/8193…

    Java 2023年6月14日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球