使用jenkins pipeline,並發selenium測試 --- 你值得了解


一、契機

    相信很多使用selenium進行UI測試,再對接jenkins時,都是簡單的在jenkins上將命令輸入就完事了。

    但是,相信你一定會遇到以下問題:

     1、你需要同時跑不同文件或不同類的用例,怎么處理?用selenium grid,但我僅僅是功能,不想去區分瀏覽器,並且代碼中我也不想寫grid?

     2、在jenkins中並發,怎么將報告合並成一份?

     3、用測試框架的並發插件,比如nose processes, pytest的xdist,都是在一台機器上,執行selenium 同時打開多個瀏覽器,你確保機器能受得了?

二、思路

    帶着以上幾個問題,網上一直沒有好的解決方法,普遍使用的是selenium grid,但相信很多人對grid都不喜歡

    最近在看jenkins中的pipeline模式,發現其中有一個很好用的功能:parallel 並發,那就來用parallel來解決我們以上的問題

 

三、解決

    jenkins的pipeline就不多介紹,看官網https://jenkins.io/doc/book/pipeline/就行,以后看時間會寫寫這方面的文章

   1)先看看用Declarative方法寫的並發parallel

   

pipeline {
    agent none
    

    stages {
        stage('Run Tests') {
            parallel {
                stage('Run_test1') {
                    agent {
                        label "10.3.208.151"
                    }
                    steps {
                        script{
                           sh "sleep 20"
                        }
                        }
                    }
                
                
        //-----------------------------------------------------------
        stage('Run_test2') {
                    agent {
                        label "10.3.208.151"
                    }
                    steps {
                        script{
                            sh "sleep 10"
                            
                        }
                        }
                    }
                    
                
                

        //-----------------------------------------------------------

        


        //----------------------------------------------------------
        }
    }
}
}
View Code

   這么簡單的一個並發腳本,看看執行時間,總的構建時長為23秒

  

那有了這個基礎后,我們將我們的在jenkins上執行selenium腳本全改成pipeline方式,按類或者按文件執行,這里就由你自己控制了。

  2)問題一解決了,我們看看問題二,將報告合並

   相信很多測試者生成的報告有很多種,有xml格式的,有html格式的,有用allure生成的。這里我們介紹xml和allure格式的,因為html格式的還要自己寫合並程序,太麻煩

   1,   xml方式的,在jenkins上會直接生成TestReport,所以這個很好處理,只需要在pipeline中的每個stage中用post將 xml發布,如下

      

post {
     always {
          junit 'acl.xml'
                }
}
                            

 2,  allure方式的,這個我們了解下allure原理,allure是將本地的生成的xml文件最后用allure命令生成報告的,所以我們的難點是怎么拿到在不同機器上的文件,然后再放在一台機器上,最后生成報告。

     還好,pipeline有一個stash的方式,是在構建后將文件存在master上,給后續的job使用,后續的job再用unstash拿到

     所以我們可以在每個stage中這么寫

stash includes: 'allure-results\\*', name: 'xxxxx'

   將報告存起來,名字叫xxxx

   然后我們在parallel並發的stage外再起一個stage,拿到文件,最后生成報告,如下

stage('Report') {
       agent {
                        label "master"
                    }
           steps {
          unstash 'xxxxxx'
          unstash 'xxxxxx2'
       }
           post {
                        always {
                        allure includeProperties: false, jdk: '', results: [[path: 'allure-results']]
                       }
                       }
           
    }

完美解決

3)  任務的並發限制

  如果你想控制你的並發數量,可以有兩種方式實現

   1,用節點的executors來限制

   2,下載jenkins插件 Throttle Concurrent Plugin

   

好了,基本解決方案已實現,但實際落地,還需要學習很多。比如jenkins中pipeline的各種使用方法,過程中的各種坑。有問題大家可以留言。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM