精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

python自動化測試攻城記

北匯信息POLELINK ? 2022-08-16 11:39 ? 次閱讀

隨著軟件開發在造車行業中占有越來越重要的地位,敏捷開發的思想在造車領域中也逐漸地被重視起來,隨之而來的是整車廠對自動化測試需求越來越強烈。本文結合北匯信息在自動化測試方面的豐富經驗,簡單介紹一下實施自動化測試可能需要具備的技能及具體實踐流程。

自動化測試城門-Python

要實現完全的自動化測試,我們首先要做的是先實現半自動化測試,即編寫自動化測試腳本。俗話說Life is short,I use Python,Python作為一種簡單易上手的高級編程語言,憑借其“無所不包”的庫,成為測試腳本開發的不二之選。這里簡單介紹一下,測試腳本開發常用的一些Python標準庫。

城門士卒-os庫

在編寫測試腳本時,不可避免地會遇到對文件路徑的獲取及編輯,os庫里的path函數可以方便地實現這些操作,如絕對路徑獲取os.path.abspath()、路徑拼接os.path.join()、路徑存在判斷os.path.exist()等;如果你需要在Python中運行測試工具提供的命令,那么os庫的system函數或popen函數可以讓你方便地調用cmd(Windows)或shell(Linux)。

城門士卒-sys庫

如果你所編寫的測試腳本有跨平臺運行的需求,那么你可以通過sys庫的platform函數獲取腳本的運行環境。根據運行環境的不同,編寫不同的批處理命令;sys庫中的argv函數,還可以為你的測試腳本提供簡單的命令行接口,當你的腳本需要接收外部傳遞的參數時,你可以通過sys.argv[]方便地獲取。而如果你需要編寫更復雜更友好的命令行接口,你需要使用Python的另外一個標準庫argparse來實現。

城門隊長-re庫

正則表達式是編寫測試腳本的必備技能,因為有時我們會遇到復雜的文本處理,如在工程文件中查找需要修改的配置,并將其修改為我們所需要的內容。此時一般的查找替換函數就很難實現這個功能,我們只能借助強大的re庫(正則表達式)來解決這個棘手的問題。re庫提供的函數有:

re.compile():編譯正則表達式,生成一個 Pattern對象;

re.findall():搜索所有滿足條件的字符串;

re.match():從第一個字符開始匹配模式;

re.search():搜索第一個滿足條件的字符串,查找到第一個停止;

re.sub():替換滿足條件的字符串。

在使用re模塊時,我們一般先用re.compile()將正則表達式編譯生成為一個Pattern對象,然后再基于這個對象進行findall、match等操作,這樣既可以提高代碼的可讀性,也可以提高代碼的運行效率。

使用正則表達式進行查找替換是很方便的,但是在很多時候我們需要在匹配的字符串前后添加內容,并且保留匹配的內容,這時普通的查找替換是難以實現的。

如:希望將hour: minute格式后添加:00形成hour: minute: seconds這種格式。此時可以采用如下方式來實現:

查找的正則表達式:

poYBAGLnh7mAePrWAAADkZpIYkQ622.png

替換為:

poYBAGLnh9yAVQX0AAADG7_W7LE022.png

這里,我們在替換的字符中使用\1,來引用正則表達式中第一個分組匹配到的內容,如果正則表達式中有多個分組,可以依次使用\2\3等進行引用,可以使用\0來引用整個正則表達式的內容。

小結

在掌握了Python基礎語法和這三個標準庫后,自動化測試的大門就為我們敞開了。但是想要編寫一個可以驅動測試工具進行測試的腳本,我們還需要了解測試工具在headless模式[1]下的接口情況,如果工具提供的接口豐富,可以實現在headless模式(這里的headless模式是指在不使用工具GUI的情況下,以純命令行的方式進行工具使用的模式)下對測試工程進行配置和執行等操作,那么我們的測試腳本開發工作將會順利地進行。

但是如果工具提供的headless模式接口有限,無法滿足測試腳本的需求,那么進入自動化測試大門后,等待我們的就是另一個棘手的問題:如何對工程文件進行解析與修改。考慮到大部分的工程文件都是XML格式的,因此后續我們就簡單介紹一下如何通過Python解析和修改XML文件。

