介面自動化從個人走向團隊協作開發

測試老樹發表於2020-10-19

介面自動化已經是軟體測試自動化領域裡,公認的價效比最高的方式了。

很多初學者都是從寫 Python 指令碼開始的,從一個人寫指令碼,逐漸的和團隊一起寫工程。

本篇文章就來聊一聊介面自動化從個人走向團隊協作開發的歷程和方案。

單機版

大家入門學的介面自動化基本都是按這個目錄來組織的,或者類似於這樣的目錄

介面自動化從個人走向團隊協作開發

case:測試用例

common:公共函式

config:配置

data:資料

result:測試報告

util:工具類

run.py:用例執行入口

run_mail.py:執行後自動傳送郵件入口

單機版的玩法,是自己寫完之後,上傳到運維伺服器,開個定時任務跑指令碼,輸出測試報告,傳送郵件。

大家看到你的測試報告,紛紛誇讚,大佬牛牛牛。你也會謙虛,我只是個渣渣。

版本管理

隨著程式碼寫的越來越多,就會油然而生一種感覺,自己的程式碼這麼牛!是不是需要備份一下哇,不然萬一哪天硬碟壞了怎麼辦。還好懂點 Git。

Git 是一款分散式的版本管理工具。分散式,可以理解為,程式碼是分佈在伺服器和各臺電腦上的,把程式碼都備份了一份。Git 是工具,不存放程式碼,程式碼是存放在“網盤”上面的,也就是程式碼託管平臺。程式碼託管平臺公開開源的有著名的全球的 GitHub,也有國內的 Gitee(碼雲)。公司內部用的多的是 GitLab 和 Bitbucket 等,私有部署,保密。

本文以 GitHub 為例,講解如何上傳 Python 介面自動化程式碼。

第一步先在 GitHub 上建立倉庫,需要填寫倉庫名,公開/私有等

介面自動化從個人走向團隊協作開發

第二步在測試專案中新增 .gitignore 檔案,忽略掉不需要上傳的檔案,如 PyCharm 配置、快取等

.idea/
.pytest_cache/
__pycache__/
*.pyc

第三步把本地的指令碼,初始化並上傳到程式碼倉庫裡面去

git config --global user.name "xxx"
git config --global user.email "xxx"
cd existing-project
git init
git add --all
git commit -m "Initial Commit"
git remote add origin ssh://git@xxx.com:8022/dongfanger.git
git pull --rebase origin master
git push -u origin master

程式碼備份好了,心裡面踏實了。

而且還能在 PyCharm 檢視自己的提交記錄,舒服

介面自動化從個人走向團隊協作開發

團隊協作開發

自己能寫程式碼了,也能用 Git 做程式碼版本控制管理了。眾人拾柴火焰高。本文以 pytest 測試框架為例,講解如何使用 Git 完成團隊協作開發。

在這之前,先介紹一款測試工具 tep,也就是 try easy pytest 的縮寫,輔助你更好的使用 pytest。

tep

tep,是我參考 HttpRunner 開發的一款小巧的測試工具,GitHub 開源地址是
https://github.com/dongfanger/tep
感興趣的同學可以康康。

安裝 tep,tep 已釋出到 pypi,直接使用 pip 就可以安裝

pip install tep

tep 提供了腳手架,使用 startproject 命令就可以建立初始化專案目錄

tep startproject demo
>tep startproject demo
2020-10-15 21:11:05.806 | INFO     | tep.scaffold:create_scaffold:40 - Create new project: demo
Project root dir: C:\Users\demo

Created folder: demo
Created folder: demo\tests
Created folder: demo\files
Created folder: demo\fixtures
Created file: demo\.gitignore
Created file: demo\conf.yaml
Created file: demo\conftest.py
Created file: demo\pytest.ini
Created file: demo\tests\__init__.py
Created file: demo\fixtures\__init__.py
Created file: demo\fixtures\fixture_admin.py
Created file: demo\fixtures\fixture_don.py

建立好的專案結構是這樣的

介面自動化從個人走向團隊協作開發

files:檔案,如 excel匯入.xlsx

fixtures:pytest fixtures

tests:測試用例,所有測試指令碼都放這個資料夾

.gitignore:Git 忽略檔案

conf.yaml:配置 yaml 檔案

conftest.py:引入 fixtures、hook、外掛等

pytest.ini:pytest 配置檔案

寫這篇文章時,tep 的版本是 0.4.0,不穩定,僅供參考和學習交流

拉分支

主幹分支是 master

  • master

每次需要寫指令碼,就從 master 拉取分支

checkout 切換到 master 之後,先 pull 一下獲取最新程式碼

git checkout master
git pull

再建立新分支

git checkout -b branch_name

