(轉載)UI接口分層自動化測試框架設計思想

閱讀本小節,需要讀者具備如下前提條件:

1.??掌握一種編程語言基礎,如java、python等。

2.??掌握一種單元測試框架,如java語言的testng框架、python的unittest框架。

3.??掌握目前主流的UI測試框架,移動端APP測試框架Appium,或者掌握Web端測試框架Selenium。

4.??如果是Appium框架,還需要掌握如何定位控件元素,原生頁面可使用安卓SDK自帶的uiautomatorviewer工具,webview頁面可以使用Chrome瀏覽器入"chrome://inspect/#devices",該方法需要FQ或者修改hosts。

5.??如果是Web端,瀏覽器中打開F12即可。

1APP端UI分層自動化測試框架的搭建

?

?

下面以Appium+python+unittest為例介紹UI自動化框架的搭建思路

?

1. 最開始入門級別的代碼

以登錄頁面舉例,如下:

?

最開始的登錄腳本:

?

?

2. 對元素操作的公用方法進行封裝

按照上述代碼寫了很多行,發現每次操作元素都要寫同樣的代碼,一是啰嗦,二是工作量大,這樣就要將重復高的操作抽象出來進行封裝成類,及把元素定位,元素點擊,元素輸入、頁面滑動等方法進行封裝,如下代碼:

?

?

?

上述代碼只是展示了查找元素的方法,在BaseAction類中封裝元素對象的重用操作代碼筆者就不貼出來,大家明白思路即可。

?

3. 測試代碼和測試數據分離

?

開始測試數據還是寫在測試代碼中,如果用例多了,后期需要修改數據,這樣只能在測試代碼中修改,實際中沒有這樣維護代碼的,所以需要將測試數據和代碼分離,筆者選擇ini配置文件存放數據。

那么問題來了,把數據放在ini配置文件中,在代碼中怎樣獲取數據呢,這就需要將操作配置文件的方法封裝成一個單獨的類,即如下代碼

?

?

?

通過對元素操作公用方法的封裝和測試代碼和測試數據的分類,優化的腳本如下:

存放數據的ini配置文件:

app配置:

?

?

存放元素控件:

?

?

存放元素輸入的數據:

?

?

測試腳本:

?

?

4. 通用的公用類封裝

以上的腳本中,其實還缺少一些東西,如啟動appiumsever,日志記錄,發送郵件,數據庫操作等,這幾種操作都是框架公用的,所以單獨封裝成類,代碼如下:

appiumsever類:

?

?

log工具類:

?

?

還有發送郵件類和數據庫操作類筆者就不貼出來了,重在大家理解思路即可。

?

?

5. 筆者框架分層分享

現在在測試界吹噓的分層自動化,意思就是把各種代碼實現的類根據不同的功能進行分層,自動化測試框架包括的元素大致如下:

基于Appium框架運用python語言以及unittest單元測試框架,搭建的APP的UI自動化框架如下:
AppAuto/:
??apk:?存放app的apk安裝包
??config:?存放配置文件以及測試數據,把所有的項目的配置均放在????????????????????????????????????????????????????????????這里,用python支持較好的配置文件格式如ini等進行配置。
??????????實現配置和數據與代碼分離。
??screenshot:?存放測試用到的圖片以及測試時用例失敗截圖
??log:?存放日志文件,包括運行時日志runtime.log、error.log和appium.log日志
??report:?存放生成的html格式的測試報告文件
??src:源碼層
??????common層:?框架級公用方法庫
??????????chche.py:?緩存
??????????dbsever.py:?數據庫操作封裝公用類
??????????emailsever.py:?發送郵件服務封裝公用類
??????????confparser.py:?配置文件解析器
??????????log.py:?日志記錄工具
??????????appiumsever.py: appium服務公用類
??????????initappdriver.py:?初始化driver類
??????????adbconnect.py: adb連接操作
??????????...
??????????(如果還有框架級別的公用方法,還可以在該層封裝成類,通過面向對象的方式調用即可)
??????functions層:?用例級公用方法庫(元素操作公用方法封裝,基于PageObject模式對控件公用方法封裝,常用業務操作封裝)
??????????eleaction.py:?封裝元素操作的一些公共方法
??????????login.py:?登錄操作
??????????...
??????????(該層主要是封裝用例層面的公用方法,常用的操作步驟,針對PageObject思想對不同類型的頁面控件元素的操作封裝等)
??????testcase層:?測試用例層
??????????basecase.py:?測試用例基礎類
??????????testcase1.py:?測試用例1
??????????...
??????runner層:?測試套件層
??????????testrunner.py:?各種加載測試用例的方法封裝,以及生成報告
??run.py:?執行器,整個框架運行該文件即可