自動化測試甕城——XML文件

甕城守備——XML解析

在Python的標準庫中,有專門處理XML文件的庫,無需安裝第三方庫就可以使用Python進行XML文件的解析,但是要想準確地從XML文件中解析出想要的信息,我們首先需要簡單了解一下XML的文件結構。如下是一個簡單的XML文檔。

poYBAGLnhpuAT7X2AABuB1dsB9c521.png

其中Harry Potter元素的結構如下圖所示:

poYBAGLnhquAPKi1AACDKy3dYYo420.png

注:圖片來源于w3school

在該XML文本中,根元素是 <2;bookstore>,文檔中的所有 <2;book> 元素都被包含在 <2;bookstore> 里。<2;book> 元素有 4 個子元素:<2;title>、< author>、<2;year>、<2;price>。每個子元素都包含一個文本內容,但只有子元素title和元素book擁有屬性

我們在解析XML時,一般需要獲取的就是元素的屬性值以及元素的文本內容。以下我們就簡單介紹一下,如何通過python獲取元素的屬性值及文本內容。

Python的XML庫提供了一個通過標簽名稱獲取元素的函數getElementsByTagName(),該函數返回的是一個包含元素對象的list,通過調用元素對象的attributes方法,我們就可以方便地獲取元素的屬性值。如,我們可以使用如下命令獲取XML文件中第一個標簽為title的lang屬性值:

root.getElementsByTagName("title")[0].attributes.getNamedItem("lang").nodeValue

獲取第一個標簽為title的元素的文本信息的代碼如下:

root.getElementsByTagName("title")[0].firstChild.data

甕城參將——XML修改

XML元素的屬性和文本內容修改很簡單,在上小節中獲取對應的元素信息后,直接對其進行賦值即可。但是,修改后的信息保存在XML對象中。要完成對實際XML文件的修改,我們還需要用XML對象中的內容覆蓋原有的XML文件,這一步存在很多棘手的問題。

在XML文件中,為了避免元素文本內容中存在的特殊字符引起解析器錯誤,在文本內容中引入實體引用來替代可能導致錯誤的字符,如回車 、雙引號"、單引號'。如果使用python的xml.dom.minidom庫解析并使用writexml輸出XML文件,該庫會將這些實體引用轉義為其實際字符進行保存。如果不對XML對象中的內容進行處理,導出的XML文件將會存在很多錯誤。

為了避免這個情況的出現,我們需要使用之前小節介紹的正則表達式將這些字符再替換為其實體引用。這個過程需要我們能熟練使用正則表達式進行文本查找與替換。

除了XML文件中的實體引用外,如果XML文件中存在中文字符,那么還有一個需要注意的事情:不要使用with openas的方式讀寫XML文件,要使用open指定文件的編碼為'utf-8’的方式,對XML文件進行寫入。如下所示:

f =open(self.JenkinsJobXMLPath,'w',encoding="utf-8")

dom.writexml(f,indent='',addindent='\t',newl='',encoding='utf-8')

f.close()

小結

上述兩個問題是修改XML文件時普遍會遇到的問題。解決了這兩個問題,我們基本上就可以完美實現XML文件的修改了。此時,我們就可以編寫自動化程度更高的測試腳本,然而我們依然無法實現完全的自動化測試,因為我們仍然需要手動地去執行測試腳本。那么,我們該如何實現測試腳本的自動執行呢?這就需要我們打通自動化測試的最后一個關卡,Jenkins。

自動化測試總兵——Jenkins

Jenkins是一個開源、免費的可擴展持續集成引擎,主要用于:

  • 持續、自動地構建/測試軟件項目;
  • 監控一些定時執行的任務。

為了實現測試腳本的自動化運行,我們需要配置JenkinsJob,使Jenkins在設置的觸發條件滿足時,自動搭建測試腳本的運行環境,然后執行測試腳本,最后將測試結果發送給相關人員。因此我們需要了解Jenkins的源碼管理、構建觸發器、構建及郵件通知等設置。

總兵的連招1——源碼管理

