• 12
  • 12
分享
  • 前端必备--自动化测试——软件测试圈
  • 恬恬圈 2021-01-18 10:38:09 字数 4285 阅读 2879 收藏 12

测试分类

       常见的开发流程里面,都有测试人员,这种我们称之为黑盒测试。测试人员并不需要去管实现机制,只看最外层的输入输出。比如一个计算机加法页面,设计人员会设计n个case,去测试该加法的正确性。这种如果我们开发人员用代码去做的话,我们称之为e2e测试。

       还有一种测试叫白盒测试。我们针对?些内部机制的核?逻辑,使?代码进行编写,我们称之为单元测试。

       其实我们代码里面的console.log,也算是一种测试的雏形。

       项目源码和更多案例放在github上面,欢迎star.

测试的好处

       组件的单元测试有很多好处:

  • 提供描述组件?行行为的?文档

  • 节省?手动测试的时间

  • 减少研发新特性时产?生的 bug

  • 改进设计

  • 促进重构

       动化测试使得?团队中的开发者可以维护复杂的基础代码。让你改代码不再?心翼翼

单元测试

单元测试(unit testing),是指对软件中的最?可测试单元进行检查和验证

       在vue项目中,我们可以看到vue-cli推荐两种单测方式:Mocha+chai 或者jest,我们这里使?jest演示,他们的语法基本?致, 新建kaikeba.spec.js,.spec.js是命名规范。jest文档

       Jest api介绍:

  • describe : 定义?个测试套件

  • it :定义?个测试用例

  • expect :断?的判断条件

  • toBe :断言的?较结果

       jest 也有多种方式,可以直接在测试文件中写一个的test或it用来测试,也可以使用describe 函数,创建一个测试集,再在describe里面写test或it 。

       在jest中,it和test 是一样的功能,它们都接受两个参数,第一个是字符串,对这个测试进行描述,需要什么条件,达到什么效果。第二个是函数,函数体就是真正的测试代码,jest 要执行的代码

       如果测试代码涉及到接口和数据库数据访问,可以考虑两种方案:

  1. 制作假数据。

  2. 制作单元测试数据库。

       测试函数

       写一下代码:

// example.spec.js
function testAdd(x,y){
  return x+y
}
describe('test add', () => {
  it("1 + 2 equal 3",()=>{
    expect(testAdd(1,'2')).toBe(3)
  })
})

       执行npm run test:unit

1.jpg

       可以看到我们的加法函数,并不满足字符串和数字相加。所以得到了报错信息。

       现在我们修改下代码:

function testAdd(x,y){
  return (x-0)+(y-0)
}

       在运行一下代码 npm run test:unit

2.jpg

       测试Vue组件

       修改下HelloWorld组件:

// src/components/HelloWorld.vue
<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
  </div>
</template>
<script>
export default {
  name: 'HelloWorld',
  data(){
    return {
      msg:'new message'
    }
  },
  mounted(){
    this.msg = 'msg mounted'
  }
}
</script>
// example.spec.js
import { mount } from '@vue/test-utils'
import HelloWorld from '@/components/HelloWorld.vue'
describe('HelloWorld.vue', () => {
  it('测试挂载成功后,msg的数值', () => {
    
    const wrapper = mount(HelloWorld, )
    
    expect(wrapper.vm.msg).toBe('msg mounted')
  })
})

       其中shallowMount是vue官方给的单元测试库里面的。链接地址:https://vue-test-utils.vuejs.org/zh/api/,里面有很多专门为vue单元测试写的方法。

       运行一下npm run test:unit

3.jpg

       可以看到测试成功,msg = ‘msg mounted’。

       测试覆盖率

       jest?自带覆盖率,如果?的mocha,需要使?istanbul来统计覆盖率 package.json?修改jest配置

"jest": {
    "collectCoverage": true,
    "collectCoverageFrom": ["src/**/*.{js,vue}"]
  }

       然后用上面组件的案例再运行一次

