对单元测试的思考(稳定性建设)

这篇具有很好参考价值的文章主要介绍了对单元测试的思考(稳定性建设)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对单元测试的思考(稳定性建设),职场经验,软件测试,IT,单元测试,接口测试,自动化测试,经验分享,小程序,学习,功能测试2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)

单测是很常见的技术的名词,但背后的逻辑和原理你是否清楚,让我们一起review一下。

1. 单测是什么?🤔

单测是单元测试,主要是测试一个最小逻辑块。比如一个函数、一个react、vue 组件。

2.为什么要写单测?🤔

这里有短期和长远,两个方面做打算:

短期:

希望开发者在开发过程中,就要想清楚多种case的情况,来检测这个最小单元的可靠性

举个例:

describe('test getUriEnd', () => {
  it('case1', async () => {
    const ret = getUriEnd(...);
    expect(ret).toBe('...');
  });

  it('case2', async () => {
    const ret = getUriEnd(...);
    expect(ret).toBe('...');
  });

  it('case3', async () => {
    const ret = getUriEnd('');
    expect(ret).toBe('error');
  });

  it('case4', async () => {
    const ret = getUriEnd([]);
    expect(ret).toBe('error');
  });
});

长期:

从长期的维护角度来看的话,各个最小单元都是可能有被修改的风险。如果有完整的单侧的case,是可以保证:迭代、修改后的功能单元,不是会出现一些边缘问题

并且长期来看:单侧也可以作为一个这个功能单元的使用说明书的作用。帮助开发更好的理解功能。

3.单测是跑在什么环境的?🤔

是跑在node环境的。

那为什么可以测试一些和浏览器环境相关的操作?比如:document.createElement

test('use jsdom in this test file', () => {  
    const element = document.createElement('div');  
    expect(element).not.toBeNull();  
});

要设置当前单测运行的环境,否则上面的单测会报错,因为单测是跑在node环境的(我这里以jest为例)

在jest内,需要配置 testEnvironment: ‘jsdom’ (不主动配置的话,这里是node,代表node环境)。

jest文档:jestjs.io/zh-Hans/doc…

那jest是怎么做到模拟浏览器环境的?

jest用的是jsdom:github.com/jsdom/jsdom (jsdom模拟浏览器环境的原理,可以参考jsdom的官网)。

本质还是运行在node内,只不过用了jsdom来模拟浏览器环境。

4.单测的原理是什么?🤔

原理是:

给最小单元:提供运行时环境(node或浏览器环境,且包含对应依赖)。让这个最小单元在这个环境里面去执行,跑case,检验是否符合预期。

5.单测中需要注意哪些问题?为什么单测会引发这些问题?🤔

单测的核心问题就是准备环境,为了让单测可以正常执行,我们需要准备好上下游环境,还有依赖环境。

比如你要测试一个vue组件的props,那么你就需要为他准备好相关的vue实例,往单测的node环境里面注入Vue,例如 import { shallowMount } from ‘@vue/test-utils’

import { shallowMount } from '@vue/test-utils'
import Drawer from '@/components/common/drawer.vue'

test('test drawer', () => {
  const wrapper = shallowMount(Drawer, {
    propsData: {
      direction: 'top',
      show: true,
      canConfirm: true,
      title: 'my drawer',
      leftText: 'left text',
      rightText: 'right text'
    }
  })
  const text = wrapper.text()
  expect(text).toContain('my drawer')
  expect(text).toContain('left text')
  expect(wrapper.get('.drawer-top')).not.toBeNull()

  wrapper.find('.header-right').trigger('click')
  wrapper.find('.header-left').trigger('click')

  expect(wrapper.emitted()).toHaveProperty('onConfirm')
  expect(wrapper.emitted()).toHaveProperty('onCancel')
})

如果涉及到路由相关的话,那么还需要准备路由相关依赖。

有些依赖实在不好准备的话,需要设置mock(比如依赖一个额外的SDK,但这个SDK没法在node里面的跑)。

import { mount, createLocalVue } from '@vue/test-utils'
import Register from '@/components/xxx.vue'
import Vuex from 'vuex'

const localVue = createLocalVue()
localVue.use(Vuex)

jest.mock('@xxx/sdk.css', () => { // 这里设mock
  return ''
})

describe('test register', () => {
  const store = new Vuex.Store({
    actions: {},
    state: {
      form: {
        formData: {
          selectCountry: '',
        },
      },
    },
    getters: {
      'user/userCountry': () => ''
    },
  })
  const wrapper = mount(Register, {
    store,
    localVue,
    mocks: { // 这里也可以设mock
      $route: {
        query: {}
      }
    }
  })
  it('should vm', () => {
    expect(wrapper.vm).toBeTruthy()
  })

  it('should xxx', () => {
    expect(wrapper.find('#xxxdom').exists()).toBeTruthy()
  })
})

如果涉及到接口请求的话,接口是下游rpc或者是服务发现的话,那么单侧环境是肯定调不通的。因为有环境隔离。这种情况下就只能Mock数据了。

为什么单测会引发这些问题,感觉这么麻烦?

因为单测是运行在node环境里跑,相当于本地,本地去掉下游rpc服务或走服务发现,本来就是不行的,因为环境隔离。本地加代理,也只能调通测试环境rpc服务

单测环境是一个“干净”的环境,不主动准备的话 是没有node_modules的。如果你的测试单元 有各种依赖,单测环境肯定是没有的,除非你自己准备好 或者 mock模拟/代理掉

