1. 程式人生 > 實用技巧 >2020年廣深小龍最新web、介面自動化測試框架樣板

2020年廣深小龍最新web、介面自動化測試框架樣板

2020年廣深小龍最新web、介面自動化測試框架樣板。廢話不多說,直接看簡介:

一、介面自動化測試框架:

**一、簡介:**

框架:python3 + request + pytest + yaml + faker

1、host域名配置,config.yaml檔案 host: www.xxx.com; 

2、request預設是post請求(如需get請求則寫:method: get);

3、xpath:存取你要的值,用來引數化關聯(列表形式)寫法:"$..dict"
    
    json寫法:"$..dictid"
    
    re寫法:{"re", "dictid", "invalidxx('(.+?)'\xx)"}

4、支援多個yaml檔案的測試用例執行(指定某個yaml檔案待實現);
   
5、pytest.ini 預設值:addopts = -s --html=../report/report.html

6、注意json、data的格式,該是什麼寫什麼,例1,json: xxx  例2,data:current=1&size=9999&type=2

7、validators:多個斷言
	
	check:   因返回的是result物件,如填寫 status_code -->等價於 result.status_code
    selector:斷言方式,例1填寫==,則exp == xx,例2填寫len,則exp == len(xx)
    exp:     斷言您的期望的結果

8、引用變數

    xpath變數:意思是你自己存的引數,比如存了token,則這樣引用:${token}
    
    系統隨機變數(faker隨機生成):則這樣引用:ppl{xxx},其中xxx為faker的方法,官方請參考:https://faker.readthedocs.io/en/master/locales/zh_CN.html
    
    faker常用部分示例:
        1.隨機名字:ppl{name}
            返回結果:蘇麗麗
            
        2.隨機地址:ppl{address}
            返回結果:北京市建平市南長賈路K座 324786
            
        3.返回隨機郵箱:ppl{email}
            返回結果:[email protected]
            
        4.返回隨機網址:ppl{uri}
            返回結果:http://82.cn/wp-content/categories/main.html
        
        5.返回當前日期與時間:ppl{date_time_between_dates}
            返回結果:2020-08-01 20:02:12
          返回當前日期:date_between_dates
            返回結果:2020-08-01
            
        6.返回隨機日期:ppl{date}
            返回結果:2020-08-01
            
        7.返回隨機手機號碼:ppl{phone_number}
            返回結果:13815429659
            
        8.返回隨機身份證號碼:ppl{ssn}
            返回結果:130205195901209552
    
**yaml編寫測試用例:**

例子:	

	- url: /vip/login
      json: {"account":"J0086474349","pwd":"MdQuT595"}
      xpath: 
	    - "$..token"
		- {"re", "token22", "invalidxx('(.+?)'xx)"}
      validators:
        - {"check": "status_code", "selector": "==", "exp": "200"}
        - {"check": "headers", "selector": "in", "exp": 'application/json'}
        - {"check": "json()", "selector": "len", "exp": "5"}
        - {"check": "json()['data']['customerName']", "selector": "==", "exp": "泡泡龍"}
        - {"check": "text", "selector": "in", "exp": "泡泡龍"}
	    - {"check": "text", "selector": "not in", "exp": "廣深小龍"}
	    
	- url: /vip/xxx
      json: {"account":"ppl{phone_number}","pwd":"MdQuT595","token":"$token"}
      xpath: "$..jsonpath"
      validators:
        - {"check": "status_code", "selector": "==", "exp": "200"}
	    - {"check": "text", "selector": "not in", "exp": "廣深小龍"}	
	  
	- url: xxx/xxx
	  method: get
	  headers:
		authToken: ${token22}
	  data: ppl{name}
      validators:
        - {"check": "status_code", "selector": "==", "exp": "200"}
	    - {"check": "text", "selector": "not in", "exp": "廣深小龍"}

如有其它疑問,歡迎聯絡廣深小龍!!!QQ交流群:482713805

個人部落格:https://www.cnblogs.com/gsxl/
	
github:https://github.com/git-gsxl

二、Web自動化測試框架:

** UI自動化簡介 **

