微信号:grzlwx

介绍:光荣之路官方资讯

一个简单完整的自动化示例(一)

2015-12-09 21:29 光荣之路

吴老的《selenium webdriver 实战宝典》出版了!

1 概述

关于本文,最开始只是想写一些关于 软件自动化测试开发 的文章,但是后来写着写着,发现不先在宏观上的软件开发过程进行介绍,不会引起大家对 自动化 技术形成了解和重视。所以本文从软件工程宏观层次进行了介绍,并和传统的实现方法做了一些对比,并附了一些代码,让有兴趣的朋友对自动化的理念及具体的实现技术手段有一些初步的认识。

既然是要 自动化 那么肯定就是冲着 效率 来的。在正式开始系统化的自动化技术学习之前,先来一个完整的示例来有个对 自动化 的概念整体认识。

2 使用场景

可以先定义一个最简单的场景:提供第三方前端js库的产品(例如: jQuery)。

使用过 jQuery 的人,可以很清楚这样的产品具有如下的特征:

  • 静态文件支持CDN方式的在线引用,可以不必下载成离线文件

  • js文件后面有版本号标识

  • 静态文件是增量式发布,而非覆盖替换式

下面是一些jquery的备注,方便读者了解前面所谈到的一些特点的具体表现形式。

jQuery 的CDN在线引用的方式

1
< script src="https://code.jquery.com/jquery-2.1.4.min.js"></ script >

每个 jQuery 的库文件都带有版本号,例如: jquery-2.1.4.min.js

如果有新的文件版本发布,则增加一个带新版本号的文件即可。

基本上这样的产品的开发和上线的步骤如下:

  1. 开发工程师本地开发好js项目,并做好单元测试和功能性自测

  2. 使用构建工具打包成js文件(为简化问题,此处假设最终只有一个文件)

  3. 发布工程师收到构建好的文件,向公网上发布静态文件

  4. 检查静态文件是否成功部署成功且能正常被公网访问

3 传统方案

  • 在前面所定义的步骤里面,传统的方案就是:

  • 开发人员开发完毕,并进行简单自测,和 手动 功能测试

  • 开发人员利用IDE 手动 打包

  • 发布工程师将构建后的文件 手动 复制到公网服务器指定目录

    • 发布工程师在浏览器里面 手动 输入文件的公网链接,确定可以访问到相应的资源

    • 有可能出现公网文件权限或者服务器配置问题,导致即使文件在那个位置,但是不一定能够访问到。比如出现 403forbidden 的情况

这样的过程都是要通过程序员去手动完成,在现在讲究快速迭代的软件研究趋势下,长期这样手动重复的后果就是:

  • 一直手工操作导致效率低下

  • 重复工作会扼杀人的创造性

对于会持续做加法迭代的有稳定产品线路的项目,最好还是能够做自动化的的操作,一方面是为了解放程序员,另外一方面也确实提升效率以适应现在的快速开发和迭代的客观需求。

4 自动化方案

4.1 自动化单元测试

其实开发人员在开发过程,就是为了让程序能够达到预期的目标,那么就肯定是存在一定的自测过程。但是仅仅是当时自测之后是不行,还需要对于核心的算法函数进行单元测试代码的编写,以保证后续的迭代和重构的时候,不会出现拆东补西的情况。

此时的情况是:

  • 核心函数---- 自动化 单元测试

  • 界面功能---- 手动 功能性自测

一般情况,功能测试都特指 端到端 的直接面向用户的界面型测试,由于界面存在太多的不确定性,这一块不是适合编写自动化测试代码的,虽然对于界面的自动化已经有一部分的脚本录制工具或者开发工具,但是都不提倡。

注意

自动化测试涉及到自动化代码的编写,这部分的额外付出成本是在 回归测试 的时候收回的,回归的次数越多,边际成本就越小。所以只有相当稳定下来的功能才有回归的价值。

由于目前很多产品的开发,都不再是独立的系统,都往往会存在一些外部调用的接口,所以在自动化打包构建之前,还要在测试环境下进行接口测试。此处的在做自动化方案的时候,基本原理和单元测试差不多,所以本文略去不表,后面会专门有专门介绍自动化测试部分的内容。

4.2 自动化打包构建

有相当多的IDE提供了一些打包的可视化操作工具。但是这些工具需要人工在IDE里面根据向导,进行一步步地点击操作,这样的做的好处就是降低了打包构建的门槛,普通人也可以在不了解原理,不用编写构建代码的情况下,也能完成相应的构建工作。当然缺点就是: 无法实现无人值守的自动化

基本上现在各种语言都有自己相应的成熟的构建工具,本文所举的前端的开发的例子,就有 grunt 这样的打包构建工具。

可以完成的自动化任务有:

  • 去除掉js源码里面的注释

  • 压缩js

  • 混淆js

  • 合并文件

通过写好相应的配置文件,运行grunt的相应参数命令,可以很好地实现开发构建阶段的自动化工作流。

4.3 自动化发布

自动化发布的具体实现技术手段有很多种。

像脚本型的语言(php,python,nodejs)可以使用 Git 这样的版本管理工具,使用调用shell命令,或者第三方操作库(例如python语言的Gitpython)可以实现代码的自动化部署。

对于一些构建的产物本身是很大的二进制文件的,比如exe文件,或者Android的apk应用,动辙是几百M的,显然不适合使用Git这样的精细 化的版本管理工具来进行发布。可以使用FTP或者SSH的第三方编程接口进行自动化的发布。此处可以推荐一款基于python的三方扩展 fabric,可以完成文件的远程传输及远端的服务器的命令行操作。

本文的的jQuery静态js发布方案使用整体文件上传到公网服务器的方式(使用fabric工具),以基本的流程如下:

  • 扫描自动化构建的目录

  • 使用fabric上传文件到N台指定的服务器的相应目录

  • 使用fabric操控N台服务器设置静态文件的权限

以下是一段代码示例(将本地的某个目录下的文件上传分发到N台服务器,并进行简单的设置):

<未完待续>

(作者:Harmo哈莫 来源:http://www.cnblogs.com/beer/p/5005344.html)



公益传播测试知识、技能与正能量!感谢作者!
分享测试生活,思考测试人生!欢迎投稿!
文章图片来自网络,如有侵权请见谅,请联系我们妥善处理。
735821166@qq.com

光荣之路
软件测试培训



官网:www.gloryroad.cn

微信公众号:gloryroadtrain

性能测试QQ群:415987441
测试招聘QQ群: 203715128
自动化3群QQ: 371211499

Python群:457561756



 
光荣之路 更多文章 今天晚上的 linux 公开课- Awk 编程 7月28日(今天)晚上的 linux 公开课- shell编程 8月4日(今天)晚上的 linux 公开课- shell编程 9月1日(本周一)晚8点半,光荣之路Web自动化系列基础课—javascript第二讲 推荐本好书《与机器赛跑》
猜您喜欢 Android 开发值得订阅的日报和周刊 Java并发编程:线程池的使用 eoe联合创始人&CT0姚尚朗北邮公开课《移动互联网创业及技术热点浅析》 技术文档分享 2016年春季互联网高端人才流动报告