自动运维测试 主动勇猛精进| 青训营笔记

112 阅读9分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 20 天

一、我理解的测试开发

1)测试开发与开发、测试的关系

以前在没有接触测试开发这份工作之前,我总是在思考测试开发岗位到底要做什么?测试开发和测试有什么区别?测试开发是开发吗?测试开发的价值在哪里?一开始我直观的认为测试开发=测试,直到真正在工作实践中,我才慢慢了解到测试开发的岗位需要做什么。

  1. 首先,从岗位名字看区别:先明确一下简称,由于这几个岗位名字看着比较像,很多人都不知道这三者的区别与联系,软件开发工程师(SWE ),测试开发工程师(SWT),测试工程师(TE)
  2. 其次,从各方面能力上看区别,我的理解是:从代码能力要求上,软件开发工程师>测试开发工程师>测试工程师;从掌握知识广度要求上,测试开发工程师>软件开发工程师>测试工程师,从工作沟通能力要求上,测试开发工程师>测试工程师>软件开发工程师

2)测试开发的分类

测试开发主要分为两类:

一类是基于业务驱动型的测试开发。可以理解为业务测试工程师,只是具备了开发能力和质量改进思维,这类测开人员需要扎进业务中,主动挖掘业务过程中各个环节质量的薄弱点并且想办法去解决,通过流程改进、开发出得心应手的工具,让自己的测试工作能够持续高效。
一类是基于框架平台型的测试开发。这类型的测试开发,需要站在更高的纬度来看待产品的质量,他们会对整个研发过程或者某个大的专项去开发一些测试平台、框架,并且将这些能力以服务的形态提供给各个业务线使用,以此来保障全局内建质量。
不管是哪一类,测试开发岗位的核心仍然是“测试”,开发的目的是为了更好的服务测试,测开应该看重的是对测试的理解,以及在这个基础上设计、能开发设计帮助测试人员或者开发、运维人员提高效率并解决实际业务问题的工具。

3)测试开发的本质

查阅资料发现,作为一名业务驱动型的测试开发工程师,其实工作中主要还是围绕着业务展开,我们所做的一切测试、开发的工作也都是为了测试提效,为了业务的质量保障。
其实我认为测试开发的本质应该是“懂开发的测试”,是为了更好的服务产品的“质量”。由于对于目前测试的工作要求,已经不是传统的测试岗位所能胜任的了,除了简单的操作层面的“测试”工作,还需要考虑到从测试设计到数据准备到风险控制以及研发效率提升等各个方面,需要将我们的工作上升到价值层面的“质量保障”,所以测试工作只是测试阶段的质量保障手段之一,要做的是从产品的需求评审到交付上线整个周期的质量保证,除此之外还需要从效能提升、安全生产等各个方面来评估工作质量。

二、测试和开发、产品的关系

在平时工作中,我们接触到最多的角色就是开发和产品,那这三者的关系是如何?
从一个产品交付流水线来看,可能有的人会简单地认为,产品、开发、测试是一个线性关系,产品评审完需求之后,开发进入开发过程,完成开发工作之后,测试开始进行测试,最后完成整个需求的上线。但是实际上,这三者之间其实是一个三角关系,产品在需求评审阶段、开发在技术评审阶段、测试在TC评审阶段都需要这三者在场,站在自己的角色视角提出相关建议,更高质量地交付产品上线。

三为什么需要写前端自动化

大部分企业为了追求开发效率,所以并没有去强制要求员工写前端自动化测试的代码。另一部分企业则会要求前端开发额外写前端自动化测试。那么写和不写到底有哪些区别呢?

不写前端自动化测试代码:

  • 修改某个模块功能时,其它模块也受影响,很难快速定位bug
  • 多人开发代码越来越难以维护
  • 不方便迭代,代码重构困难
  • 代码质量差,参差不齐

增加自动化测试后:

我们为核心功能编写测试后可以保障项目的可靠性

强迫开发者编写更容易被测试的代码,提高代码质量

编写的测试有文档的作用,方便维护

开发速度有所变慢,因为要多写一份测试代码(手动滑稽)