Jenkins服務器最基本的作用是監視版本控制器,當版本庫有新的更改時,檢出版本庫中的文件,或者,你可以選擇只是定期檢出版本庫中最新的文件。無論哪種方式,Jenkins與版本控制軟件的集成是必不可少的。

Jenkins開箱即用式支持Git、CVS和SVN,還通過插件與大量其他版本控制工具進行集成,如ClearCase、Perforce、PVCS等等。

不同的版本控制軟件在Jenkins端的需要的配置并不相同,有的甚至差異很大。但是只要你熟悉你所使用的版本控制軟件,那么在Jenkins端,就可以很容易地對版本庫進行配置。

以SVN為例,為了從SVN倉庫中獲取源碼,我們需要提供相應SVN版本庫的URL,在完成URL輸入后,Jenkins會檢查URL的有效性,如果所提供的URL要求身份認證,Jenkins將會自動提示選擇相應的憑據以驗證賬號信息,如下圖所示。

pYYBAGL7CWWALfUUAACWVaLNgMg325.png

默認情況下,Jenkins會將給定的代碼庫中的文件檢出到JenkinsJob的Workspace中。如果你需要將代碼庫檢出到指定的目錄中,你可以在Localmoduledirectory中輸入你想要的目錄名或相對Workspace的路徑。

如果你需要從多個SVN版本庫中獲取文件,可以點擊“Addmodule...”按鈕,來添加別的版本庫。

總兵的連招2——構建觸發器

常用的構建觸發器有周期性構建SCM輪詢構建,兩者都是使用相同corn風格語法進行設置,如下圖所示。

pYYBAGL7CaKAPKKDAADKSf5mFWE579.png

我們只需要了解corn風格的語法,就可以方便地進行構建觸發器的設置。corn風格的語法包含五個由空格分隔的字段:

MINUTE HOUR DOM MONTH DOW

每個字段使用下面的值:

MINUTE小時內的分鐘數(0-59)

HOUR一天的小時數(0-23)

DOM本月的天數(1-31)

MONTH月份(1-12)

DOW本周的一天(0-7),其中0和7都是星期日。

要為一個字段指定多個值,可以使用以下操作符:

  • “*”代表一個字段的所有可能的值。如,“* * * * *”表示周期為一分鐘;
  • 使用“M-N”定義范圍。如,在DOW中“1-5”表示周一到周五;
  • 使用“/”定義范圍間隔時間。如,MINUTE字段“*/5”表示每5分鐘;
  • 逗號分隔的列表表示有效值。如,MINUTE字段“15,45”表示在每小時的第15和第45分鐘運行;

通常,我們只需要在這個字段中寫一行,但是對于更復雜的調度配置,我們可能需要寫多行。

總兵的連招3——構建

在完成了之前的配置后,Jenkins應該知道在何時從何處獲取測試工程及源碼。現在我們需要做的事情是,告訴Jenkins在獲取測試工程和源碼后該如何做。一般情況下,我們會將之前編寫的測試腳本放在測試工程的版本庫中,或者從專門的測試腳本庫中檢出到JenkinsJob的Workspace中,因此我們在這里只需要執行編寫好的測試腳本即可。

執行腳本的方式可以根據具體腳本的運行環境,選擇執行Shell或Windows批處理命令。因此我們需要簡單地了解Shell或Windows的常用批處理命令。為了避免編寫復雜的批處理命令,我們應盡量把工作放在測試腳本中完成。本文以如下圖所示的簡單的Windows批處理為例,簡單介紹一下構建步驟的編寫。

pYYBAGL7CWWAKlP8AABE10yxQAU229.png

在上圖中,有兩行命令:

第一行的作用是將目錄由初始的Workspace目錄切換到Workspace下的Script目錄;

第二行的作用是運行Script目錄中的測試腳本Script.py,并為該腳本傳遞一個參數,該參數為Jenkins的環境變量JOB_NAME,即當前JenkinsJob的名稱。

這樣就完成了對測試腳本的調用。

總兵的連招4——郵件通知

自動化測試的一個重要環節,就是將測試結果通知到相關人員,如開發\測試人員,或項目管理人員等。Jenkins對電子郵件提供了開箱即用的支持,我們可以在構建后處理中勾選E-mail Notification,如下圖所示。然后輸入需要通知的人員郵箱,即可使Jenkins在構建完成后,向指定的人員發送一封友好的電子郵件。

