發表文章

目前顯示的是有「#資工」標籤的文章

[資工] Jenkins 篇:使用 python BDD 自動化測試網站 (Jenkins + behave + selenium)

圖片
Jenkins 這篇會記載如何從無到有安裝 Jenkins,並新增一個能夠閱讀 Junit 格式測試報告的自動測試專案。同時讓 Jenkins 與 github repo 掛勾,在有新的 commit 時能夠自動抓下來建置並執行測試。 1) Jenkins 端的配置與安裝 *裝在 mac 上所以會使用 brew 這個套件管理系統 1-1) 安裝 先安裝相依套件 JDK 8 brew cask install homebrew/cask-versions/adoptopenjdk8 再安裝 jenkins,這邊使用長期支援版本(LTS) brew install jenkins-lts 1-2) 啟動 brew services start jenkins-lts 打開瀏覽器輸入 localhost:8080 在安裝的設定選擇常用的「基本套件」即可 幾過一連串的設定就可以看到 Jenkins 首頁 1-3) 新增專案 在首頁左邊選擇「新增作業」,進到頁面之後輸入專案名稱「 Python -behave -testing 」並選擇「自由專案」,接著會進到配置頁面去輸入有關 github repo 與建置動作的設定 1-3-1) 配置 git repository a.選 Git b.填入 github URL(使用 SSH 格式) c.增加 Credential:點選 Add 按鈕開啟下拉選單並選擇  Jenkins ,在新頁面輸入 github 登入的帳號跟密碼 1-3-2) 設定 SCM 輪詢 如果 Jenkins 架在私人機器不對外公開或者不打算使用 git webhook 的推播功能,那我們可以啟用 SCM 輪詢,這邊的排程採用 crontab 的時間格式,範例中為每隔 5 分鐘檢查 repo 是否有新的 commit。 1-3-3) 設定建置的腳本 由於這是一個網頁測試專案,其實不用建置,所以這邊直接輸入 behave --junit,讓 behave 這個 python 的 BDD 框架能夠產生 JUnit 格式的報告,讓 Jenkins 能夠讀取與分析。 但是由於我們把 behave 跟 selenium-chrome-

[資工] Heap Sort 的特性與做法解說 (北捷資訊工程類 109年的考題)

圖片
1) 介紹 heap_sort 是一個使用二元樹結構來做排序的演算法,但其實實作上也可以使用一維陣列來儲存資料做 in-place sort (就地排序),只是實作時要抓好陣列 index 與樹結點的對應關係。 1-1) 元素編號 在一個以 1 為陣列第一個元素的編號所組成的樹中: 一個編號 \(i\) 的元素其左子節點的索引值(編號)定義為 $$2i$$ 其右子節點的編號定義為 $$2i+1$$ 但是若陣列的基底以 0 為第一個編號,則需要對公式稍微調整一下: 2) 差異 heap_sort 與 binary search tree (二元搜尋樹) 的差異在於,BST 需要遵守一樹結點的左子結點值要小於該節點值,而右子結點值則需要大於該結點值(aka 上層節點值)。 而 heap_sort 在使用二元樹上面的限制比較鬆散,在建立 min/max heap 時,只要遵守上層結點值必然小於(或大於)下層節點的值的規則,則可稱之為一個最小/最大堆積。 3) 步驟 這邊舉例是用最大堆積法: 1) 先建立一棵樹的最大堆積排序,做完上層 root 節點保證有整棵樹中最大的值,再把根節點的最大值與陣列最後一個元素交換,最後一個元素即排序好了! 2) 然後再把剩下的元素(n-1)為範圍所組成的樹,重新做一次最大堆積排序,此時根節點會有第二大的值,再把根節點的值與陣列倒數第二個元素交換,現在有兩個排序好了! 3) 把未排序的元素們繼續套用 3-2) 的規則,直到所有元素都排序好,即完成遞增的 heap sort。 4) 為什麼要叫做 heap sort? 啊災,可能一些東西隨便堆起來也會長得像二元樹吧(笑 圖片出處: heap of scrap metal,  Author:  Mohylek  ,這裏以創用 CC 3.0協議 分享圖片  5) 參考資料 5-1)  堆積排序(Heap Sort)演算法,利用完全二元樹來排序的演算法  - 裡頭有每個步驟的二元樹圖,我就是先看這篇看懂之後才寫本篇的~