实际上仅仅就为了可靠性、码质量、可维护性是完全值得你去写前端自动化的。作为一名前端开发人员掌握自动化测试技术是必不可少的,就算你工作中不用,也可以放在你的简历中,它是一道靓丽的风景线。

测试介绍

测试在工作中分为以下两个大块:

黑盒测试和白盒测试

  • 黑盒测试一般也被称为功能测试,黑盒测试要求测试人员将程序看作一个整体,不考虑其内部结构和特性,只是按照期望验证程序是否能正常工作。
  • 白盒测试是基于代码本身的测试,一般指对代码逻辑结构的测试。

单元测试

单元测试(unit testing),是指对软件中的最⼩小可测试单元进⾏行行检查和验证。例如一个函数。

单测针对组件 或者函数 或者模块(开发人员知道具体逻辑)

前面建项目的时候提到了jest,实际上在vue中,推荐⽤ Mocha+chai 或者jest来做单元测试,但咱们这边使⽤用 jest 来演示,两者语法基本⼀致。

测试某个函数

在src目录下建立utils目录,再在utils下建立index.js,并写个add函数导出:

export function add(x,y) {
    return x + y
}

在tests下的unit下的example.spec.js中修改(当然也可以新建一个*.spec.js,固定格式的文件)

// import { shallowMount } from '@vue/test-utils'
// import HelloWorld from '@/components/HelloWorld.vue'

// describe('HelloWorld.vue', () => {
//   it('renders props.msg when passed', () => {
//     const msg = 'new message'
//     const wrapper = shallowMount(HelloWorld, {
//       propsData: { msg }
//     })
//     expect(wrapper.text()).toMatch(msg)
//   })
// })

import { add } from "@/utils/index.js";
describe("测试加法函数", () => {
  //测试代码可读性最好
  //分组
  it("一个具体的功能测试,测测试数字相加", () => {
    expect(add(1, 2)).toBe(3);
  });
  it("一个具体的功能测试,测测试数字和字符串相加", () => {
    expect(add("a", 2)).toBe("a2");
  });
  it("一个具体的功能测试,测测试数字字符串相加", () => {
    expect(add("1", 2)).toBe(3);
  });
});

四、测试开发需要具备的技能

1)业务理解能力

一切的测试都不能脱离业务,所以一开始进到一个组之后,首先要熟悉的就是业务,业务测试也是在我们工作中占了大比重的,所以我们需要花日积月累的时间来锻炼自己的业务理解能力。

2) 测试能力

3)排查问题的能力

当我们发现bug之后,其实第一个要做的就是快速定位问题的原因,这也可以帮助开发更快的定位和解决问题,后面说的测试过程中需要做到什么程度,也讲了排查问题的能力的级别。比如,在发现一个bug后,可以先判断是前端还是后端还是数据还是环境问题,通过接口返回、日志排查、代码查看权限、具体定位到代码debug等各种方式进行问题的定位。

4)测试提效能力

除了手工测试,我们还需要利用自动化的方式提高测试效率,我们可以写一些自动化的脚本来减少测试带来的重复性工作,也可以研发效能平台来为质量保障作为基建支撑,效能工具就像是一把剑,可以带着我们大大提升工作的效率。

5)安全生产的意识

如果把效能平台比做是一把剑,安全生产我觉得就像是一个盾,我们可以通过监控、故障演练、预案、快恢等各种方式来进行我们的业务质量保障工作,保证整个产品不出问题,或者出了问题能够风险最小化。

6)善于搜索的能力

知识库如GitHub、CSDN、知乎等等都给了我们很多可以学习的空间,但是由于知识的庞杂,我们还需要有善于搜索和发现适合自己的知识和工具的能力。

7)owner意识

对于自己负责的工作要具备owner意识,其实这需要很强烈的责任心和积极主动的精神,比如作为一个项目owner,需要有把控全局的能力,还要有懂的如何划分和安排任务的能力,还有协调沟通的能力,还要有推动项目进展的能力,还要有预期和拿结果的能力,哈哈,说实话有点难,但是我觉得这是作为一个字节人需要具备的。

五、小结

最后,工程师的智慧结晶都尽在代码之中,而自动化可以促进结晶更加清莹通透、纯洁无瑕、精致完美,值得大家一起持续精进!