Python+Selenium筆記(十八):持續整合jenkins,seleniumjenkins

來源:互聯網
上載者:User

Python+Selenium筆記(十八):持續整合jenkins,seleniumjenkins

(一)安裝xmlrunner

使用Jenkins執行測試時,測試代碼中會用到這個模組。

 pip install xmlrunner

(二)安裝jenkins

(1)   下載jekins

https://jenkins.io/download/

下載適合自己的,我是下載長期穩定版的。

 

(2)   解壓後運行jenkins.msi這個檔案,然後一直下一步就是了。

 

(3)   http://localhost:8080 登入

(4)   根據提示輸入密碼後,下一步。

(6)   這裡第一個應該是預設安裝jenkins community的常用外掛程式,第二個應該是選擇需要安裝的外掛程式。不熟悉的時候選第一個就是了。

 

(7)   外掛程式安裝成功後如所示。(如果這步有部分外掛程式安裝失敗的話,就重新下載,實在安裝不了就重啟Jenkins服務(Windows的服務裡重啟),然後重新登陸後跳過這步,安裝失敗的外掛程式以後再在Jenkins的外掛程式管理中去安裝)

 

(8)   安裝完成。

(三)建立任務

(1)      首頁點擊【建立】。

 

 

(2)      填寫相關資訊後,點擊【確定】。

(3)      構建觸發器設定自動構建的時間。下面的是工作日每晚10點自動執行,這樣第二天早上上班就能看到測試結果了。

這裡有5個參數:可以點擊後面?查看說明文檔,*代表任意時間

第一個:分鐘(0-59)

第二個:小時(0-23)

第三個:日(1-31)

第四個:月份(1-12)

第五個:星期幾(0-7,0和7都代表星期日)

 

(4)      構建部分增加構建步驟,這裡選擇Windows批處理命令。

copy F:\Python\firstselenium\smoketest\*.py

python smoketests.py

 

