做为一个程序员, 深深知道计算机自动化的速度是比人手动的速度快的, 所以”快速”完成项目的一个重要武器就是: 能自动化就不要手动.
 
BDD/TDD有很多优势, 其中之一就是自动化, 我们这节文章先讲自动化, 在后面的文章里面会讲到BDD/TDD的其他优势.
 
在ABP .NET Core + SPA版本和52ABP里面, 可以在以下层面做自动化测试:
  1. 前端Angular项目的e2e自动化测试
  2. 前端Angular项目的unit test
  3. 后端.NET Core项目的unit test
  4. 后端.NET Core项目的集成自动化测试
 
首先, 所有层面都写自动化测试代码, 是不符合康威定律第二定律的. 嗯, 康威定律是微服务的理论基石, 很显然我们不能违背它.
如果你之前没有接触和运用过BDD/TDD, 那么我推荐只写前端Angular项目的e2e自动化测试就好了. 具体怎么写在这系列课程的序里面有详细描述<如何用ABP框架快速完成项目 - 自动化测试 - 前端angular e2e protractor>
 
然后根据康威定律第二定律, 我们很显然不能像十年前2008年时候那样追求代码覆盖率80%以上.
我个人认为能把人工手动要跑的Postivie所有测试用例和主要的negative测试用例全部转为自动化, 这已经足够了.
然而有同学反映, 我这个说法太抽象了, 很难执行. 我想了想, 的确是, 没有基础的同学可能并不能掌握哪些是Positivie Test和Negative test.
这样吧, 你写完成程序后, 手动测试一遍, 然后把你刚才做的手动测试自动化就好了. 这么一说, 应该是比较直观和可执行的吧.
 
有同学说, angular官网是不推荐写e2e测试, 而是推荐写unit test的. 是的, 没错. 但是这是针对团队的项目和有BDD/TDD基础的同学来说的, 对于没有BDD/TDD基础而又一个人做一个项目的同学, 我认为还是写e2e测试比较好, 因为直观啊! e2e测试会弹出chrome浏览器UI, 这样如果测试跑不通过, 很直接的就知道原因在哪里了, 修复的时间和精力会大大减少.
 
不过, e2e测试会对电脑硬盘和内存要求比较高, 起码要是SSD硬盘和16G内存才会跑得流畅, 不然会经常性报错. 
 

做为一个程序员, 深深知道计算机自动化的速度是比人手动的速度快的, 所以”快速”完成项目的一个重要武器就是: 能自动化就不要手动.
 
BDD/TDD有很多优势, 其中之一就是自动化, 我们这节文章先讲自动化, 在后面的文章里面会讲到BDD/TDD的其他优势.
 
在ABP .NET Core + SPA版本和52ABP里面, 可以在以下层面做自动化测试:
  1. 前端Angular项目的e2e自动化测试
  2. 前端Angular项目的unit test
  3. 后端.NET Core项目的unit test
  4. 后端.NET Core项目的集成自动化测试
 
首先, 所有层面都写自动化测试代码, 是不符合康威定律第二定律的. 嗯, 康威定律是微服务的理论基石, 很显然我们不能违背它.
如果你之前真正运用过BDD/TDD, 那么我推荐只写前端Angular项目的e2e自动化测试就好了. 具体怎么写在这系列课程的序里面有详细描述<如何用ABP框架快速完成项目 - 自动化测试 - 前端angular e2e protractor>
 
然后根据康威定律第二定律, 我们很显然不能像十年前2008年时候那样追求代码覆盖率80%以上. 我个人认为能把人工手动要跑的Postivie所有测试用例和主要的negative测试用例全部转为自动化, 这已经足够了.
 
有同学说, angular官网是不推荐写e2e测试, 而是推荐写unit test的. 是的, 没错. 但是这是针对团队的项目和有BDD/TDD基础的同学来说的, 对于没有BDD/TDD基础而又一个人做一个项目的同学, 我认为还是写e2e测试比较好, 因为直观啊! e2e测试会弹出chrome浏览器UI, 这样如果测试跑不通过, 很直接的就知道原因在哪里了, 修复的时间和精力会大大减少.
 
不过, e2e测试会对电脑硬盘和内存要求比较高, 起码要是SSD硬盘和16G内存才会跑得流畅, 不然会经常性报错.
 
有同学问, 对于ui自动化测试这方面,是不是ui变化了,无论使用何种测试框架,都避免不了重新编写测试用例的代码?
这是必然的, 在这点上, 不会会计的程序员不是个好的项目经理,是要根据自身实际计算成本收益并进行取舍。
为什么会扯到项目经理这个角色呢? 首先一个项目UI短期经常变化, 项目经理是有责任的, 因为即使不写自动化测试代码, 纯手动测试, 你也要花时间去修改UI的代码啊. 这个锅无论如何都轮不到自动化测试去背, 应该有项目经理或产品经理去背.
 
自动化的另一个利器就是DevOps了, 在这方面, 徐磊有十分丰富的课程文档, 我想我是不可能做得比他更好的啦, 所以推荐大家阅读. 