也可以在 PyCharm 中通過介面的方式建立

介面自動化從個人走向團隊協作開發

分支名按實際意義來寫,比如 feature_add_something。

在分支寫完指令碼後,使用 add commit push 命令,把本地的程式碼同步到程式碼倉庫的遠端分支上

git add .
git commit -m message
git push

初次提交 push 可能會報錯,照著報錯提示再 push 一下就可以了。

完成後程式碼倉庫就會多一個新的分支

  • master
  • feature_add_something

每次要完成一些指令碼,都重新拉取分支,把任務拆分,方便跟蹤和追溯。

多個任務就會形成多個分支,多個團隊人員也會形成多個分支,最終分支就會變成這樣

  • master
  • feature_add_something
  • feature_callback
  • feature_me_code
  • feature_you_crud
  • feature_he_just_beat_it

合程式碼

接著就需要把分支程式碼合併到 master

第一種方式是在 PyCharm 手動執行 git merge 命令來合併。

第二種方式是走 Pull requests。本文介紹第二種,因為可以在介面上操作,便捷直觀,而且有稽核機制。

Pull requests 的思路是在頁面上發起請求,從分支合併到 master,管理員接收到請求後,檢視差異,稽核是否允許合併。

本文以 GitHub 為例,演示如何使用Pull requests 進行程式碼合併。

開啟程式碼倉庫後,切換到Pull requests 標籤頁,建立新的 pull request 請求

介面自動化從個人走向團隊協作開發

然後選擇從哪個分支合併到 master

介面自動化從個人走向團隊協作開發

在這個介面也展示了分支和 master 的差異,不同託管平臺有不同的介面,但都能找得到。

選擇好合並的分支以後,就可以確認建立了

介面自動化從個人走向團隊協作開發

建立成功,管理員在標籤頁上會看到有個數字角標,標明瞭提交的 pull request 數量

介面自動化從個人走向團隊協作開發

在標籤頁的列表中,開啟 pull request 之後介面如下

介面自動化從個人走向團隊協作開發
  1. Files changed 檢視檔案差異
  2. 沒有問題點選 Merge pull request 合併
  3. 稽核不通過點選 Close pull request 拒絕

至此,就完成了從分支到 master 的程式碼合併。

解決衝突

如果各個分支都提交的不同檔案,Git 會自動合併。如果提交的有相同檔案,就會發生衝突,無法自動合併,Git 也不知道以哪個為準,建立 pull request 會告訴你不能自動 merge

介面自動化從個人走向團隊協作開發

只能手動來解決。建議讓管理員來統一處理,如果有能力保證不出錯,也可以自己完成。

本文以 PyCharm 為例,講解如何手動解決衝突。首先在專案資料夾右鍵選擇 Merge Changes

介面自動化從個人走向團隊協作開發

再選擇分支,比如圖中從 feature_conflict 合併到 master

介面自動化從個人走向團隊協作開發

接著點選 Merge 按鈕,會提示衝突

介面自動化從個人走向團隊協作開發

1 Accept Yours 接受你自己的忽略其他人的。

2 Accept Theirs 接受其他人的忽略你自己的。

3 Merge 根據檔案內容來選擇

介面自動化從個人走向團隊協作開發

兩邊分別是 master 和分支的內容,中間是合併後的結果。

點選 >> 或 << 可以把2邊內容,選擇性的合併到中間,如果檔案中有多個地方不一致,在不一致的地方都會有 >> 或 <<。

最後點選右下角 Apply 即可。

規避衝突

本小節為實驗內容,對 tep 不感興趣的同學可以跳過。

tep 提供了規避掉部分衝突的方法。第一個方法是共享變數用 fixture 來傳遞,fixture是實現了依賴注入的,只需在 test 引用就可以了,不同團隊成員可以互相引入 fixture,從函式的維度規避衝突。同時把返回值定義為 class,在寫程式碼的時候,可以鏈式呼叫,敲關鍵字後彈出來提示內容,省去了輸入全名的麻煩。第二個方法,是把不同的 fixture 放在不同的檔案,管理員維護公共的 fixture,定義在 fixture_admin.py 中。團隊成員建立自己的 fixtures,放在 fixture_your_name.py 中,從檔案的維度規避衝突。tep 仍然在不斷優化,感興趣的同學可以關注公眾號,最新進展我會第一時間分享。

簡要回顧

本文先描述了從單機版到版本管理的歷程,接著講解了團隊協作開發。以 GitHub 為示例,詳細介紹瞭如何使用 Git 完成建立倉庫、初始化專案、上傳程式碼、拉分支、合程式碼, 如何解決程式碼合併衝突,以及 tep 規避衝突的實驗性內容。

如果你有更好的方法,歡迎留言討論

相關文章