**重點:元素傳參方式(單個/多個)**

一、單個定位:
	
	開啟網頁連線:loc=("open", "/url/xxlogin")
	
	(程式會根據配置檔案config.yaml的host拼接url,如:host/url/xxlogin)
	
	點選:
	
		click:loc="#s-top-left"
		
		click:loc=("id", "s-top-left")
	
	輸入:
	
		send: loc=("send", "廣深小龍", "#kw") 
		
		send: loc=("send", "廣深小龍", "id", "kw")
	
	清空:
		clear: loc=("clear", "#kw")  
		
		clear: loc=("clear", "id", "kw")  
	
	獲取元素是否存在:(返回布林值)
	
		get_ele: loc=("get_ele", "#su") 
		
		get_ele: loc=("get_ele", "id", "su") 
		
	獲取元素的文字值:
		
		get_txt:loc=("get_txt", "#s-usersetting-top")
		
		get_txt:loc=("get_txt", "id", "s-usersetting-top")
		
	文字在元素文字值:(部分匹配返回布林值)
		
		txt_in_ele:loc=("txt_in_ele", "設定", "#s-usersetting-top")   
		
		txt_in_ele:loc=("txt_in_ele", "設定", "id", "s-usersetting-top")
	
	
二、複數定位:

	點選:

		clicks:loc=("0", "#s-top-left") 
		
		clicks:loc=("0", "id", "s-top-left")
	
	輸入:
	
		sends: loc=("sends", "廣深小龍", "0", "#kw") 
		
		sends: loc=("sends", "廣深小龍", "0", "id", "kw")
		
	清空:
	
		clears:loc=("clears", "0", "#kw")  
		
		clears:loc=("clears", "0", "id", "#kw")  


	獲取元素是否存在:
	
		get_eles: loc=("get_eles", "0", "#su")
		
		get_eles: loc=("get_eles", "0", "id", "su")
		
	獲取元素的文字值:
		
		get_txts:loc=("get_txts", "0", "#s-usersetting-top")
		
		get_txts:loc=("get_txts", "0", "id", "s-usersetting-top")	

三、其它說明


步驟1:(配置檔案)

	1. config. yaml 配置好 host (其它配置一般不用動)
	
	2. config. yaml設定 default 定位方式,可自行喜歡設定;


步驟2:(元素定位及方式)

	1.  elements資料夾下新建:ele_login. py檔案
	
		用哪種方式看自己喜歡,命名也可以其它命名,注意別與其它模組重複就可。
		
		建議元素寫成流程的方式:yield 迭代器接收,讓loop方法迴圈處理操作事件。
	

步驟3:(頁面流程編寫)

	1.  pages 資料夾下新建:頁面檔案,如page_login. py
	
	2. 匯入基礎類Base,讓登入的類繼承
	
	3.  匯入編寫元素的類或方法,供頁面操作使用
	
	4. 編寫操作/輸入頁面的流程
	
	注意:最好在當前模組下除錯封裝好的登入或其它流程是否正常
	

步驟4:(基於頁面流程組裝測試資料)

	1. 匯入頁面流程的模組:from pages. page_login import Login
	
	2. 匯入driver:from common. driver import is_driver
	
	3. setup_class、teardown_class分別為用例執行的前置與後置
		
		前置:driver 驅動開啟瀏覽器
		
		後置:關閉瀏覽器
		
	4. allure裝飾器是用來加入報告中的一些描述之類的,可參考report連線裡面的寫法
	
	5. 這裡的流程基本是:呼叫頁面流程,輸入不一樣的引數進行測試
	
	6. 補充:比如基礎資料測試,那麼需要先登入,這裡是這樣,在用例傳入login方法即可,既是先登入成功後,返回driver驅動,給予後面所需傳入
	

步驟5:(命令列執行)
	
	1.  開啟到用例檔案的目錄
	
	2.  命令列輸入:pytest(會執行目錄下所有符合規則的檔案,如test_login. py,所以我們用例需要命名為test_xx開頭)
	
	3. 命令列輸入: pytest test_login. py(單個檔案執行)
	
	
