移動測試之appium+python 入門代碼(四)


最近工作中想要做自動化回歸測試,想法是將每個測試用例都做自動截圖,然后將最近的穩定版本和當前測試的版本的兩張截圖去對比,也要將兩個版本的截圖都放到測試報告中方便人工來進行驗證。最初想法是通過HTMLTestRunner生成帶截圖的測試報告,但是HTMLTestRunner本身沒有截圖功能,還有它不支持python 3,所以另外找了其他的工具來做這件事。

生成測試報告工具簡介

HtmlTestRunner是將單元測試的結果保存為html格式的測試報告的工具,這個工具的功能和HTMLTestRunner很想,而且名稱也很像。但是它支持python3,而且生成的報告的樣式更加美觀。

安裝HtmlTestRunner

訪問這個url:
https://pypi.python.org/pypi/html-testRunner/1.0.3
然后下載html_testRunner-1.0.3-py2.py3-none-any.whl文件,接下來通過下面命令(適用於ubuntu等linux系統)來安裝:

$ sudo pip3 install html_testRunner-1.0.3-py2.py3-none-any.whl

如果你是windows系統,嘗試使用下面命令安裝:

$ pip install html_testRunner-1.0.3-py2.py3-none-any.whl

添加截圖功能

HtmlTestRunner這個工具,本身沒有展示截圖的功能,不過可以通過修改它的template文件來添加截圖功能。
通過下面地址,下載HtmlTestRunner的源代碼到本地:

https://github.com/oldani/HtmlTestRunner

用編輯器打開HtmlTestRunner/template/report_template.html文件,進行修改:

輸入圖片說明
 

 

需要刪除上圖中標紅色的代碼,並新增綠色的代碼。注意將新增圖片的目錄設置為自己本地的截圖保存的目錄。

生成自動化測試報告

使用python的appium API和unittest單元測試框架,再加上上面提到的HtmlTestRunner第三方模塊,可以生成帶測試截圖的測試報告。具體代碼如下:

#!/usr/bin/env python3 # coding=utf-8 from appium import webdriver from nose.tools import * import unittest import HtmlTestRunner #生成HTML格式的測試報告 class take_screen_shot(): #這個類將在下面作為裝飾器使用 def __init__(self, func): self.func = func self.name = func.__name__ + ' (__main__.CalTestCase).png' #拼接截圖文件名 def __call__(self, *args): #對每次調用的函數都做截圖操作 try: self.func(self, *args) finally: driver.get_screenshot_as_file(self.name) class CalTestCase(unittest.TestCase): @classmethod def setUpClass(self): desired_caps = {} desired_caps['platformName'] = 'Android' #設置操作平台 desired_caps['platformVersion'] = '5.1.1' #操作系統版本 desired_caps['deviceName'] = 'Nexus 4' #設備名稱 desired_caps['appPackage'] = 'com.android.calculator2' desired_caps['appActivity'] = '.Calculator' desired_caps['udid'] = '04c5a5af52197902' global driver driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) @classmethod def tearDownClass(self): driver.quit() #退出當前應用 @take_screen_shot #對每一條測試用例使用裝飾器 def test_case_01(self): text = driver.find_element_by_id('com.android.calculator2:id/formula').text assert_equal(text, "") @take_screen_shot def test_case_02(self): driver.find_element_by_id('com.android.calculator2:id/digit_1').click() #點擊數字鍵1 driver.find_element_by_id('com.android.calculator2:id/op_add').click() #點擊加號 driver.find_element_by_id('com.android.calculator2:id/digit_1').click() #點擊數字鍵1 driver.find_element_by_id('com.android.calculator2:id/eq').click() #點擊等號 text = driver.find_element_by_id('com.android.calculator2:id/formula').text assert_equal(text, "2") if __name__ == '__main__': #下面語句用來生成測試報告 unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(output='cal_report', report_title='Android計算器測試報告')) 

代碼分析:因為計划每個測試用例都進行截圖操作,所以使用了python的裝飾器。這樣就實現了每個測試用例執行之后不管是成功還是失敗都進行截圖操作,代碼的最后使用HtmlTestRunner工具生成測試報告。

接下來使用下面命令執行測試:

$ python3 appium_deom.py
Running tests... 
----------------------------------------------------------------------
 test_case_01 (__main__.CalTestCase) ... OK (1.786675)s
 test_case_02 (__main__.CalTestCase) ... OK (5.081634)s
----------------------------------------------------------------------
Ran 2 tests in 0:00:
OK
Generating HTML reports...

生成的測試報告的位置在測試腳本所在的目錄下的reports目錄下,通過瀏覽器查看,結果如下:

輸入圖片說明
 

 

點擊view按鈕可以展開查看截圖和錯誤信息:

輸入圖片說明
 

 

接下來想要做的

現在的測試報告的html模板中的截圖還是寫死的路徑,如果能將截圖的路徑也能自動生成的話就更好了。
還有現在沒有進行兩個版本截圖的對比,考慮繼續尋找工具做截圖的對比,並突出或標記上兩張圖片不相同的地方。

 

 

轉載來源

 


免責聲明!

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



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