?

下面是筆者搭建的一個小框架,僅供參考:

?

轉載:http://mp.weixin.qq.com/s/N49ZbKMTy_irsTxd5GQ9eg(李文祥?光榮之路

轉載于:https://www.cnblogs.com/yang1208/p/7654729.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454879.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454879.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454879.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何提高閱讀源代碼的效率 .

如何提高閱讀源代碼的效率 記得在開源流行之前,我看過的代碼緊限于所參與的項目,能有個幾萬行就不錯哩。后來很多優秀開源項目都相繼蹦出來了,閱讀的代碼量那叫一個大呀!不得不看。我現在掉到android這個大坑里,每天都…

170821-關于SpringMVC的知識點

1.SpringMVC 概述以及優勢 SpringMVC和Spring的關系: 軟件開發的三層架構: web層【表示層、表現層】---->Service層---->Dao[DataBase Access Object]---->數據庫! SpringMVC實際上是Spring的一個子模塊,我們用Spring…

pojo類中list存儲其他字段_List集合流處理類型小結

本文為博主原創,未經允許不得轉載對應實體類importlombok.Getter;importlombok.Setter;GetterSetterpublic classStudent {privateString name;private intage;privateString className;privateString birthday;}1.根據字段取出某一個字段屬性的集合List studentLis…

Hash表的擴容(轉載)

Hash表(Hash Table)hash表實際上由size個的桶組成一個桶數組table[0...size-1] 。 當一個對象經過哈希之后。得到一個對應的value , 于是我們把這個對象放到桶table[ value ]中。當一個桶中有多個對象時。我們把桶中的對象組織成為一個鏈表。 這在沖突處…

寫在前面的一些話:《Learning OpenCV》中文版 .

