• 12
  • 12
分享
  • 前端必备--自动化测试——软件测试圈
  • 恬恬圈 2021-01-18 10:38:09 字数 4285 阅读 2627 收藏 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


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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • Cypress简介       自2004年Selenium诞生并伴随着WebDriver的发展,Selenium和Webdriver的组合成为前端自动化测试不二之选,但近些年前端技术的发展显然远远超出了Selenium的演进速度,尤其是前端页面演化成了前端应用程序开发,实际上前端已经具备了后端的一切能力,而Selenium和Webdriver本身仍旧只能单纯的用在UI层,除非我们再引入其他的库处理后端请求和响应,那么产生的问题是:Selenium和Webdriver的组合在做自动化测试的时候,如果接口请求失败了,我们不知道前端的问题还是后端的问题&nb...
            12 12 3894
            分享
          • 读者提问:超好用的手机录屏软件有推荐的吗 ?阿常回答:1、第三方软件:录屏大师2、第三方软件:乐秀录屏大师3、第三方软件:小熊录屏4、第三方软件:超级截图录屏大师5、iPhone 自带录屏工具阿常碎碎念:阿常平时主要使用录屏软件 3 和 5 ,大家可以根据自己所用机型和使用习惯来选取合适的录屏软件。看完今天的分享对你是不是有所启发呢,有任何想法都欢迎大家后台私信阿常,一起探讨交流。
            0 0 1101
            分享
          • 在过去的这个周末。接到了一个线上问题,描述如下:手动添加一个员工,然后进入线索管理编辑某个线索归属人,在下拉展示的员工列表当中,看不到我新添加的员工。立马自己复现了一下,此时看一下接口返回情况,发现拉起员工列表的页面这个操作,并没有调用接口实时请求数据,也就是说这个地方使用的是缓存。开发给的解释是:出于性能考虑,系统登陆后就缓存了员工这些基本配套信息,不是实时请求。进入设置——应用管理——找到该应用——清除数据,重新登录就看到新员工了。客服欣然接受了这个处理方法。按照这个方法也解决了问题。实际上,这个地方就不能从代码层面上优化了吗?方案肯定是有的:思路一:查询员工列表的地方,接口改成实时调用,...
            1 1 5232
            分享
          •   1 BUG现象  系统并发请求,系统停滞无法使用,所有接口都是无法与后端进行交互的状态,系统并没有宕机。  2 BUG的业务流程  1)插入分数方法 涉及插入表ABCD 加了声明式事务  2)查询分数方法 涉及表ABCD  controller() {   @Transactional   insertVo();   selectById();   }  3 排查原因  因为代码不是我写的,一开始我就是怀疑是死锁导致的BUG,然后我用Jconsole,去检测一下死锁,并没有发现死锁,接下来我去Mysql看有没有死锁,结果也没有发现,然后我就懵了,jvm没有锁,mysql也没有锁且...
            0 0 276
            分享
          •   在天网查上看了一下全国软件公司有1000多万家,其中上市的公司有7万多家,也就是占比0.7%。  通过这个数据可以发现,大部分公司从实力和规模上都偏向中型或者小型,也就说其中的流程不一定很健全,甚至没有流程而言。  下图截取了两张数据的图片供参考:图1  全国软件公司数据图2  上市公司数量  为什么要指出这个问题?笔者目前在二线城市,工作10年经历过几家公司,很少有公司把流程制定得很正规和完善。  基本上的形式是:常规瀑布模式和敏捷模式相结合。赶上功能已上线再出现Bug,常见的状态开发快速定位问题进行修改,测试抓紧时间进行测试,测完后上线发布。  所以得出的结论是流程...
            0 0 1522
            分享
      • 51testing软件测试圈微信