(5)      構建後操作,增加操作步驟,選擇Publish JUnit test result report,然後在測試報告欄位填寫 測試報告/*.xml。(測試報告是測試套件中配置的output參數的值,看下面的smoketests.py的代碼就知道了)這樣Jenkins每次運行測試的時候都會從這個檔案夾讀取測試結果。

 

(6)      配置完成後點擊【儲存】。

(7)      點擊的【立即構建】,藍色就代表成功了。

 

(8)      點擊的最新測試結果可以查看最新的測試結果。(也可以點擊具體Build History下面的時間,查看具體哪一次構建的測試結果,點擊藍色的球形表徵圖的話,可以查看控制台輸出)

下面的代碼部分,主要的就是測試套件中的這句,其他的自己隨便寫一個或幾個測試案例就行了

xmlrunner.XMLTestRunner(verbosity=2,output='測試報告').run(smoke_tests)

(四)smoketests.py

 1 import unittest 2 from searchtest import SearchTest 3 from homepagetest import HomePageTest 4 from xmlrunner import xmlrunner 5 #擷取SearchTest類 和 HomePageTest類中的所有測試方法 6 search_test = unittest.TestLoader().loadTestsFromTestCase(SearchTest) 7 home_page_test = unittest.TestLoader().loadTestsFromTestCase(HomePageTest) 8 #建立一個包括SearchTest和HomePageTest的測試套件 9 smoke_tests = unittest.TestSuite([home_page_test,search_test])10 #運行測試套件11 # unittest.TextTestRunner(verbosity=2).run(smoke_tests)12 xmlrunner.XMLTestRunner(verbosity=2,output='測試報告').run(smoke_tests)

(五)searchtest.py

 1 import  sys 2 import unittest 3 from selenium import webdriver 4 from selenium.webdriver.common.action_chains import ActionChains 5 from selenium.webdriver.support.ui import WebDriverWait 6 class SearchTest(unittest.TestCase): 7     @classmethod 8     def setUpClass(cls): 9         cls.driver = webdriver.Chrome()10         # cls.driver.implicitly_wait(20)11         cls.driver.maximize_window()12         cls.driver.get("https://www.cnblogs.com/")13 14     def test_search_by_category(self):15         category_list = ['Java', 'C++', 'PHP', 'Delphi', 'Python', 'Ruby',\16                          'C語言', 'Erlang', 'Go', 'Swift', 'Scala', 'R語言', 'Verilog', '其它語言']17         #定位首頁網站分類中的程式設計語言18         search_class = self.driver.find_element_by_xpath('//li/a[@href="/cate/2/"]')19         #游標懸停在“程式設計語言”上20         ActionChains(self.driver).move_to_element(search_class).perform()21         WebDriverWait(self.driver, 20).until(lambda l: len(l.find_elements_by_xpath( \22             '//div[@id="cate_content_block_2"]/div[@class="cate_content_block"]/ul/li')) == 14)23         # 以列表形式返回程式設計語言下的所有小類24         search_small = self.driver.find_elements_by_xpath(\25             '//div[@id="cate_content_block_2"]/div[@class="cate_content_block"]/ul/li')26         small_cate = []27         for s in search_small:28             #去掉小類最後面的(0),並添加到列表small_cate中29             small = str(s.text).split('(')30             small_cate.append(small[0])31         #檢查運算式是否為true(此處檢查程式設計語言下的小類是否與預期結果一致)32         self.assertTrue(small_cate == category_list)33         self.assertEqual(small_cate,category_list)34 35     def test_search_by_look(self):36         seach_class = self.driver.find_element_by_xpath('//li/a[@href="/cate/2/"]')37         #定位程式設計語言下的小類Python38         seach_small = self.driver.find_element_by_xpath('//li/a[@href="/cate/python/"]')39         ActionChains(self.driver).move_to_element(seach_class).click(seach_small).perform()40         #檢查開啟的網頁標題是不是 Python - 網站分類 - 部落格園41         self.assertEqual(self.driver.title,"Python - 網站分類 - 部落格園" )42 43     @classmethod44     def tearDownClass(cls):45         cls.driver.quit()46 #加上下面2句,可以通過命令列運行測試,不加的話不影響通過IDE運行測試47 if __name__ == '__main__':51     #加verbosity=2參數,在命令列中顯示具體的測試方法52     unittest.main(verbosity=2)

(六)homepagetest.py

 1 import sys 2 import  unittest 3 from selenium import  webdriver 4 from selenium.common.exceptions import NoSuchElementException 5 from selenium.webdriver.common.by import By 6 class HomePageTest(unittest.TestCase): 7     @classmethod 8     def setUpClass(cls): 9         cls.driver = webdriver.Chrome()10         cls.driver.implicitly_wait(10)11         cls.driver.maximize_window()12         cls.driver.get("https://www.cnblogs.com/")13 14     def test_search_field(self):15         #檢查部落格園首頁有沒有搜尋方塊,is_element_present()是自訂的方法16         self.assertTrue(self.is_element_present(By.ID,"zzk_q"))17     def test_search_btn(self):18         # 檢查部落格園首頁有沒有找找看按鈕19         self.assertTrue(self.is_element_present(By.CLASS_NAME,"search_btn"))20 21     # 檢查部落格園首頁功能表列資訊是否與預期一致22     def test_menu(self):23         menu_data =['園子https://home.cnblogs.com/', '新聞https://news.cnblogs.com/',24                     '博問https://q.cnblogs.com/', '快閃記憶體https://ing.cnblogs.com/',25                     '小組https://group.cnblogs.com/', '收藏https://wz.cnblogs.com/',26                     '招聘https://job.cnblogs.com/', '班級https://edu.cnblogs.com/',27                     '找找看http://zzk.cnblogs.com/']28         #以列表形式返回部落格園首頁功能表列資訊29         self.check_menu = self.driver.find_elements_by_xpath('//div[@id="nav_menu"]/a')30         the_menu = []31         for c in self.check_menu:32             #將部落格園首頁的菜單名稱和URL添加到列表the_menu33             the_menu.append(c.text + c.get_attribute('href'))34         #檢查2個列表是否一致(檢查部落格園首頁的菜單名稱及URL是否和預期一致)35         self.assertListEqual(the_menu,menu_data)36 37     # 找到元素,返回True,否則返回False38     def is_element_present(self,how,what):39         try:40             self.driver.find_element(by=how,value = what)41         except NoSuchElementException as e:42             return False43         return True44 45     @classmethod46     def tearDownClass(cls):47         cls.driver.quit()48 49 # 加上下面2句,可以通過命令列運行測試,不加的話不影響通過IDE運行測試50 if __name__ == '__main__':54     # 加verbosity=2參數,在命令列中顯示具體的測試方法55     unittest.main(verbosity=2)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.