GitLab-CI实现自动化测试

GitLab-Ci实现自动化测试

持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。

使用自动化测试, 可以提高软件的质量和可靠性, 今早发现其中的缺陷和问题, 以便即时改正.

配置环境

首先需要一个满足运行自动化测试的Docker镜像, 以便后面运行测试代码, 例如:

复制代码
image: zacksleo/docker-composer:develop

配置服务

某些测试需要使用额外的服务, 如数据库、缓存服务器等等, 并通过variables配置服务中的一些变量

复制代码
services:
    - mysql:5.6
    - redis:latest
variables:
    MYSQL_ROOT_PASSWORD: root
    MYSQL_DATABASE: web
    MYSQL_USER: web
    MYSQL_PASSWORD: web    

声明依赖工件

一般在测试前要进行准备过程, 如安装依赖库或者编译等, 可将上述过程生成的的文件, 通过依赖声明, 传递过来, 这样可以比避免重复执行相关过程.

复制代码
installing-dependencies:
    stage: prepare
    script:
        - composer install --prefer-dist --optimize-autoloader -n --no-interaction -v --no-suggest
        - composer dump-autoload --optimize
    artifacts:
        name: "vendor"
        untracked: true
        expire_in: 60 mins
        paths:
            - $CI_PROJECT_DIR/vendor

dependencies:
    - installing-dependencies

配置测试脚本

假定你已经在本地编写好了测试代码, 并且可以本地运行, 那么就可以通过调整和适配, 让测试可以在GitLab-CI中自动化执行, 在下面的例子中,

测试代码位于tests目录,并且.env中配置了一些环境变量, 该文件的作用是为了让不同环境使用不同的一组变量, 如数据库、接口地址、账号等等,

这样做的目录可以尽量少的变更代码,保持核心代码的稳定性和适应能力, 通过php -S 启动了一个本地接口服务, 最后调用api测试, 对所有接口

进行测试

在下面的例子中, 还声明了coverage, 这个用来说明代码测试覆盖率的取得方法, 因为在测试中会将覆盖率输出(--coverage --no-colors),

GitLab-CI 通过正则匹配输出内容, 读取到覆盖率, 从而显示在项目徽标处

复制代码
dependencies:
    - installing-dependencies
script:
    - cp tests/.env .env
    - ./yii migrate/up --interactive=0
    - php -S localhost:80 --docroot api/tests &>/dev/null&
    - ./vendor/bin/codecept run api -c tests --coverage --no-colors

    coverage: '/^\s*Lines:\s*\d+.\d+\%/'    

测试失败如何处理

当测试失败后, 除了查看Pipline中的任务输出, 我们还应当详细查看测试中的相关日志, 下面这里, 将需要查看的文件生成工件, 在GitLab中下载,

然后可以在本地详细查看, when说明了仅在测试失败时, 才生成工件

复制代码
    artifacts:
        name: "debug"
        when: on_failure
        untracked: true
        expire_in: 60 mins
        paths:
            - $CI_PROJECT_DIR/api/runtime
            - $CI_PROJECT_DIR/tests/_output

完整的例子

下面是一个完整的API自动化测试的盒子

复制代码
api-test:
    stage: testing
    services:
        - mysql:5.6
        - redis:latest
    variables:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: web
        MYSQL_USER: web
        MYSQL_PASSWORD: web
    dependencies:
        - installing-dependencies
    script:
        - cp tests/.env .env
        - ./yii migrate/up --interactive=0
        - php -S localhost:80 --docroot api/tests &>/dev/null&
        - ./vendor/bin/codecept run api -c tests
    artifacts:
        name: "debug"
        when: on_failure
        untracked: true
        expire_in: 60 mins
        paths:
            - $CI_PROJECT_DIR/api/runtime
            - $CI_PROJECT_DIR/tests/_output
    only:
        - develop
        - master

关于持续集成完整的项目, 请查看 zacksleo/yii2-app-advanced 项目

使用Docker镜像

相关推荐
IAR Systems7 天前
松下电工借助IAR CI/CD解决方案,实现品质与效率双重飞跃
ci/cd
Cherry的跨界思维7 天前
【AI测试全栈:质量】47、Vue+Prometheus+Grafana实战:打造全方位AI监控面板开发指南
vue.js·人工智能·ci/cd·grafana·prometheus·ai测试·ai全栈
Aliex_git7 天前
Dockerfile 优化实践笔记
笔记·学习·gitlab
成为你的宁宁7 天前
Jenkins 自动化部署前后端分离若依项目全攻略:涵盖环境配置、Maven/Node.js 工具安装、GitLab 项目协同,及前后端构建、服务器推送与代码更新验证全步骤
node.js·自动化·gitlab·jenkins·maven
古斯塔夫歼星炮7 天前
Dify + Jenkins 实现AI应用持续集成与自动化部署
ci/cd·jenkins·dify
codingWhat8 天前
手把手系列之——前端工程化
ci/cd·devops·前端工程化
测试渣8 天前
持续集成中的自动化测试框架优化实战指南
python·ci/cd·单元测试·自动化·pytest
sunshinebo8 天前
一次 GitLab 无法启动的排查:Docker 日志把 500G 磁盘打满
docker·eureka·gitlab
何以不说话8 天前
DevOps、Git 和 GitLab
git·gitlab·devops
我的xiaodoujiao9 天前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 51--CI/CD 4--推送本地代码到Git远程仓库
python·学习·测试工具·ci/cd·pytest