6.哪些场景适合写单测?🤔

首先写单测肯定是有成本的,我个人认为,非常重要的toC项目才有必要写单测;

先覆盖核心功能;

功能单一的函数或组件是很适合写单测的。

7.怎么定义一个单测写的好不好?🤔

单纯不考虑成本的话,那么一个单测的好坏应该是看这一个单元的功能覆盖率 + 边界case的覆盖情况。越多越好。

8.对单测成本和收益的思考?🤔

团队内的任何决策都是有成本的,单测也不例外,需了解成本和收益后,再考虑在团队内推进。

单测成本:

主要是开发成本:写单测、code review,边界case覆盖。

单测收益:

未来的维护成本会更低,项目质量、稳定性更好。

有利于倒逼开发写出高质量的代码、关注稳定性。

我个人思考,还是想低成本得到所有好处(“我都要”):选择性写单测

个人认为写单测的条件:toC且核心流程 + 很难自测的部分(边界case) + e2e或快照测试很难覆盖到的部分

某些业务场景,后续肯定也是要自测的话,那这部分相关的可以不用写单测。

e2e或快照测试,能覆盖到的,可以不写单测。

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 786229024,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】

对单元测试的思考(稳定性建设),职场经验,软件测试,IT,单元测试,接口测试,自动化测试,经验分享,小程序,学习,功能测试

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。对单元测试的思考(稳定性建设),职场经验,软件测试,IT,单元测试,接口测试,自动化测试,经验分享,小程序,学习,功能测试
对单元测试的思考(稳定性建设),职场经验,软件测试,IT,单元测试,接口测试,自动化测试,经验分享,小程序,学习,功能测试对单元测试的思考(稳定性建设),职场经验,软件测试,IT,单元测试,接口测试,自动化测试,经验分享,小程序,学习,功能测试文章来源地址https://www.toymoban.com/news/detail-811164.html

到了这里,关于对单元测试的思考(稳定性建设)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UI 自动化稳定性用例实战经验分享!

    目录 前言: 大家常说 UI 自动化不稳定,那又如何提高稳定性呢?

    2024年02月15日
    浏览(65)
  • 3分钟了解Android中稳定性测试_手机稳定性测试,大厂软件测试高级多套面试专题整理集合

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新软件测试全套学习资料》

    2024年04月26日
    浏览(45)
  • 性能测试、负载测试、压力测试、稳定性测试简单区分

    是一个总称,可细分为性能测试、负载测试、压力测试、稳定性测试。 以系统设计初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内,是否能达到性能瓶颈。 提取理解 有性能指标,验证 性能测试目标 验证系统的性能指标,是否为

    2024年02月09日
    浏览(43)
  • 压力测试分为稳定性测试和破坏性测试

    压力测试分为稳定性测试和破坏性测试 压力测试是一种对软件系统进行负载测试的常见手段,可以评估其在不同负载条件下的稳定性、性能和可靠性等指标。常见的压力测试分为两种类型:稳定性测试和破坏性测试。 1. 稳定性测试 稳定性测试也称为基准测试,它主要关注软

    2024年02月12日
    浏览(45)
  • 使用monkey工具进行稳定性测试

    首先了解monkey是什么         monkey是Android系统自带一个命令行工具,可以运行在模拟器里或者真实设备中运行。monkey向系统发送伪随机的用户事件流,从而实现对正在开发的应用程序进行压力测试。 monkey包括很多选项,大致分为四大类: 1.基本配置选项,如设置尝试的事

    2024年01月25日
    浏览(66)
  • Server/PC 稳定性测试(Windows)

    本文主要针对Server/PC的各硬件稳定性测试研究,对Server/PC的维护和升级提供指导性建议。 目前没有任何一款软件可以查看cpu的总使用时间的。因为没有技术可以监控出来。所以只能通过查看CPU针脚和表面磨损程度来判断是否是全新CPU。CPU使用时间长和所有电子产品一样会出现

    2024年01月16日
    浏览(47)
  • 3分钟了解Android中稳定性测试

    Monkey在英文里的含义是猴子,在测试行业的学名叫“猴子测试”,指的是没有测试经验的人甚至是根本不懂计算机的人(就像一只猴子),不需要知道程序的任何用户交互方面的知识,给他一个程序,他就会对他看到的任何界面进行操作,当然操作是无目的的、随便乱按乱点

    2024年02月04日
    浏览(46)
  • 【day01】monkey压力测试,稳定性

    1.压力测试:在一定的时间内进行大量操作。 2.稳定性测试:功能基本稳定之后,一直做到回归 主要找crash和anr问题,必解 测试:随机操作(对整体app验证,不针对模块,不针对单个功能。用于模拟人的操作),如调节亮度,调节声音,截屏,做设置。本质上monkey为伪随机操

    2024年02月13日
    浏览(58)
  • app稳定性测试教程——全网最全(测试木头人)

    超详细测试流程及分析 ——没有之一 App的性能测试主要有响应、内存、cpu、FPS、GPU过度渲染、耗电、耗流七个指标,app除了这些性能测试,还有:手机版本号兼容性,屏幕分辨率兼容性,稳定性测试,安全测试等,这里就不在说明了。 Monkey工具是Android自动化测试工具的一种

    2024年02月04日
    浏览(50)
  • 加强网站稳定性!学习如何进行高效压力测试!

    1、什么是压力测试? 软件压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。 软件压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。 通常要进行软件压力测试的资源包括

    2024年01月18日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包