毕业设计-Merge查看平台测试方案

背景介绍

公司预计开发一套可在嵌入式设备运行的大型系统。涉及项目数100+,由多个团队共同开发提交代码。持续集成团队负责每日构建镜像,对于引起功能异常的项目进行排查,通知相关项目组进行修复。
目前开发一套Merge查看平台,可用于查看镜像版本之间项目代码变化。

业务介绍

使用方式

  1. 登陆Merge平台
  2. 选择产品线、分支、构建记录,构建版本,查看信息

主要功能

  1. 该构建版本与上个版本之间的Merge变化,有变化构建版本显示粉色,无变化显示灰色。
  2. 该构建版本的所有项目地址及最新一次commit。

测试方案

痛点1

  • 该测试属于web测试,之前主要由手工完成。历史构建版本需要定期测试,新版本不断增加。越来越多后效率很低。

解决方案

  • 遍历构建版本,存储关键数据。采用数据驱动方式生成大量测试用例,每次测试覆盖全部构建版本。

技术架构

  • 主要使用pytest+selenium+allure的技术架构,借助pytest的用例分发和执行优势,并且实现参数化和数据驱动,输出详细的测试用例运行日志并能结合allure输出测试报告。

测试流程

模块设计

config: 保存日志配置、环境配置、常量字典

data: 通过csv格式记录通过页面读取的版本号记录和状态记录

logs: 保存测试用例运行日志和断言结果

result: 记录allure生成的中间结果

testcases:测试用例

utils: 通用工具和模块

  • 版本列表获取和保存模块
  • 鉴权模块
  • allure报告生成模块
  • csv读取写入模块
  • 数据驱动模块

痛点2

  • 多人需要查阅Merge平台测试报告,allure方式生成测试结果不易保存,历史数据难存档。
  • 测试用例需定期执行,例如每天早10点
  • 公司主要采用飞书办公,邮件查阅较少

解决方案

采用jenkins+allure插件完成测试用例执行、报告生成。以参数化形式创建job,job可定时也可手动启动。

allure插件配置

jenkinsfile 设计

#!groovy
def current_timestamp = System.currentTimeMillis()
pipeline {
    agent any
    options{
        timestamps()
    }
    triggers {
         cron('00 10 * * *')
    }
    parameters {
        string(name: 'NOTIFY_MEMBER', defaultValue: 'xiaoming,xiaohong',  description: '通知人,以逗号分隔,无需通知不填写')
        string(name: 'NOTIFY_CHAT_NAME', defaultValue: 'None', description: '通知群名称,默认为None')
    }

    stages {
        stage('Init') {
            steps {
                script{
                    START_TIMESTAMP = current_timestamp
                    // 初始化目录
                }
            }
        }
        stage('Build') {
            steps {
                sh '''
                cd ${WORKSPACE}/workspace/allure-autotest/mina/seleniumtest/
                pytest selenium_test.py --alluredir=${WORKSPACE}/workspace/allure-autotest/allure-results
                '''
            }
        }
    }
    post {
        success {
            script {
                END_TIMESTAMP = current_timestamp
                allure includeProperties: false, jdk: '', results: [[path: '${WORKSPACE}/workspace/allure-autotest/allure-results']]
                sh "curl -X GET  ${URL}/send_feishu_card?START_TIMESTAMP=${START_TIMESTAMP}&END_TIMESTAMP=${END_TIMESTAMP}&NOTIFY_MEMBER=${NOTIFY_MEMBER}&NOTIFY_CHAT_NAME=${NOTIFY_CHAT_NAME}&BUILD_NUMBER=${BUILD_NUMBER}&BUILD_RESULT=SUCCESS"
            }
        }
       
        failure {
            script {
                END_TIMESTAMP = current_timestamp
                allure includeProperties: false, jdk: '', results: [[path: '${WORKSPACE}/workspace/allure-autotest/allure-results']] build result
                sh "curl -X GET  ${URL}/send_feishu_card?START_TIMESTAMP=${START_TIMESTAMP}&END_TIMESTAMP=${END_TIMESTAMP}&NOTIFY_MEMBER=${NOTIFY_MEMBER}&NOTIFY_CHAT_NAME=${NOTIFY_CHAT_NAME}&BUILD_NUMBER=${BUILD_NUMBER}&BUILD_RESULT=FAILURE"
            }
        }
    }
}

主要分为3个阶段:
init:初始化,完成构建环境初始化化

build:完成pytest测试,输出测试结果到指定目录

post:生成测试报告,发送测试报告链接给指定人

job截图:


参数化构建

观察发现,测试报告的URL只与构建号有关,因此报告地址可以拼接。

生成完报告后,可通过发送url请求触发飞书卡片。

URL触发卡片
url放在post过程中,其中携带参数为:
示例:

curl -X GET ${URL}/send_feishu_card?START_TIMESTAMP=${START_TIMESTAMP}&END_TIMESTAMP=${END_TIMESTAMP}&NOTIFY_MEMBER=${NOTIFY_MEMBER}&NOTIFY_CHAT_NAME=${NOTIFY_CHAT_NAME}&BUILD_NUMBER=${BUILD_NUMBER}&BUILD_RESULT=FAILURE

参数说明:

  • START_TIMESTAMP:开始时间,放在init过程中获取

  • END_TIMESTAMP:结束时间,放在post阶段中获取

  • NOTIFY_MEMBER:通知人,参数填入,逗号分隔,不通知为空

  • NOTIFY_CHAT_NAME:通知群名,默认为None,不同通知

  • BUILD_NUMBER:构建号,jenkins自带参数

  • BUILD_RESULT:构建阶段中获取

飞书卡片示例:

图全是裂的

  • 持续集成 Devops 体系做的还不做,整理流程比较顺,比较清晰

待优化

  • 自动化架构可以再优化一些,引入PO
  • 尝试接口自动化测试
  • 可以把现有的脚本分享给其他同事使用,进一步提升框架设计能力。