前言
明天就放假了,4天小長假,是不是很開心!也許很多人要回老家?guī)图依锓N地,干農(nóng)活。其實能陪陪家里人,幫忙干點(diǎn)農(nóng)活還是挺開心的,希望大家有個愉快的假期!廢話不多說哈,今天再來說說pytest吧,經(jīng)過幾周的時間學(xué)習(xí),有收獲也有疑惑,總之最后還是搞個小項目出來證明自己的努力不沒有白費(fèi)
環(huán)境準(zhǔ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確保已配置火狐或谷歌瀏覽器及對應(yīng)驅(qū)動?
9確保已經(jīng)正確配置好發(fā)送郵件的郵箱?
項目簡介
測試地址
測試范圍
1.126電子郵箱登錄功能測試-驗證正確帳號密碼登錄成功-驗證錯誤用戶名密碼登錄失?。ㄓ泻芏嗲闆r,用例里面做了充分的校驗)
2.126電子郵箱添加聯(lián)系人功能測試-驗證正確填寫必填項數(shù)據(jù)添加聯(lián)系人成功-驗證缺省必填項數(shù)據(jù)添加聯(lián)系人失敗-驗證必填項字段數(shù)據(jù)格式錯誤添加聯(lián)系人失敗
3.126電子郵箱發(fā)送郵件功能測試-驗證普通郵件發(fā)送成功-驗證帶附件郵件發(fā)送成功
項目設(shè)計
1.python編程語言設(shè)計測試腳本
2.webdriver驅(qū)動瀏覽器并操作頁面元素
3.二次封裝webdriver Api 操作方法
4.采用PageObject設(shè)計模式,設(shè)計測試業(yè)務(wù)流程
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郵箱測試范圍分析,我們需要通過設(shè)計剪切板,模擬鍵盤完成附件上傳操作,因此我們首先來編寫這兩個方法
?clipboard.py-操作剪切板

?keyboard.py-模擬鍵盤

通過測試項目設(shè)計,我們需要把測試數(shù)據(jù)存放在Excel文件中,把頁面操作元素存在UI對象庫中也就是一個配置文件,那么我們需要對Excel 和 ini文件解析,因此我們開始編寫這兩個方法,設(shè)計UI對象庫和測試數(shù)據(jù)文件
?parseExcelFile.py-解析Excel文件

?parseConFile.py-解析配置文件

?config.ini

新建excel文件,分3個sheet,分別為:login,contact,mail #每個sheet中數(shù)據(jù)可自行填寫,驅(qū)動測試用例執(zhí)行不同的數(shù)據(jù)進(jìn)行測試
login

contact


數(shù)據(jù),UI對象庫,解析方法都已經(jīng)有了,接下來通過PageObject模式設(shè)計編寫每個頁面的操作及封裝126郵箱的功能,以便后續(xù)設(shè)計用例調(diào)用
?BasePage.py-webdriver二次封裝

?HomePage.py-郵箱首頁選擇菜單

?LoginPage.py-封裝登錄功能

?ContactPage.py-封裝添加聯(lián)系人功能

?SendMailPage.py-封裝發(fā)送郵件功能

所有的準(zhǔn)備工作都已經(jīng)做好了,還有一個問題,我們的添加聯(lián)系人和發(fā)送郵件應(yīng)該是否應(yīng)該在已經(jīng)登錄的前提下測試呢?答案是肯定的。所以我們在用例同目錄下新建conftest.py文件并調(diào)用登錄功能(為什么這么做,不明白的小伙伴可以去看一下我之前的文章,關(guān)于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生成的,但是這樣的報告對用例的描述不是很清晰,且沒有對失敗用例截圖,也不方便我們分析項目的缺陷,我們也可以填寫代碼放到這個文件里面(關(guān)于報告修改的文章)
?conftest.py-全局conftest.py文件

最后呢,為了減小項目維護(hù)成本,我們把一些全局的配置項,放到我們的功能配置文件中共全局使用,包括運(yùn)行用例的一些命令字符串,可以自行修改
?conf.py-全局配置文件

運(yùn)行項目
通過命令運(yùn)行
1.cmd切換到項目的根目錄,執(zhí)行pytest --html=‘report.html’?--self-contained-html命令(此運(yùn)行方式,無法發(fā)送測試報告郵件)
這種方式感覺有點(diǎn)low,我們換另外一種方式,可以通過os模塊自動執(zhí)行相關(guān)命令,編寫運(yùn)行用例代碼
?RunTestCase.py-執(zhí)行用例文件

我們可以直接執(zhí)行這個文件執(zhí)行所用的測試用例了!
其實我們運(yùn)行用例往往不只是 使用pytest --html=‘report.html’?--self-contained-html?這樣一個簡單的命令運(yùn)行,通常會添加很多的命令選項,比如-v,-q,-s等等,那么怎么辦呢?這時候就用到了pytest.ini配置文件了
只添加了幾個簡單的命令選項(pytest.ini具體使用及原理)
?pytest.ini-pytest配置文件

測試輸出
1.自動生成html格式報告,其中報告里面附帶用例執(zhí)行日志明細(xì),及用例失敗自動截圖(部分報告展示)


2.自動發(fā)送測試郵件給指定用戶
