func-robot-framework
集成robot自动化测试
关于集成测试,我们需要知道的几点:
- 测试人员进行编写
- 侧重于不同模块的接口调用,对新加的功能进行验证
- 注重新版本对以前的集成用例进行回归
因此,更多的应该是跨模块去测试,而且测试用例是测试人员去维护,因此不适合把代码放在开发的git仓库中。
本节要实现的工作:
- 创建新的git仓库
robot-cases
,用于存放robot测试用例 - 为
robot-cases
项目创建Jenkinsfile - 配置Jenkins任务,实现该项目的自动化执行
- 在eladmin-api模块的流水线中,对该流水线项目进行调用
初始化robot-cases项目
-
新建gitlab项目,名称为
robot-cases
-
clone到本地
-
本地拷贝eladmin-api项目的
robot.txt
robot-cases/
└── eladmin-api
└── robot.txt
配置Jenkinsfile及自动化任务
robot-cases/
├── Jenkinsfile
└── eladmin-api
└── robot.txt
Jenkinsfile
多个业务项目的测试用例都在一个仓库中,因此需要根据参数设置来决定执行哪个项目的用例
pipeline {
agent {
label 'jnlp-slave'
}
options {
timeout(time: 20, unit: 'MINUTES')
gitLabConnection('gitlab')
}
stages {
stage('checkout') {
steps {
container('tools') {
checkout scm
}
}
}
stage('Test') {
steps {
script {
container('tools'){
switch(env.comp){
case "eladmin-api":
env.testDir = "eladmin-api"
break
case "eladmin-web":
env.testDir = "business1"
break
default:
env.testDir = "all"
break
}
sh 'robot -d artifacts/ ${testDir}/*'
step([
$class : 'RobotPublisher',
outputPath: 'artifacts/',
outputFileName : "output.xml",
disableArchiveOutput : false,
passThreshold : 100,
unstableThreshold: 80.0,
onlyCritical : true,
otherFiles : "*.png"
])
archiveArtifacts artifacts: 'artifacts/*', fingerprint: true
}
}
}
}
}
}
如何实现将env.comp
传递进去?
配置流水线的参数化构建任务并验证参数化构建
library集成触发任务
由于多个项目均需要触发自动构建,因此可以在library中抽象方法,实现接收comp参数,并在library中实现对robot-cases
项目的触发。
devops.groovy
/**
*
* @param comp
* @return
*/
static def robotTest(String comp=""){
new Robot().acceptanceTest(comp)
}
新建Robot.groovy
文件
package com.luffy.devops
def acceptanceTest(comp) {
try{
echo "Trigger to execute Acceptance Testing"
def rf = build job: 'robot-cases',
parameters: [
string(name: 'comp', value: comp)
],
wait: true,
propagate: false
def result = rf.getResult()
def msg = "${env.STAGE_NAME}... "
if (result == "SUCCESS"){
msg += "√ success"
}else if(result == "UNSTABLE"){
msg += "⚠ unstable"
}else{
msg += "× failure"
}
echo rf.getAbsoluteUrl()
env.ROBOT_TEST_URL = rf.getAbsoluteUrl()
new BuildMessage().updateBuildMessage(env.BUILD_TASKS, msg)
} catch (Exception exc) {
echo "trigger execute Acceptance Testing exception: ${exc}"
new BuildMessage().updateBuildMessage(env.BUILD_RESULT, msg)
}
}
修改Jenkinsfile
测试调用
stage('integration test') {
steps {
container('tools') {
script{
devops.robotTest("eladmin-api")
}
}
}
}