Selenium和Appium Python自動(dòng)化測(cè)試生成HTML測(cè)試報(bào)告
正如您在全新的TestProject Python SDK(第1部分和第2部分)上的先前文章中可能已經(jīng)讀到的那樣,該SDK將生成美觀的HTML測(cè)試報(bào)告,并自動(dòng)為您將它們發(fā)布到TestProject平臺(tái)上,無(wú)需其他配置(您也可以將其下載為PDF文件)。但是您知道報(bào)告也是高度可配置的嗎?
測(cè)試報(bào)告在任何測(cè)試自動(dòng)化框架中都是至關(guān)重要的,而且我們都知道,即使專家也需要付出多大的努力才能生成測(cè)試自動(dòng)化報(bào)告,更不用說我們是否也想擁有自定義自由……在此,有許多定制的解決方案可供選擇。行業(yè)來(lái)幫助我們克服這一問題,例如:JUnit,Jenkins插件,ELK,Grafana,甚至開發(fā)定制的Web儀表板。
但是,沒有現(xiàn)成的測(cè)試報(bào)告解決方案。輸入TestProject,它為用戶提供了一個(gè)完整的專用報(bào)告環(huán)境,該環(huán)境免費(fèi)支持Selenium,Appium和Python。TestProject自動(dòng)為您創(chuàng)建HTML和PDF報(bào)告(開箱即用,無(wú)需其他配置)。
您所需要做的就是注冊(cè)一個(gè)免費(fèi)的TestProject帳戶,下載并安裝TestProject代理(該代理已經(jīng)包含了您的所有Selenium / Appium驅(qū)動(dòng)程序),使用pip(pip install testproject-python-sdk)安裝TestProject Python SDK?并配置您的開發(fā)人員令牌。
使用TestProject,您可以免費(fèi)訪問可完全自定義的廣泛報(bào)告功能(如下文所述),包括:云中的詳細(xì)分析儀表板,屏幕截圖,通過/失敗條件,自定義錯(cuò)誤消息,下載報(bào)告的能力轉(zhuǎn)換為PDF,可以輕松地與隊(duì)友共享報(bào)告,RESTful API訪問權(quán)限以及100%的Selenium和Appium兼容性(不僅與Python兼容,而且與Java和C#共享!)。
打開即用的HTML測(cè)試報(bào)告
如果您保留所有設(shè)置不變,則SDK將:
生成帶有自動(dòng)推斷的項(xiàng)目,作業(yè)和測(cè)試名稱的報(bào)告
在驅(qū)動(dòng)程序上調(diào)用命令或執(zhí)行的測(cè)試方法的名稱更改時(shí),自動(dòng)報(bào)告新測(cè)
試。
quit()包含所有已執(zhí)行的WebDriver命令及其結(jié)果(通過或失敗)
在敏感(密碼)文本字段元素中鍵入的修訂值。
所有這些選項(xiàng)都是可配置的,因?yàn)槟芸炀蜁?huì)看到。
指定自定義項(xiàng)目和職位名稱
如果要覆蓋TestProject報(bào)表中顯示的自動(dòng)推斷的項(xiàng)目和作業(yè)名稱,可以采用兩種方法。第一種方法是將自定義項(xiàng)目和作業(yè)名稱作為參數(shù)傳遞給驅(qū)動(dòng)程序構(gòu)造函數(shù):
from src.testproject.sdk.drivers import webdriverdef test_custom_project_and_job_names():driver = webdriver.Chrome(projectname="My project", jobname="Reporting job")driver.get("https://example.testproject.io/web/")
第二種方法是在@report?裝飾器中指定它們:
from src.testproject.decorator import reportfrom src.testproject.sdk.drivers import webdriverdef test_project_and_job_names_in_decorator():driver = webdriver.Chrome()driver.get("https://example.testproject.io/web/")
這兩個(gè)選項(xiàng)都將導(dǎo)致指定的項(xiàng)目和作業(yè)名稱顯示在TestProject中:

指定自定義測(cè)試名稱
如果您想要在報(bào)告中使用自定義測(cè)試名稱(即,不是測(cè)試方法的名稱),則也可以使用@report裝飾器:
from src.testproject.decorator import reportfrom src.testproject.sdk.drivers import webdriverdef test_name_in_decorator():driver = webdriver.Chrome()driver.get("https://example.testproject.io/web/")
當(dāng)這樣指定時(shí),將使用自定義測(cè)試名稱,而不是自動(dòng)推斷的名稱:

