9.UI自动化测试框架搭建-使用Jenkinsfile管理测试流程

2022-03-29 16:39:51 浏览数 (1)

前言

到此,我们已经实现在本地运行用例了。

这个时候其实还处于demo阶段,在本地手工运行个几次,效果没那么大。

自动化测试需要与CICD流程进行串联才能体现其价值,无论是作为线上巡检,还是发版前的自动检查。

所以需要将测试套与Jenkins进行结合。

Jenkins基础知识

Jenkins相关知识还是蛮多的,可以参考

Jenkins(一)

Jenkins(二)

Jenkins(三)

Jenkins(四)

Jenkins(五)

Jenkins(六)

Jenkins(七)

Jenkins(八)

编写Jenkinsfile

我们暂时不和开发阶段的流程串联,先完成测试部分的流程。

测试部分流程,大概有这几步

  1. 测试环境准备
  2. 测试代码拉取
  3. 测试用例执行
  4. 测试报告生成
  5. 测试结果发送

这里采用固化的执行设备去进行测试,所以可以省略「测试环境准备」

采用Jenkins的方式发送报告没有直接在脚本中实现来的灵活,所以这一步放在后面实现

现在Jenkinsfile大致如下

代码语言:javascript复制
pipeline {
   agent {

   }
   triggers {

   }
   parameters {

   }
   stages {
      stage('克隆代码'){
          steps{

          }
      }
      stage('执行测试'){
         steps{

      }
      stage('生成Allure报告'){
        steps{

        }
      }
   }
}
  • agent:指定执行的测试电脑
  • triggers:定时执行
  • parameters:参数化构建
  • stages-stage-steps:步骤

克隆代码

有时候我们需要动态的选择代码仓库里面的代码,这就需要使用gitParameter这个参数了

代码语言:javascript复制
gitParameter(name: 'branch', branch: '', branchFilter: '.*', defaultValue: 'origin/master', description: '代码分支', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH')

它的名字是branch

默认分支为origin/master

使用的时候就是${params.branch}

credentialsId需要改为自己的凭证,不然可能因为权限不足无法拉取代码

代码语言:javascript复制
stage('克隆代码'){
    steps{
        checkout([$class: 'GitSCM', branches: [[name: "${params.branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [], gitTool: 'Default', submoduleCfg: [], userRemoteConfigs: [[url: 'https://gitee.com/zx660644/uitest.git',credentialsId: 'xxx',]]])
    }
}

执行测试

编写一个allure_debug.py主入口文件,执行全部的测试用例

使用dir切换工作路径,然后使用python xxx运行用例

最后使用exit 0退出

必须使用exit 0退出后才能生成Allure报告

代码语言:javascript复制
stage('执行测试'){
   steps{
       dir("${env.WORKSPACE}/src/casess/") {
       sh ""
              sh '''
              python3 allure_debug.py
              exit 0
              '''
                  }
          }
}

生成Allure报告

path指定报告的存放路径就可以了

代码语言:javascript复制
stage('生成Allure报告'){
  steps{
      allure includeProperties: false, jdk: '', results: [[path: 'report/allure_results']]
  }
}

完整Jenkinsfile

  • 每小时定时执行

参数化部分:

  • 可以指定执行的电脑「test_PC」
  • 可以指定执行的分支「branch」
  • 可以指定发送邮件「email」
  • 可以指定发送企业微信通知「robot」
  • 可以指定执行的用例「cases」
代码语言:javascript复制
pipeline {
   agent {
       label "${params.test_PC}"
   }
   triggers {
        cron('H * * * *')
   }
   parameters {
        gitParameter(name: 'branch', branch: '', branchFilter: '.*', defaultValue: 'origin/master', description: '代码分支', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH')
        choice(name: 'test_PC', choices: ['a', 'b'], description: '执行设备')
        choice(name: 'headless', choices: ['false', 'true'], description: '是否不显示浏览器界面')
        choice(name: 'concurrent', choices: ['否', '1', '2', '3', '4', 'auto'], description: '是否并发执行,并发数')
        string(name: 'robot', defaultValue: '', description: '企业微信群机器人地址,以逗号分隔')
        string(name: 'email', defaultValue: '', description: '邮箱地址,以逗号分隔')
        text(name: 'cases', defaultValue: '''''', description: '要执行的用例', )
   }
   stages {
      stage('克隆代码'){
          steps{
              checkout([$class: 'GitSCM', branches: [[name: "${params.branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [], gitTool: 'Default', submoduleCfg: [], userRemoteConfigs: [[url: 'https://gitee.com/zx660644/uitest.git',credentialsId: 'xxx',]]])
          }
      }
      stage('执行测试'){
         steps{
             dir("${env.WORKSPACE}/src/cases_ui/") {
             sh ""
                    sh '''
                    python3 allure_debug.py
                    exit 0
                    '''
                        }
                }
      }
      stage('生成Allure报告'){
        steps{
            allure includeProperties: false, jdk: '', results: [[path: 'report/allure_results']]
        }
      }
   }
}

0 人点赞