功能测试(SWATHub)
自动化测试平台 SWATHub 是 DaoCloud 的合作伙伴,他们为各类互联网应用提供了自动化测试的服务。我们推荐 DaoCloud 用户在完成持续集成单元测试等环节后,把应用部署在测试集群之上,运行自动化测试,进一步检验软件质量。以下内容由 SWATHub 提供。
SWATHub 是云端的自动化测试 SaaS 平台。通过创新的非编码的流程搭建和执行方式,SWATHub 能够帮助团队简单、高效地保障互联网服务的质量。
自动化测试是持续集成过程中至关重要的一个环节,否则系统的质量就无法保证。在高速迭代的开发过程中,完全依赖人工进行功能的验证无疑是天方夜谭。按照经典的「测试金字塔」理论,从底层的单元测试,到模块之间的集成测试,再到基于 UI 的端到端测试,不同层次、不同类型的自动化测试,是互为补充、缺一不可的。
相对于更偏重于开发人员的单元测试和集成测试,SWATHub 为端到端测试,提供了一种非编码的、云端的、多平台并行的实现方式,极大地提升了端到端测试的速度,加快了持续集成中自动化的反馈。特别是,SWATHub 提供了外部调用的Webhook API,使得第三方应用能够无缝触发自动化测试的执行,并且获取执行状态和结果报告。
DaoCloud 是业界领先的企业级容器云平台和解决方案提供商,致力于以Docker为代表的容器技术,为企业打造面向下一代互联网应用的交付和运维平台。
目前,DaoCloud 使用自主研发的 CI 执行引擎,支持诸如 Golang、Python、Ruby、Java 等多种语言和 MySQL、Redis、MongoDB 等多种外部服务。DaoCloud 通过解析和执行代码库根目录下的 daocloud.yml
文件来完成持续集成。下面这个典型的文件,演示了 DaoCloud CI 如何与 SWATHub 服务进行整合:
- 设置环境变量。
- 执行 install 脚本,安装必要支撑软件。
- 克隆源代码,切换到对应的提交。
- 执行 before_script 脚本,比如更新测试环境。
- 执行 script 脚本,依次执行单元、集成和 SWATHub 的端到端(End-to-End)测试。
image: daocloud/ci-golang:1.4
services:
- mysql
env:
- TESTSERVER = "1.2.3.4"
install:
- echo "Run scripts to setup a base environment"
- echo "e.g., apt-get install -y git-core"
before_script:
- echo "Run scripts to prepare our test environment"
- echo "e.g., scp php-sample.zip $TESTSERVER | ssh $TESTSERVER 'docker build' | ssh $TESTSERVER 'docker run'"
script:
- echo "Run unit tests, integration tests and end-to-end tests here"
- echo "e.g., phpunit test"
- echo "We use cloud test automation powered by SWATHub.com for end-to-end tests"
- curl --user support:3641623E61464C31A5D --data-urlencode "platform=Windows + Firefox" -d nodeName=swathub -d nodeType=swathub -d tags=DaoCloud -d isSequential=false -d setID=131 http://cn.swathub.com/api/support/samples/run
DaoCloud CI 提供了详细的日志信息,方便调试。如下图所示,持续集成各个步骤都成功执行,并且触发了 SWATHub 上的一个端到端的自动化测试 Job,在 Windows + Firefox 的平台上,并发地执行所有的测试用例。相关的测试用例和结果都可以在 SWATHub 网站上找到,只需要注册 SWATHub 用户,登录后即可在共享的 samples 项目中看到。
细心的同学可能注意到了,在上述的 daocloud.yml
中有个准备测试环境的 before_script,我们是通过将最新的代码 push 到外部测试服务器,然后再通过 Docker 搭建测试环境的。其实,最完美的方法应该是直接利用 DaoCloud 来构建最新的 Docker 镜像,然后部署到DaoCloud 的集群上去,这样就可以直接基于这个集群节点进行自动化测试。这个自动构建并部署的 API 接口已经在开发中,预计很快就可以付诸实现。