4.jpg

       可以看到hellowolrd组件我们是全覆盖。

E2E测试

E2E(End To End)即端对端测试,属于黑盒测试,通过编写测试用例,自动化模拟用户操作,确保组件间通信正常,程序流数据传递如预期。

       由于vue-cli是支撑安装cypress测试框架的,我们直接安装下来用。 cypress文档

测试鼠标点击

       同样我们编写一个test.js(e2e不需要特殊的命名)来作为测试代码,总体语法还是和单测一样,只是里面用了cypress的方法。

// test.js
describe('E2E测试案例', () => {
  it('测试点击事件', () => {
    cy.visit('/') 
    cy.contains('h1', 'msg mounted')
    cy.get('button').click() 
    cy.contains('h1', 'click msg')
  })
})

       然后修改下HelloWorld组件代码,新增一个点击按钮,并且点击过后msg值进行修改:

// src/components/HelloWorld.vue
<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <button @click="msg = 'click msg'">button</button>
  </div>
</template>
<script>
export default {
  name: 'HelloWorld',
  data(){
    return {
      msg:'new message'
    }
  },
  created(){
  },
  mounted(){
    this.msg = 'msg mounted'
  }
}
</script>

       好了,运行一下npm run test:e2e

5.jpg

       运行成功之后会弹出,上面这个浏览器框。点击test.js或者Run all specs

6.jpg

       这就是e2e展示的测试页面了,当你的鼠标移动到左边的代码框部分,就可以看到每行执行的结果

7.jpg

TDD(测试驱动开发)

TDD测试驱动开发,通过所有测试案例,开发就完成了。

       TDD的基本思路就是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程

       TDD

  • 先写测试代码

  • 跑测试,测试飘红

  • 写功能,等测试绿了,功能开发完毕

  • 会写很多测试代码

  • 需要人力很多

       前端开发中,TDD用的很少。

写在结尾的一些话

       为什么需要写测试

       测试范围包括web端、APP端。一轮测试下来,测试所花费的时间是极大的,随之而来问题也就来了:加班测试、版本发布时间受阻、考虑不周全而漏测功能等等。

       粗略算了一下,假设半月迭代一次,每次迭代需要5轮测试,人工回归一次就需要5个小时,最终确定一年下来,自动化为你省去600个小时,也就是75个工作日,同时也省去了测试旧功能要吐的烦恼以及人疲惫下产生的错误。

       1.写测试很耗时间。等于用时间换项目质量。后期节省时间

       举个例子:第一次上线要测试登录注册功能,下次代码提交后,可能就改了登录注册的文案,但是对测试来说还要测试一遍登录注册功能。

       2.一些vue,react,网上的一些成熟库,都有测试代码,而且测试代码 > 项目代码。

       3.我们可以把自动化测试放在工程化里面,保证代码质量。

       Husky git hook ,在git的某个阶段执行命令,例如:

// package.json
{
    "husky":{
        "hooks":{
            "pre-commit":"npm test",
            "pre-push":"npm test"
        }
    }
}

       用这个配合自动化测试代码,限制代码提交。

       了放在git hook,我们还能在CI/CD云端构建里面运行测试代码,不通过就不能合并发布。保证代码和项目质量。

       哪些地方要写测试代码

  1. 开源项目必须完备,测试代码 覆盖率80%

  2. 日常开发,通用模块要测试开发(单测)工具函数,组件,组件库。

  3. e2e日常开发写的不多,建议测试人员写

       开发时间不够,不写测试代码

       几条建议:

  • 如果公司占满了你的工作时间,这工作不太合适。

  • 每天都开发api项目,开发十年也就是个10几k水平

  • 做一个有潜力的前端,知识体系要完善。

  • 业余时间 学习+高质量开源

       node 怎么做自动化测试

       node也可以通过jest来写测试代码,jest是支持的,但是Node的话,因为都是涉及到接口的访问,所以我们需要一些别的库:

  • supertest (访问接口)

  • assert(断言库)