如何用ABP框架快速完成项目(8) - 用ABP一个人快速完成项目(4) - 能自动化就不要手动 - 使用自动化测试(BDD/TDD)的更多相关文章

  1. ABP框架系列之七:(About-关于ABP)

    Considerations Source codes Contributors Contact ASP.NET Boilerplate is designed to help us to devel ...

  2. 如何用ABP框架快速完成项目(面向项目交付编程面向客户编程篇)(1) - 目录

    昨天发表了<如何用ABP框架快速完成项目 - 自动化测试 - 前端angular e2e protractor>后,大家十分热情,几个小时内就收到了不少问题,包括: 对于ui自动化测试这方 ...

  3. 使用代码生成工具快速开发ABP框架项目

    在一般系统开发中,我们一般要借助于高度定制化的代码生成工具,用于统一代码风,节省开发时间,提高开发效率.不同的项目,它的项目不同分层的基类定义不同,我们需要在框架基类的基础上扩展我们的业务类代码,尽量 ...

  4. 使用代码生成工具快速生成基于ABP框架的Vue+Element的前端界面

    世界上唯一不变的东西就是变化,我们通过总结变化的规律,以规律来应付变化,一切事情处理起来事半功倍.我们在开发后端服务代码,前端界面代码的时候,界面都是依照一定的规律进行变化的,我们通过抽取数据库信息, ...

  5. 广州.net俱乐部12月份ABP框架活动场地征集、志愿者征集、合作讲师\副讲师征集

    大家好,我在<被低估的.net(上) - 微软MonkeyFest 2018广州分享会活动回顾>一文中提到,我将在12月份搞一场ABP框架活动,现向大家征集活动场地.志愿者.合作讲师\副讲 ...

  6. [ABP]浅谈模块系统与 ABP 框架初始化

    在 ABP 框架当中所有库以及项目都是以模块的形式存在,所有模块都是继承自AbpModule 这个抽象基类,每个模块都拥有四个生命周期.分别是: PreInitialze(); Initialize( ...

  7. 浅谈模块系统与 ABP 框架初始化

    在 ABP 框架当中所有库以及项目都是以模块的形式存在,所有模块都是继承自AbpModule 这个抽象基类,每个模块都拥有四个生命周期.分别是: PreInitialze(); Initialize( ...

  8. 2019 年起如何开始学习 ABP 框架系列文章-开篇有益

    2019 年起如何开始学习 ABP 框架系列文章-开篇有益 [[TOC]] 本系列文章推荐阅读地址为:52ABP 开发文档 https://www.52abp.com/Wiki/52abp/lates ...

  9. ABP 框架从源码学习——abp框架启动和结束(1)

       1.abp框架的启动是从Global.asax文件的Application_Start启动的,当然代表Global的application必须从AbpWebApplication继承: publ ...

随机推荐

  1. Testing - 敏捷测试

    敏捷测试(Agile Testing) SM= Scrum Master PO= Product Owner PB= Product Backlog SB= Sprint Backlog Scrum ...

  2. 使用Json封装scroll,已处理其兼容性问题

    scroll.js /* 使用Json封装scroll */ function scroll(){ //标准模式(遵循W3C标准) if(pageYOffset!==null){ return { t ...

  3. 多线程 start 和 run 方法到底有什么区别?

    昨天栈长介绍了<Java多线程可以分组,还能这样玩!>线程分组的妙用.今天,栈长会详细介绍 Java 中的多线程 start() 和 run() 两个方法,Java 老司机请跳过,新手或者 ...

  4. python之找最后一个人

    题目大概是:有10个人围成一圈,从第一个人数,数到3的人出局,问最后一个人是谁? 围成一圈,那就是无限循环,直至最后一个人,我们可以把10个人看做一个列表,每循环一次就把除3为0的数去除,下次再次循环 ...

  5. 缓存日志截取字段上传FTP

    #!/bin/bash awk '{print $3,$4,$5,$6,$9,$11,$12,$14,$15,$18}' /usr/local/tcacheserver/var/log/traffic ...

  6. 浅尝Spring Cloud Sleuth

    Spring Cloud Sleuth提供了分布式追踪(distributed tracing)的一个解决方案.其基本思路是在服务调用的请求和响应中加入ID,标明上下游请求的关系.利用这些信息,可以方 ...

  7. Android Metro风格的Launcher开发系列第三篇

    前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...

  8. 图解 Java IO : 一、File源码

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

  9. RabbitMQ 消息中间件

    RabbitMQ 是使用 Erlang 语言开发的消息中间件, 其遵循了高级消息队列协议(Advanced Message Queuing Protocol, AMQP). 与 Kafka 等消息队列 ...

  10. MySQL系列详解六:MySQL主从复制/半同步演示-技术流ken

    前言 随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求.此时数据库集群就很好的解决了这个问题了.采用MySQL分布式集群,能够搭建一个高并发.负载均衡的集群服务器.在 ...