手動(dòng)測(cè)試和步驟報(bào)告
默認(rèn)情況下,當(dāng)在驅(qū)動(dòng)程序上調(diào)用quit()命令或執(zhí)行的測(cè)試方法的名稱發(fā)生更改時(shí),SDK會(huì)自動(dòng)報(bào)告新的測(cè)試。可以禁用此行為:
from src.testproject.sdk.drivers import webdriverdef test_disable_automatic_test_reporting():driver = webdriver.Chrome()driver.report().disable_auto_test_reports(disabled=True)driver.get("https://example.testproject.io/web/")
您可以改為手動(dòng)報(bào)告測(cè)試,如下所示:
from src.testproject.sdk.drivers import webdriverdef test_report_a_test_manually():driver = webdriver.Chrome()driver.report().disable_auto_test_reports(disabled=True)driver.get("https://example.testproject.io/web/")????driver.report().test(name="手工報(bào)告的測(cè)試",?passed=True)
這將導(dǎo)致在TestProject平臺(tái)上報(bào)告以下測(cè)試:

此外,您還可以手動(dòng)報(bào)告中間步驟,甚至在執(zhí)行操作時(shí)添加屏幕截圖:
from src.testproject.sdk.drivers import webdriverdef test_report_a_step_manually():driver = webdriver.Chrome()driver.report().disable_auto_test_reports(disabled=True)driver.get("https://example.testproject.io/web/")driver.report().step(description="中間測(cè)試步驟", message="另一條消息", passed=False, screenshot=True)????driver.report().test(name="手工報(bào)告的測(cè)試",?passed=True)
這將導(dǎo)致此步驟包含在測(cè)試報(bào)告中:

如您所見,該步驟包括一個(gè)屏幕截圖(單擊時(shí)將放大)。還要注意,即使我們將手動(dòng)報(bào)告的測(cè)試設(shè)置為通過了我們的代碼,由于該測(cè)試步驟中失敗的步驟,它仍被標(biāo)記為失敗。
禁用編輯進(jìn)入安全文本字段的文本
默認(rèn)情況下,SDK會(huì)編輯被鍵入到包含敏感數(shù)據(jù)的文本字段中的文本,即:
type具有值(所有瀏覽器和操作系統(tǒng)類型)的屬性的字段password。類型的字段
XCUIElementTypeSecureTextField(僅在具有XCUITest的iOS上)。
在此文本字段中鍵入的文本在報(bào)告中被星號(hào)替換:

如果您愿意,可以將其禁用:
def test_disable_command_redaction():driver = webdriver.Chrome()driver.report().disable_auto_test_reports(disabled=True)driver.get("https://example.testproject.io/web/")driver.report().disable_redaction(disabled=True)driver.find_element_by_css_selector("#name").send_keys("Software test")driver.find_element_by_css_selector("#password").send_keys("12345")
導(dǎo)致以純文本形式報(bào)告密碼值,而不是:

禁用報(bào)告
最后,您還可以在不同程度上禁用各種報(bào)告。
如果您不想自動(dòng)報(bào)告WebDriver命令,則可以指定如下:
def test_disable_driver_command_reporting():driver = webdriver.Chrome()driver.report().disable_command_reports(disabled=True)driver.get("https://example.testproject.io/web/") # 不會(huì)報(bào)告此命令driver.report().disable_command_reports(disabled=False)driver.find_element_by_css_selector("#name").send_keys("Software test") # 將報(bào)告此命令
如果要暫時(shí)禁用所有報(bào)告,也可以執(zhí)行以下操作:
def test_disable_all_reporting_temporarily():driver = webdriver.Chrome()driver.report().disable_reports(disabled=True)# 這里不會(huì)有任何報(bào)道driver.report().disable_reports(disabled=False)
如果要永久禁用特定驅(qū)動(dòng)程序會(huì)話的報(bào)告,也可以執(zhí)行以下操作:
def test_project_and_job_names_in_decorator():driver = webdriver.Chrome(disable_reports=True)
請(qǐng)注意,在最后一種情況下,您無(wú)法在驅(qū)動(dòng)程序會(huì)話期間重新啟用報(bào)告!
