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

指定自定義測試名稱
如果您想要在報(bào)告中使用自定義測試名稱(即,不是測試方法的名稱),則也可以使用@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í),將使用自定義測試名稱,而不是自動推斷的名稱:

手動測試和步驟報(bào)告
默認(rèn)情況下,當(dāng)在驅(qū)動程序上調(diào)用quit()命令或執(zhí)行的測試方法的名稱發(fā)生更改時(shí),SDK會自動報(bào)告新的測試。可以禁用此行為:
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/")
您可以改為手動報(bào)告測試,如下所示:
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)告的測試",?passed=True)
這將導(dǎo)致在TestProject平臺上報(bào)告以下測試:

此外,您還可以手動報(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="中間測試步驟", message="另一條消息", passed=False, screenshot=True)????driver.report().test(name="手工報(bào)告的測試",?passed=True)
這將導(dǎo)致此步驟包含在測試報(bào)告中:

如您所見,該步驟包括一個屏幕截圖(單擊時(shí)將放大)。還要注意,即使我們將手動報(bào)告的測試設(shè)置為通過了我們的代碼,由于該測試步驟中失敗的步驟,它仍被標(biāo)記為失敗。
禁用編輯進(jìn)入安全文本字段的文本
默認(rèn)情況下,SDK會編輯被鍵入到包含敏感數(shù)據(jù)的文本字段中的文本,即:
type具有值(所有瀏覽器和操作系統(tǒng)類型)的屬性的字段password。類型的字段
XCUIElementTypeSecureTextField(僅在具有XCUITest的iOS上)。
在此文本字段中鍵入的文本在報(bà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)告。
如果您不想自動報(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/") # 不會報(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)# 這里不會有任何報(bào)道driver.report().disable_reports(disabled=False)
如果要永久禁用特定驅(qū)動程序會話的報(bào)告,也可以執(zhí)行以下操作:
def test_project_and_job_names_in_decorator():driver = webdriver.Chrome(disable_reports=True)
請注意,在最后一種情況下,您無法在驅(qū)動程序會話期間重新啟用報(bào)告!
