前言
到此,我们已经实现在本地运行用例了。
这个时候其实还处于demo阶段,在本地手工运行个几次,效果没那么大。
自动化测试需要与CICD流程进行串联才能体现其价值,无论是作为线上巡检,还是发版前的自动检查。
所以需要将测试套与Jenkins进行结合。
Jenkins基础知识
Jenkins相关知识还是蛮多的,可以参考
Jenkins(一)
Jenkins(二)
Jenkins(三)
Jenkins(四)
Jenkins(五)
Jenkins(六)
Jenkins(七)
Jenkins(八)
编写Jenkinsfile
我们暂时不和开发阶段的流程串联,先完成测试部分的流程。
测试部分流程,大概有这几步
- 测试环境准备
- 测试代码拉取
- 测试用例执行
- 测试报告生成
- 测试结果发送
这里采用固化的执行设备去进行测试,所以可以省略「测试环境准备」
采用Jenkins的方式发送报告没有直接在脚本中实现来的灵活,所以这一步放在后面实现
现在Jenkinsfile
大致如下
pipeline {
agent {
}
triggers {
}
parameters {
}
stages {
stage('克隆代码'){
steps{
}
}
stage('执行测试'){
steps{
}
stage('生成Allure报告'){
steps{
}
}
}
}
- agent:指定执行的测试电脑
- triggers:定时执行
- parameters:参数化构建
- stages-stage-steps:步骤
克隆代码
有时候我们需要动态的选择代码仓库里面的代码,这就需要使用gitParameter
这个参数了
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
需要改为自己的凭证
,不然可能因为权限不足无法拉取代码
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
退出
代码语言:javascript复制必须使用
exit 0
退出后才能生成Allure报告
stage('执行测试'){
steps{
dir("${env.WORKSPACE}/src/casess/") {
sh ""
sh '''
python3 allure_debug.py
exit 0
'''
}
}
}
生成Allure报告
path
指定报告的存放路径就可以了
stage('生成Allure报告'){
steps{
allure includeProperties: false, jdk: '', results: [[path: 'report/allure_results']]
}
}
完整Jenkinsfile
- 每小时定时执行
参数化部分:
- 可以指定执行的电脑「test_PC」
- 可以指定执行的分支「branch」
- 可以指定发送邮件「email」
- 可以指定发送企业微信通知「robot」
- 可以指定执行的用例「cases」
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']]
}
}
}
}