2009-09-17 15:51 7578人閱讀 評論(4) 收藏 舉報 <!-- /* Font Definitions */ font-face {font-family:Helvetica; panose-1:2 11 5 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-sign…

獨家 | 一文讀懂自然語言處理NLP(附學習資料)

前言 自然語言處理是文本挖掘的研究領域之一&#xff0c;是人工智能和語言學領域的分支學科。在此領域中探討如何處理及運用自然語言。 對于自然語言處理的發展歷程&#xff0c;可以從哲學中的經驗主義和理性主義說起。基于統計的自然語言處理是哲學中的經驗主義&#xff0c;基…

python mock測試_使用mock測試python中的函數

對于測試覆蓋&#xff0c;我想測試文件signalC中該函數的異常塊&#xff1a;class SignalC:def readSignal(self, a):try:with open(os.path.join(self.newSubFolder, "my file" .csv), a) as csvfile:writer csv.writer(csvfile, delimiter,, quotechar|,quotingc…

如何更好閱讀源代碼 .

寫在前面的話&#xff1a;    自從我在linuxaid.com.cn上發表一些文章開始&#xff0c;就不斷的有網友發來電子郵件&#xff0c;或者是就其中某些問題進行探討&#xff0c;或者是查詢其他文章的地址&#xff08;往往這些網友看的是其他網站轉載的我的文章&#xff09;&#x…

wins系統flask綁定mysql_flask如何連接mssql,網上大多是sqlite和mysql教程?

這個居然也冒出來&#xff0c;刨墳了。我們不喜歡寫原生SQL語句&#xff0c;那個寫著費勁&#xff0c;日常開發時候&#xff0c;我們怎么CRUD數據庫呢&#xff1f;一般使用ORM&#xff0c;對象關系映射(英語&#xff1a;Object Relational Mapping&#xff0c;簡稱ORM)。主力使…

hdu 6086 -- Rikka with String(AC自動機 + 狀壓DP)

題目鏈接 Problem DescriptionAs we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some math tasks to practice. There is one of them:Yuta has n 01 strings si, and he wants to know the number of 01 antisymmetric strings …

課堂動手動腦問題

對于隨機數&#xff0c;java通過Math.random&#xff08;&#xff09;來實現&#xff0c;比如要得到一個隨機數我們可以int a&#xff1b; a&#xff08;int&#xff09;Math.random();但對于隨機數&#xff0c;它是從0到1之間的數&#xff0c;所以必須通過int把它轉為整數&…

GNU/Linux下有多少是GNU的?

導讀&#xff1a;一個葡萄牙的學生寫了一篇文章 《How much GNU is there in GNU/Linux?》由酷殼網的陳皓整理編譯為《GNU/Linux下有多少是GNU的》。這篇文章主要分布了今年4月份的Ubuntu Natty的Linux分發包。其主要是用代碼行來做的分析&#xff0c;用兩個餅圖對比分析。 內…

便攜式三星mysql_JDBC鏈接mysql - 三星藍

package chp07;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;public classJDBC_Test {//創建靜態全局變量staticConnection conn;staticStatement st;public static voidmain(Stri…

C++ 類、對象、class

一、對象初始化 1.不能在類聲明中對數據成員初始化&#xff0c;因為類只是一個抽象類型&#xff0c;不占存儲空間&#xff0c;無處容納數據。 2.若某類的數據成員都是public&#xff0c;則可以像結構體一樣初始化&#xff0c;如 Time t{12,21,04}&#xff1b; 若數據成員有priv…

Unity 富文本

參考鏈接&#xff1a;http://www.ceeger.com/Manual/StyledText.html 首先要說的是不僅僅ugui的text組件支持富文本&#xff0c;Debug.Log也是支持的 Debug.Log("<color#ffff00ff><b>愛生活</b></color> <color#00ffffff><b> 愛海瀾&…

Web項目替換jar包中的文件的方法

經常遇到這樣的問題&#xff0c;需要修改jar包中的方法。應該如何做&#xff1f; 1、有些很人性化的框架jar包&#xff0c;比如SpringSecurity&#xff0c;可以修改配置文件指定一個新建的類&#xff0c;讓類實現Jar包中的對應的接口就好了。 2、大部分的jar包都不會有這么方便…

程序員技術練級攻略

導讀&#xff1a;本文是由陳皓和他的一位朋友Mailper合作完成&#xff0c;原名叫《Build Your Programming Technical Skills》&#xff0c;本文分享了Mailper和作者個人的學習經歷。每個程序員都希望自己能順利的升級到高的層次&#xff0c;您不妨按照下面的方法去做。 前言 你…

Linux shell 之 提取文件名和目錄名的一些方法

很多時候在使用Linux的shell時&#xff0c;我們都需要對文件名或目錄名進行處理&#xff0c;通常的操作是由路徑中提取出文件名&#xff0c;從路徑中提取出目錄名&#xff0c;提取文件后綴名等等。例如&#xff0c;從路徑/dir1/dir2/file.txt中提取也文件名file.txt&#xff0c…

bzoj 2752: [HAOI2012]高速公路(road)

Description Y901高速公路是一條重要的交通紐帶&#xff0c;政府部門建設初期的投入以及使用期間的養護費用都不低&#xff0c;因此政府在這條高速公路上設立了許多收費站。Y901高速公路是一條由N-1段路以及N個收費站組成的東西向的鏈&#xff0c;我們按照由西向東的順序將收費…

搭建DNS主、從服務實驗

此次我們的口號是&#xff1a;簡單、有趣上手DNS服務博主是一個言出必行de好人&#xff0c;&#xff08;正經臉&#xff09;上次轉載了有關DNS的基礎介紹&#xff0c;此次我們來通過實驗搭建DNS服務器從而更好的了解DNS搭建過程如何開始&#xff0c;且聽我細細道來首先我們通常…