接口自動化已經是軟體測試自動化領域裡,公認的成本效益最高的方式了。很多初學者都是從寫 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 開源位址是
https://github.com/dongfanger/tep
感興趣的同學可以康康。安裝 tep,tep 已釋出到 pypi,直接使用 pip 就可以安裝pip install teptep 提供了腳手架,使用 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導入.xlsxfixtures:pytest fixturestests:測試用例,所有測試腳本都放這個檔案夾.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 一下就可以了。完成後代碼倉庫就會多一個新的分支
- 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 規避沖突的實驗性内容。https://mp.weixin.qq.com/s/i51KsnSmq6VLNSIFwg6dBA