自動化框架介紹及使用
1 自動化背景
A、 后續軟件需求不存在大的變動
B、 需要回歸保證功能穩定
C、 自動化測試腳本可重復使用
2 自動化環境搭建
2.1 安裝python
在 Windows 命令提示符下輸入“ python”命令,可以進入 Python Shell 模式,及安裝成功

2.2 安裝pycharm
下載安裝 https://www.jetbrains.com/pycharm/download/#section=windows
創建項目選擇項目路徑及解析器

2.3 安裝 Selenium及第三方庫
2.3.1 在線安裝
先進入路徑:File - settings - Project - Project Interpreter,點擊右側+號,在彈出的對話框中輸入:selenium,點擊install package


2.3.2 離線安裝
在https://pypi.org/下載離線安裝包(tar包、wel文件),在對應下載目錄執行安裝命令
1、tar包
進入對應目錄執行:python setup.py install
2、whl文件
進入對應目錄執行:pip install *.whl
也可以從其他環境批量導入安裝
其他環境導出:
pip freeze > requirements.txt

pip download -d your_offline_packages -r requirements.txt

本環境導入:
將requirements文件及其offline_packages安裝包放在對應項目路徑中,執行命令
pip install --no-index --find-links=your_offline_packages -r requirements.txt
2.4 安裝chromedriver驅動
http://chromedriver.storage.googleapis.com/index.html
將chromedriver.exe放置到python的安裝目錄下(也可放在Scripts目錄)

2.5 環境驗證
新建python文件,輸入如下代碼並執行,成功打開chrome瀏覽器則環境搭建成功

3 自動化項目結構介紹
自動化框架是基於python + selenium + unittest實現web頁面的自動化測試
3.1 AutoCase項目結構
Case、business、page按照功能菜單目錄一一對應
目錄如下:

3.1.1 Page
用於存放元素page層的封裝:將該功能下所用到的頁面元素,按菜單功能封裝
在page中用到的單獨變量,放在對應的類中

3.1.1.1 元素定位
find_element_by_id()方法是通過 id 來定位元素的
find_element_by_name()方法是通過 name 來定位元素的
find_element_by_class_name()方法是通過 class 來定位元素的
find_element_by_tag_name()方法是通過元素的標簽名來定位元素的
find_element_by_link_text()方法是通過元素標簽對之間的文字信息來定位元素的
find_element_by_xpath()方法是用 XPath 來定位元素的
find_element_by_css_selector()方法通過CSS定位(CSS 定位速度比 XPath
定位速度快)

3.1.2 Business
用於業務層的封裝:將page層拼接形成業務層,按菜單功能封裝

3.1.3 Case
用於用例層的封裝:將business層拼接形成場景用例,按功能菜單封裝

1、 在用例層添加斷言判斷用例執行成功失敗
2、 所有用例以test*開頭,unittest只會把以“ test”開頭的方法當作測試用例
3、 編寫過程中添加@pytest.mark.run(order=1),便於后期通過pytest來規定用例執行的先后順序
4、 裝飾器
unittest.skip(reason):無條件地跳過裝飾的測試,需要說明跳過測試的原因
@unittest.skip("直接跳過測試")
unittest.skipIf(condition, reason):如果條件為真,則跳過裝飾的測試
@unittest.skipIf(3 > 2, "當條件為真時跳過測試")
unittest.skipUnless(condition, reason):當條件為真時,執行裝飾的測試
@unittest.skipUnless(3 > 2, "當條件為真時執行測試")
unittest.expectedFailure():不管執行結果是否失敗,都將測試標記為失敗
@unittest.expectedFailure()
3.1.3.1 TestBase.py
基礎case類(case繼承TestBase,TestBase繼承unittest.TestCase),封裝Fixture(初始化)內容:
setUpModule/tearDownModule:在整個模塊的開始與結束時被執行
setUpClass/tearDownClass:在測試類的開始與結束時被執行,需要@classmethod進行裝飾(不需要實例化就可以執行,方法的參數為 cls)
setUp/tearDown:在測試用例的開始與結束時被執行
3.1.3.2 斷言


3.1.4 Conf
主要用於測試環境的相關配置文件
3.1.4.1 ini文件
ini配置文件由節、鍵、值組成,通過Util中的readConf.py讀取配置
節:[urlenv]
鍵:[base_url]
值:[http://…]
3.1.4.2 BrowserEngine
封裝瀏覽器驅動,兼容多版本瀏覽器(Chrome\Firefox\IE),注意selenium、瀏覽器、驅動之間的版本關系

3.1.5 Datafile
用於存放數據測試文件(變量驗證,可以使用數據驅動測試)


3.1.6 Report
存放測試報告目錄

3.1.7 Screenshot
存放失敗用例截圖,可以鏈接到測試報告里,這邊截圖方法get_screenshot_as_file(),封裝在tearDown()中,self._outcome.errors為unittest中封裝的打印用例執行的日志(用例成功 error的第二項是None,error打印出來是個字典)


3.1.8 Util
存放工具類方法(DB連接、文件及文件夾路徑獲取、日志、生成測試報告、讀取conf.ini配置、截圖)

3.1.9 Run_case.py、suitecase.py腳本
Run_case.py:unittest執行用例腳本
Suitecase.py:用例執行順序文件(嚴格按照文件內容執行),unittest默認是按照用例名稱對應的ASCII碼的順序加載,數字與字母的順序為:0-9,A-Z,a-z

Unittest中自動掃描用例的方法discover(具體順序也是按照ASCII碼的順序加載)

4 如何使用
1、 下載項目到本地(svn管理自動化代碼,先更新后提交)
https://blog.csdn.net/deng_sir/article/details/89882893
2、 按菜單模塊命名對應的case\business\page,並編寫測試用例
3、 調測用例,用例執行成功后維護再上傳對應的case\business\page,suitcase.py文件
