前言
明天就放假了出吹,4天小長假,是不是很開心辙喂!也許很多人要回老家?guī)图依锓N地捶牢,干農(nóng)活鸠珠。其實能陪陪家里人,幫忙干點農(nóng)活還是挺開心的秋麸,希望大家有個愉快的假期渐排!廢話不多說哈,今天再來說說pytest吧竹勉,經(jīng)過幾周的時間學習飞盆,有收獲也有疑惑,總之最后還是搞個小項目出來證明自己的努力不沒有白費
環(huán)境準備
序號庫/插件/工具安裝命令
1確保您已經(jīng)安裝了python3.x?
2配置python3+pycharm+selenium2開發(fā)環(huán)境?
3安裝pytest庫:pip install pytest
4安裝pytest -html 報告插件:pip install pytest-html
5安裝pypiwin32庫(用來模擬按鍵):pip install pypiwin32
6安裝openpyxl解析excel文件庫:pip install openpyxl
7安裝yagmail發(fā)送報告庫:pip install yagmail
8確保已配置火狐或谷歌瀏覽器及對應驅(qū)動?
9確保已經(jīng)正確配置好發(fā)送郵件的郵箱?
項目簡介
測試地址
測試范圍
1.126電子郵箱登錄功能測試-驗證正確帳號密碼登錄成功-驗證錯誤用戶名密碼登錄失敶闻摇(有很多情況吓歇,用例里面做了充分的校驗)
2.126電子郵箱添加聯(lián)系人功能測試-驗證正確填寫必填項數(shù)據(jù)添加聯(lián)系人成功-驗證缺省必填項數(shù)據(jù)添加聯(lián)系人失敗-驗證必填項字段數(shù)據(jù)格式錯誤添加聯(lián)系人失敗
3.126電子郵箱發(fā)送郵件功能測試-驗證普通郵件發(fā)送成功-驗證帶附件郵件發(fā)送成功
項目設計
1.python編程語言設計測試腳本
2.webdriver驅(qū)動瀏覽器并操作頁面元素
3.二次封裝webdriver Api 操作方法
4.采用PageObject設計模式,設計測試業(yè)務流程
5.通過UI對象庫存儲頁面操作元素
6.通過數(shù)據(jù)文件存儲數(shù)據(jù)票腰,讀取數(shù)據(jù)城看,參數(shù)化測試用例并驅(qū)動測試執(zhí)行
7.通過第三方插件pytest-html生成測試報告
8.通過yagmail第三方庫,編寫發(fā)送報告接口杏慰,測試工作完成后自動發(fā)送測試報告
代碼分析
目錄結(jié)構(gòu)
?目錄結(jié)構(gòu)
代碼實現(xiàn)
通過126郵箱測試范圍分析测柠,我們需要通過設計剪切板,模擬鍵盤完成附件上傳操作缘滥,因此我們首先來編寫這兩個方法
?clipboard.py-操作剪切板
?keyboard.py-模擬鍵盤
通過測試項目設計轰胁,我們需要把測試數(shù)據(jù)存放在Excel文件中,把頁面操作元素存在UI對象庫中也就是一個配置文件朝扼,那么我們需要對Excel 和 ini文件解析赃阀,因此我們開始編寫這兩個方法,設計UI對象庫和測試數(shù)據(jù)文件
?parseExcelFile.py-解析Excel文件
?parseConFile.py-解析配置文件
?config.ini
新建excel文件擎颖,分3個sheet榛斯,分別為:login,contact搂捧,mail #每個sheet中數(shù)據(jù)可自行填寫驮俗,驅(qū)動測試用例執(zhí)行不同的數(shù)據(jù)進行測試
login
contact
數(shù)據(jù),UI對象庫允跑,解析方法都已經(jīng)有了王凑,接下來通過PageObject模式設計編寫每個頁面的操作及封裝126郵箱的功能,以便后續(xù)設計用例調(diào)用
?BasePage.py-webdriver二次封裝
?HomePage.py-郵箱首頁選擇菜單
?LoginPage.py-封裝登錄功能
?ContactPage.py-封裝添加聯(lián)系人功能
?SendMailPage.py-封裝發(fā)送郵件功能
所有的準備工作都已經(jīng)做好了聋丝,還有一個問題荤崇,我們的添加聯(lián)系人和發(fā)送郵件應該是否應該在已經(jīng)登錄的前提下測試呢?答案是肯定的潮针。所以我們在用例同目錄下新建conftest.py文件并調(diào)用登錄功能(為什么這么做,不明白的小伙伴可以去看一下我之前的文章倚喂,關于conftest.py的原理)
?conftest.py-同用例目錄下每篷,調(diào)用登錄功能
ok瓣戚,開始編寫測試用例啦
?test_loginCase.py-登錄功能測試
?test_contactCase.py-添加聯(lián)系人功能測試
?test_sendMailCase.py-發(fā)送郵件功能測試
問題
用例已經(jīng)寫完了,有兩個問題
1.有沒有發(fā)現(xiàn)我們的報告怎么生成的焦读?也沒有失敗用例截圖子库?
2.我們貌似并沒有編寫驅(qū)動瀏覽器的代碼?
現(xiàn)在我們來解決這個兩個問題
根據(jù)pytest的conftest.py文件的原理矗晃,我們可以把驅(qū)動瀏覽器的代碼寫在一個全局的conftest.py文件里面仑嗅。報告生成其實是通過命令 pytest --html=‘report.html’?--self-contained-html生成的,但是這樣的報告對用例的描述不是很清晰张症,且沒有對失敗用例截圖仓技,也不方便我們分析項目的缺陷,我們也可以填寫代碼放到這個文件里面(關于報告修改的文章)
?conftest.py-全局conftest.py文件
最后呢俗他,為了減小項目維護成本脖捻,我們把一些全局的配置項,放到我們的功能配置文件中共全局使用兆衅,包括運行用例的一些命令字符串地沮,可以自行修改
?conf.py-全局配置文件
運行項目
通過命令運行
1.cmd切換到項目的根目錄,執(zhí)行pytest --html=‘report.html’?--self-contained-html命令(此運行方式羡亩,無法發(fā)送測試報告郵件)
這種方式感覺有點low摩疑,我們換另外一種方式,可以通過os模塊自動執(zhí)行相關命令畏铆,編寫運行用例代碼
?RunTestCase.py-執(zhí)行用例文件
我們可以直接執(zhí)行這個文件執(zhí)行所用的測試用例了雷袋!
其實我們運行用例往往不只是 使用pytest --html=‘report.html’?--self-contained-html?這樣一個簡單的命令運行,通常會添加很多的命令選項及志,比如-v,-q,-s等等片排,那么怎么辦呢?這時候就用到了pytest.ini配置文件了
只添加了幾個簡單的命令選項(pytest.ini具體使用及原理)
?pytest.ini-pytest配置文件
測試輸出
1.自動生成html格式報告速侈,其中報告里面附帶用例執(zhí)行日志明細率寡,及用例失敗自動截圖(部分報告展示)
2.自動發(fā)送測試郵件給指定用戶