1. 程式人生 > >Python+Selenium筆記(十八):持續集成jenkins

Python+Selenium筆記(十八):持續集成jenkins

每次 repo adt webdriver 測試的 ews equal unit pcl

(一)安裝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         #定位編程語言下的小類Python
38         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     @classmethod
44     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_menu
33             the_menu.append(c.text + c.get_attribute(href))
34         #檢查2個列表是否一致(檢查博客園首頁的菜單名稱及URL是否和預期一致)
35         self.assertListEqual(the_menu,menu_data)
36 
37     # 找到元素,返回True,否則返回False
38     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 False
43         return True
44 
45     @classmethod
46     def tearDownClass(cls):
47         cls.driver.quit()
48 
49 # 加上下面2句,可以通過命令行運行測試,不加的話不影響通過IDE運行測試
50 if __name__ == __main__:54     # 加verbosity=2參數,在命令行中顯示具體的測試方法
55     unittest.main(verbosity=2)

Python+Selenium筆記(十八):持續集成jenkins