接口自動化從個人走向團隊協作開發
接口自動化已經是軟件測試自動化領域裏,公認的性價比最高的方式了。
很多初學者都是從寫 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://[email protected]: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 開源地址是
//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 之後界面如下

- 在 Files changed 查看文件差異
- 沒有問題點擊 Merge pull request 合併
- 審核不通過點擊 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 規避衝突的實驗性內容。
如果你有更好的方法,歡迎留言討論。