poYBAGL7CWWALgZiAABrJ5b2yX4204.png

如果你想對郵件內容進行高度定制,那么E-mail Notification就無法滿足需求,我們需要安裝可編輯的電子郵件插件Editable Email Notification,來實現電子郵件的定制化工作。

在Editable Email Notification中,我們可以用HTML編寫電子郵件的內容,并引用Jenkins的環境變量,這樣我們就可以在郵件中描述當前JenkinsJob的測試執行概況,讓收件人快速地了解當前的測試狀態。但是這要求我們對HTML和Jenkins環境變量都有比較深的了解。

有些情況下,我們需要在郵件中執行一些數據提取等復雜工作,比如將控制臺輸出中的一些數據在郵件中進行展示,這時我們需要借助email-ext-plugin插件提供的Groovy接口,用Groovy編寫郵件內容。

總之,Jenkins的郵件通知功能非常強大,我們可以在自動化測試的工作中不斷進行探索。

小結

本節簡單介紹了Jenkins的傳統表單類型的FreestyleJob,然而目前Jenkins的發展方向是 Pipeline Job,Jenkins將Pipeline作為優先開發項目。這就意味著Pipeline在應用程序中是作為實體被設計和支持的,而不是通過在Jenkins中連接一堆任務而形成流水線。Pipeline類型的Job可以通過編程實現,可以實現更復雜構建邏輯和工作流,更重要的是在Pipeline中有專門的用于流水線編程的結構化DSL,其可以在工作空間中輕松地實現文件共享功能。同時Pipeline具有全新的Jenkins可視化界面 ——BlueOcean,其為Pipeline的每個階段添加了圖形化的展示,如下圖所示。

poYBAGL7CWWALvVYAABcqqXVyQI872.png

因此我們在熟悉了表單類型的 FreestyleJob后,可以嘗試將其轉換為Pipeline的Job,當然目前并非所有的Jenkins插件都支持Pipeline,有些老舊的插件還無法支持Pipeline,我們需要根據實際的工作情況進行Jenkins工程類型的選擇。

攻城總結

古人云:知所不豫,行且通焉。雖然通過本文,我們全面地了解了自動化測試的流程,但是只有在自動化測試的實踐中不斷探索,我們才能真正窺得自動化測試的全貌。北匯信息作為專業的自動化測試服務供應商,也可以為客戶提供優質全面的自動化測試服務。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 自動化測試
    +關注

    關注

    0

    文章

    204

    瀏覽量

    26895
  • python
    +關注

    關注

    56

    文章

    4783

    瀏覽量

    84473