作者:伪前端架构师

原文链接:https://blog.csdn.net/qq_24073885/article/details/110134826#comments_14614300


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 当前的风气是,谈测试,必言“接口”。其实接口并不神秘,当今的应用中无处不是“接口”,从本篇开始让我来谈一些关于接口的浅薄认识。1、一个简单的接口(demo.php)<?php     // 文件名称demo.php     // 告诉浏览器返回为json类型     header('Content-Type:application/json; charset=utf-8');     ...
            3 4 1986
            分享
          •   如今,对于智能汽车的用户们来说,通过后期的系统软件更新,汽车厂商们往往能够逐步完善和提升车主们的使用体验,为他们带来更多的全新功能。人体近日,智车派注意到,有消息指出,特斯拉已经向其内部员工推出了新的软件系统更新,本次更新中包括大量的全新功能和特斯拉汽车系统的UI升级。  根据介绍,本次系统更新之后,特斯拉汽车将可以为用户提供两种不同的字体大小,帮助使用者更好地阅读屏幕内容;在设置和控制菜单中添加了搜索功能,可以帮助车主们更快地查找到自己需要的信息;在其导航系统中改进了“兴趣点”,能够直接展示对应地区的图片和其它信息。此外,此次更新之后,特斯拉车主们还可以调整亮度和加速模式等设置,或执行切...
            0 0 954
            分享
          •   大家在测试行业,都会知道软件测试的一些困境,其实不用担心,测试岗位的可塑性很强。  有很多地方可以发展,找到属于自己的方向,创造价值。  大家早期可能都是再做功能测试。那么以后呢?你想走什么方向?  职业路线分为三个方向:业务方向、技术方向、管理方向。  1、业务路线  · QA经理  ·产品经理、产品总监  · 业务专家  · 咨询顾问  2、技术路线(掌握编程技术,对新技术有浓厚兴趣)  · 自动化测试工程师  · 性能测试工程师  · 安全测试工程师  · 系统分析师  · 测试总监  3、管理路线(业务...
            0 0 711
            分享
          • 1.你是如何看待帮助别人工作?答:经过领导同意,在不影响自己的本职工作的前提条件下,我很支持同事之间的互帮互助。2.测试流程你们公司是怎么开展的答:我们公司是需求评审—编写测试用例—用例评审—执行测试(冒烟测试—系统测试—回归测试)—测试报告—上线3.项目上线的原则答:测试用例全部执行完成需求全部覆盖BUG单全部关闭4.版本谁来发布?答:开发发布版本5.测试工程师平时的工作答:参与需求评审编写测试用例测试用例评审执行测试用例提交bug,跟踪bug提交测试日报提交测试报告过程的评价软件本身的评价6.测试报告发给谁,内容?答:发给项目相关人员,开发,产品,UI,同组测试人员内容:测试范围,准出标准...
            0 0 1922
            分享
          •   一、性能指标在性能测试的作用?  性能指标在性能测试中起着非常重要的作用,它们帮助我们评估和了解系统的性能表现。下面用通俗易懂的话来解释性能指标的作用和意义:  1.帮助我们了解系统的处理能力:性能指标可以告诉我们系统在给定负载下能够处理多少请求。就像一个快递小哥,他每天能够送多少个包裹,这个数字就是他的处理能力。对于系统来说,性能指标可以告诉我们它能够处理多少个请求,这样我们就可以知道系统的处理能力是否满足我们的需求。  2.帮助我们评估系统的稳定性:性能指标还可以帮助我们评估系统在高负载情况下的稳定性。就像一辆车,我们要知道它在高速行驶时是否稳定,需要了解它的最高速度和操控性能。对于系...
            0 0 962
            分享
      • 51testing软件测试圈微信