步驟6:(檢視報告)
	
	1. 直接開啟report目錄下可直接檢視簡陋報告
	
	2. allure報告需更多配置或學習,請參考【專案目錄簡介】中生成allure報告或者自行百度
	
	allure示例連結:http://47.97.194.84:8085
	

** 基類方法簡介:**

    0. find:單個元素定位:locator = ("id", "id值")
	
    1. finds:複數元素定位:locator = ("id", "id值")[x],取第幾個?
	
    2. send:文字輸入
	
    3. click:點選操作
	
    4. clear:清空文字
	
    5. text_in_enement:判斷 _text 文字值是否 in 定位元素中,返回 bool 值
	
    6. text_in_enement:
	
    7. get_enement:判斷元素是否存在,返回 bool 值
	
    8. get_text:獲取元素的文字值
	
    9. now_title:獲取當前頁面的 title
	
    10. move_element:滑鼠懸停操作,傳locator
	
    11. select_index:index是索引定位第x個,從0開始,預設第1個
	
    12. select_value:select中的value方法,如html中:value="50",則value傳:50
	
    13. select_text:select中的text方法全匹配文字,如html中顯示:每頁顯示50條,則文字需全部匹配
    
	14. switch_iframe:切換iframe:傳下標 或 locator
    
	15. is_alert:
            alert彈窗處理_text:
            --1. 預設點選:確定
            --2. 取消操作傳:取消
            --3. 獲取彈窗文字傳:text
            --4. 彈出輸入文字傳:輸入 + 文字值
    
	16. switch_handle:控制代碼切換,傳int型別,從0開始,-1既是最新開啟的一個
    
	17. js_top:頁面滾動條滑動至頂部
   
    18. js_element:聚焦元素位置,傳locator
    
	19. js_tail:頁面滾動條滑動至底部
	
    20. screenshot:截圖
	
    21. yaml_load:讀取yaml檔案
	
    22. get:輸入開啟網址
	
	23. open:輸入開啟網址
	
	24. quit:關閉瀏覽器
	
	25. refresh:重新整理頁面
	
	26. del_cookie:清空快取
	
	27. location:單個定位,提供step方法呼叫
	
	28. locations:複數定位,提供step方法呼叫
	
	29. handle:傳參step方法帶過來的引數,判斷執行
	
	30. step:傳參處理,使用這種方式必須按照規則傳參
	
	31. loop:迴圈處理元素操作事件

conftest.py 已封裝發生異常截圖目錄:report/screenshot,以及將截圖放入簡陋測試報告中;

**登入例子:**
	
	**elements**:登入的元素編寫(前面4步驟是登入,5:斷言,6:是否退出登入的元素)
	
	def ele_login(user='admin', pwd="123456", exp_name="admin"):
    """todo 開啟登入頁→輸入賬號密碼→點選登入→斷言exo_bane→是否退出登入"""
    yield ("open",
           "/api/login/")
    yield ("send", user,
           'id', 'account')
    yield ("send", pwd,
           'id', 'password')
    yield '//*[@id="login_submit"]'
    yield ("txt_in_ele", exp_name,
           '/html/body/div[2]/div[1]/div[1]')
    yield '/html/body/div[2]/div[1]/div[1]/a'
	
	**pages**:執行前面4步驟:self.loop(loops, 4),預設引數登入成功(5:斷言,返回布林值,6:如果out=1登入成功就退出)
	
    def login_page(self, user="admin", pwd="123456", exp="admin", out=0):
        loops = ele.ele_login(user, str(pwd), exp)
        self.loop(loops, 4)
        time.sleep(1)
        res = self.step(next(loops, None))
        if res and out == 1:
            self.step(next(loops, None))
            return True
        else:
            return False
	
如有其它疑問,歡迎聯絡廣深小龍!!!QQ交流群:482713805

個人部落格:https://www.cnblogs.com/gsxl/	

github:https://github.com/git-gsxl

最後歡迎來大家QQ交流群一起學習:482713805

有疑問的小夥伴趕緊進群一起學習吧!!!

github程式碼傳送門:https://github.com/git-gsxl/2020-UI-Api-demo