如何透過Jenkins Dashboard顯示Selenium的測試結果?
Jenkins 在Continuous Integration 扮演重要的腳色。
我們希望 Daily build 產生之後,自動 trigger Selenium的自動化測試程式,
並且能夠將測試的結果回到 Jenkins 查看。如此一來,
研發團隊每天只要看 Jenkins Dashboard就可以得知每一個 build 的狀態與最後自動化測試的結果。
這篇文章主要說明,Selenium要如何產生Jenkins 可以閱讀的測試結果.
xmlrunner
為了要讓 Selenium/python可以產生出 Jenkins 可以閱讀的測試結果,
我們必須要測試結果輸出為 XML格式。
python有一個套件可以幫助我們完成這件事情。XMLRunner
如果python環境有安裝好 pip,透過下列指令直可安裝 XMLRunner套件。
Pip install xmlrunner |
XMLRunner 範例程式
要如何使用XMLrunner 讓 test case 輸出為 XML格式呢?
[pastacode lang=”python” message=”xmlRunner Code Sample” highlight=”” provider=”manual”]
import unittest
import xmlrunner
class TheXMLTest(unittest.TestCase):
def testcaseOne(self):
self.assertEquals(1, 1)
def testcaseTwo(self):
self.assertEquals(2, 2)
def testcaseThree(self):
self.assertEquals(3, 4)
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(TheXMLTest)
xmlrunner.XMLTestRunner().run(suite)
[/pastacode]
Selenium/XMLRunner 範例程式
[pastacode lang=”python” message=”Selenium XMLRunner Sample code” highlight=”” provider=”manual”]
from selenium import webdriver
import datetime, time, unittest
from xmlrunner import xmlrunner
class ScreenShotTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.get("http://www.google.com")
def test_google_button1(self):
driver = self.driver
try:
# Visit Google page and locate the Search button
googleSearchbtn = driver.find_element_by_name("btnK")
# Get the Search butoon value "Google Search"
self.assertEqual("Google Search", googleSearchbtn.get_attribute("value"))
except Exception:
st = datetime.datetime.fromtimestamp(time.time()).strftime('%Y%m%d_%H%M%S')
file_name = "ScreenShot_on_Fail" + st + ".png"
driver.save_screenshot(file_name)
raise
def test_google_button2(self):
driver = self.driver
try:
# try to get another web element not exist
googleSearchbtn2 = driver.find_element_by_name("btnK2")
except Exception:
st = datetime.datetime.fromtimestamp(time.time()).strftime('%Y%m%d_%H%M%S')
file_name = "ScreenShot_on_Fail" + st + ".png"
driver.save_screenshot(file_name)
raise
def tearDown(self):
self.driver.close()
if __name__ == "__main__":
#unittest.main(verbosity=2)
suite = unittest.TestLoader().loadTestsFromTestCase(ScreenShotTest)
xmlrunner.XMLTestRunner().run(suite)
[/pastacode]
XMLRunner Report Sample
執行結果如下圖。
Jenkins 設定
產生出XML report 但是Jenkins 要如何設定呢?
這時候透過 “publish Junit test result reoprt” ,設定可以讀取的 XML testing report.
最後回到 Jenkins Testing result 的Dashboard,應該可以看到相關的測試結果。