收藏 人收藏

    評論

    相關推薦

    Python環境下的代理服務器搭建與自動化管理

    Python環境下搭建與自動化管理代理服務器是一項涉及網絡編程和自動化技術的綜合任務。
    的頭像 發表于 11-14 07:31 ?107次閱讀

    探索Playwright:前端自動化測試的新紀元

    作者:京東保險 張新磊 背景 在前端開發中,自動化測試是確保軟件質量和用戶體驗的關鍵環節。隨著Web應用的復雜性不斷增加,手動測試已經無法滿足快速迭代和持續交付的需求。自動化
    的頭像 發表于 10-22 14:27 ?116次閱讀

    如何使用python調起UDE STK5.2進行下載自動化下載呢?

    近期有需求使用python調起udestk5.2做一些自動化下載的事情,但是在網上搜索后沒有找到相關的資料,公司的同事們也沒接觸過此類需求,因此也不知道如何去做,我的想法是:原理上應該是通過調用
    發表于 10-17 09:22

    開關電源自動化測試設備:如何實現自動化測試

    開關電源自動化測試設備是將測試軟件和測試硬件集成在一個電源測試柜中的ate自動測試設備,其
    的頭像 發表于 08-30 18:19 ?1183次閱讀
    開關電源<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>設備:如何實現<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>?

    OTA自動化測試解決方案——實車級OTA測試系統PAVELINK.OTABOX

    作者|網蟲小編|不吃豬頭肉引言往期內容里為大家介紹了OTA技術、OTA后續的發展趨勢預測及OTA自動化測試解決方案。本文是OTA系列的第三篇文章,今天主要向大家介紹實車級OTA自動化測試
    的頭像 發表于 07-11 08:26 ?603次閱讀
    OTA<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>解決方案——實車級OTA<b class='flag-5'>測試</b>系統PAVELINK.OTABOX

    機械自動化自動化的一種嗎

    引言 自動化技術是指利用控制裝置對生產過程進行控制,以實現生產過程的自動化。機械自動化自動化技術的一種,它主要涉及到使用機械設備和控制系統來實現生產過程的
    的頭像 發表于 07-01 09:32 ?1552次閱讀

    納米軟件自動化測試合作:4644芯片與VPX模塊測試

    近日,納米軟件與西安廣勤電子技術有限公司就4644電源芯片自動化測試和VPX電源自動化測試達成戰略合作。在雙方進行深入探討后,納米軟件為廣勤電子公司提供了高效、專業的
    的頭像 發表于 05-09 15:49 ?413次閱讀
    納米軟件<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>合作:4644芯片與VPX模塊<b class='flag-5'>測試</b>

    ATECLOUD自動化測試系統區別于傳統自動化測試系統

    納米軟件通過多年業務積累,具有豐富的軟件開發和系統集成經驗。ATECLOUD自動化測試平臺也一直在迭代升級,擴展功能,致力于讓測試變得更簡單、更便捷。
    的頭像 發表于 05-08 15:58 ?404次閱讀
    ATECLOUD<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>系統區別于傳統<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>系統

    納米軟件分享:電源管理芯片自動化測試方案

    在納米軟件與江蘇某科技公司合作的電源管理芯片產線測試項目中,需要完成單入單出、單入雙出、單入三出、單入四出系列微模塊的14個項目的自動化測試。該公司之前是手動測試,沒有
    的頭像 發表于 04-23 13:47 ?447次閱讀
    納米軟件分享:電源管理芯片<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>方案

    鴻蒙OS開發實戰:【自動化測試框架】使用指南

    為支撐HarmonyOS操作系統的自動化測試活動開展,我們提供了支持JS/TS語言的單元及UI測試框架,支持開發者針對應用接口進行單元測試,并且可基于UI操作進行UI
    的頭像 發表于 04-08 14:49 ?1295次閱讀
    鴻蒙OS開發實戰:【<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>框架】使用指南

    Python自動化測試框架及其應用

    Pytest是一個非常成熟的全功能的Python測試框架,與python自帶的unittest測試框架類似,但是比unittest框架使用起來更簡潔,功能更強大。
    的頭像 發表于 04-03 16:15 ?516次閱讀
    <b class='flag-5'>Python</b><b class='flag-5'>自動化</b><b class='flag-5'>測試</b>框架及其應用

    Eggplant—HMI自動化測試軟件

    Eggplant是英國TestPlant公司推出的創新性自動化測試工具。通過VNC或RDP通訊技術遠程桌面連接被測對象,基于圖像和文字識別算法進行對象定位,進而驅動和確認被測HMI設備的響應,能夠
    的頭像 發表于 01-23 18:00 ?570次閱讀

    ETC自動化測試系統ETC Runsys. #ETC #自動化測試 #OBU #RSU

    自動化測試
    度緯儀器
    發布于 :2024年01月12日 10:01:20

    電源測試怎么自動化?電源模塊自動化測試系統如何實現?

    納米軟件在電測行業深耕十余年,在行業的大背景下,為了進一步完善自動化測試,開發出了新的智能的電源模塊自動化測試系統ATECLOUD-POW
    的頭像 發表于 12-15 14:40 ?835次閱讀
    電源<b class='flag-5'>測試</b>怎么<b class='flag-5'>自動化</b>?電源模塊<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>系統如何實現?

    LabVIEW與Tektronix示波器實現電源測試自動化

    LabVIEW與Tektronix示波器實現電源測試自動化 在現代電子測試與測量領域,自動化測試系統的構建是提高效率和精確度的關鍵。本案例介
    發表于 12-09 20:37