如何修改Airtest源碼&如何提交修改

轉自公衆號:AirtestProject

爲什麼你自己修改的Airtest源碼不生效?(上)

前言

 

相信小夥伴們多少都會遇到想要修改Airtest源碼,方便自己腳本編寫的情況。這時,不少同學會立即去修改AirtestIDE文件夾下Airtest庫的.py文件(如下圖),其實這樣修改是無效的,並不會達到預期的效果。

 

 

正確的修改Airtest源碼的步驟是:

  • 在本地安裝python環境

  • 安裝Airtest

  • 安裝Poco

  • 在本地的Airtest庫中修改源碼

 在本地安裝python環境

Airtest支持Python2和3,但是我們更推薦使用 Python3。如果你願意的話我們也同樣建議使用 virtualenv 等虛擬環境新建一個乾淨的python環境。各個版本的python可以自行到python官網上下載安裝。

python多環境管理擴展閱讀:Miniconda安裝教程,並使用PyCharm創建相關項目

 

安裝Airtest

使用 pip 安裝Airtest框架 pip install airtest

注意: 在Mac/Linux系統下,需要手動賦予adb可執行權限,否則可能在執行腳本時遇到 Permission denied 的報錯:    

 

# mac系統
> cd {your_python_path}/site-packages/airtest/core/android/static/adb/mac
# linux系統
> cd {your_python_path}/site-packages/airtest/core/android/static/adb/linux
> chmod +x adb

 

安裝poco

使用 pip 安裝poco框架 pip install pocoui,請注意庫的名稱爲 pocoui,不是poco,請不要填錯。

如果你在命令行中使用pip list ,看到同時存在pocopocoui兩個庫,請把poco卸載,因爲pocoui纔是正確的庫。

 

在本地的Airtest庫裏面修改源碼

完成上述三步以後,其實就是在本地部署了一個python環境來使用Airtestpoco。然後我們可以修改本地安裝的Airtest庫裏面的源碼,使得修改生效。

舉個例子,打開你本地安裝的Airtest庫,找到Airtest>--airtest>--core目錄下的api.py文件,在touch方法里加一條代碼,如下:

 

 

那麼你在命令行運行腳本的時候,如果腳本里面寫有touch語句,你在touch方法裏面增加的print語句也會生效:

 

 

如果想要你修改的內容在IDE也生效的話,只需要將IDE的運行環境改成本地運行環境即可:

 

 

這時候IDE運行時,使用的Airtest庫就不是IDE自帶的Airtest庫,而是你在本地安裝的Airtest庫,運行一條touch語句,之前對touch方法的修改也會在IDE裏面生效了:

 

爲什麼你自己修改的Airtest源碼不生效?(中)

 

前言

Airtest是一個開源項目,所以我們可以在 https://github.com/AirtestProject/Airtest 這裏看到它的源碼,除了直接看源碼學習之外,我們也可以clone或者fork一份項目下來自行修改,同時還能夠試用到Airtest的開發分支。

關於GitHub上Airtest源碼的遠程倉庫,我們主要想與大家分享兩方面的內容:

  1. 如何在本地安裝並使用Airtest在GitHub上的源碼;

  2. 如何上傳本地的修改到Airtest遠程倉庫上給其他用戶使用。

     

因爲內容比較多,所以我們分倆期推文來介紹上述內容。今天這篇文章就是向大家介紹如何在本地安裝並使用Airtest在Github上面的源碼。

 

從遠程倉庫上拉取分支

先從1個具體的例子來看看第一部分的內容。Airtest遠程倉庫最近增加了一些新的修改,包括Android10的初步支持,以及報告部分樣式的調整和BUG修復,如果我們想試用一下的話,就需要拉取Airtest倉庫裏面這個分支的內容到本地上,再進行測試。

具體的步驟如下:

安裝Git客戶端

首先,我們需要在自己的計算機上安裝一個Git客戶端(安裝包可以從Git官網上獲取)。

克隆Airtest的遠程倉庫到本地

找到你想存放Airtest遠程倉庫的目錄,右鍵點擊Git bush here,然後在命令行中輸入以下命令:

git clone [email protected]:AirtestProject/Airtest.git 

運行之後客戶端就會把Airtest的遠程倉庫下載到你的本地目錄:

 

如果運行命令以後,並沒有開始下載,而是出現如下提示:

 

這表明使用命令行去訪問GitHub的時候,需要先填寫身份認證,即需要新增SSH密鑰到你的GitHub賬戶上(僅需要做一次):

  1. 在客戶端運行clip < ~/.ssh/id_rsa.pub,即可將SSH密鑰複製到剪切板上

  2. 登錄GitHub,點擊右上角的頭像,選擇Settings

  3. 單擊左側的菜單欄中的SSH and GPG keys

  4. 再單擊New SSH key

  5. title裏填寫自定義的描述標籤,在key裏面,把剪切板的密鑰複製進去

  6. 單擊 Add SSH key,再輸入你的GitHub密碼確認即可

拉取遠程倉庫的分支到本地

“Android10支持”相關分支的Pull Request是 https://github.com/AirtestProject/Airtest/pull/618 ,也就是說id是618, 要把這個PR拉取到本地,需要先進去剛纔克隆的Airtest文件夾裏面,右鍵點擊Git bush here,再執行以下代碼:

git fetch origin refs/pull/618/head:pr618

 

這條指令的意思是,將遠程倉庫的618號pull request拉取到本地的pr618分支上。

切換到pr618的分支

使用如下代碼即可切換到pr618這個分支:

git checkout pr618

 

將Airtest安裝到本地python環境

在測試前還需要先將這個Airtest倉庫安裝到本地python環境中,在命令行執行pip install -e .(不要忘記最後是個.號),因爲我們提升了yosemite.apk的版本號,所以也可能會提示重新安裝yosemite.apk

 

安裝成功後,你還可以用pip list檢查一下,當前的Airtest是不是指向你克隆Airtest的目錄。

 

測試支持Android10的分支

自此,我們就把支持Android10的pr拉取到我們本地上了,可以自由進行測試。

 

爲什麼你自己修改的Airtest源碼不生效?(下)

 

前言

前面我們向大家介紹瞭如何在本地安裝並使用Airtest在Github上面的源碼。下面我們來講一下:“如何上傳本地的修改到Airtest倉庫上給其他用戶使用”,即如何給開源項目貢獻代碼。

需要注意的是,clone操作是不需要項目權限的,只要你註冊了GitHub賬號,就可以把開源的項目clone下來。但是如果你想要貢獻代碼,即把你本地的代碼上傳到項目的遠程倉庫的話,一般都是不能直接傳的,因爲大部分人都不是項目的開發者,沒有直接push代碼的權限,所以貢獻代碼的流程大致如下:

 

  1. fork原始項目到自己的賬號下

  2. 克隆fork到的項目到本地進行修改

  3. 提交修改並同步原始項目倉庫的更新

  4. push代碼到自己賬號的項目倉庫裏

  5. 向原始項目發起提交申請

  6. 原始項目的管理員同意後,纔會merge到原始項目的倉庫裏

下文是具體的操作方法。

 

 

給開源項目貢獻源碼

fork開源項目到自己的賬戶上

首先我們需要打開這個開源項目的url:https://github.com/AirtestProject/Airtest ;然後點擊右上角的Fork按鈕。

 

等待一段時間後,開源項目AirtestProject/Airtest就被複制到我們自己的倉庫裏面了,命名爲你的用戶名/Airtest

 

這個 Fork 後的項目是我們自己賬戶上的項目,所以我們可以隨意修改,且並不會影響到真正的AirtestProject/Airtest項目的。下面我們把它稱之爲子倉庫。原始項目的那個倉庫,在下文我們稱之爲主倉庫。

clone子倉庫到本地

在本地目錄下,右鍵Git Bush Here,輸入以下命令把自己賬戶上fork得到的倉庫(子倉庫)clone到本地:

# Clone 到本地的項目目錄
git clone https://github.com/your-user-name/Airtest Airtest

 

切換到某個分支

進入剛纔clone好的Airtest目錄,右鍵Git Bush Here,默認進去的是master分支。如果我們是在別的分支上做了改動,比如aaa分支,就可以輸入以下命令切換到aaa分支:

# 創建並切換到 aaa 分支
git checkout -b aaa

 

提交修改到本地倉庫

想要提交本地aaa分支上的修改,我們可以使用以下命令將提交修改到本地倉庫上:

# 添加修改過的文件
git add 文件名
# 提交commit
git commit -m "改動的描述"

# 可以使用下述命令添加所有文件
git add -A
同步主倉庫的更新

提交commit之後,我們並不能馬上push代碼,還需要同步主倉庫上的更新;因爲這部分的內容比較複雜,所以我們需要先來理解一些概念:

  1. 在對子倉庫修改的過程中,如果主倉庫進行了修改更新,子倉庫是不知道且不會同步的

  2. 在主倉庫進行了修改更新的情況下,如果子倉庫沒有同步這部分改動而堅持向主倉庫發起pull request,很可能會被主倉庫的管理員拒絕

  3. origin是用來向子倉庫提交更新的遠程倉庫,Git會默認把origin與你的子倉庫關聯在一起,可以通過git remote -vv查看

     

  4. 用來同步主倉庫更新的遠程倉庫,則需要我們手動進行添加,可以將其命名爲upstream或是其它你喜歡的名字,還可以通過git remote -v查看倉庫之間的關聯

     

瞭解了上述的概念之後,我們假設已經手動添加了upstream,並且upstream已經更新了很多提交,我們就可以用以下的方式拉取併合並upstream上的更新:

# ①切換到 master 分支
git checkout master
# ②使用 rebase 模式拉取 upstream/master 上的更新,然後與本地的master合併
git pull --rebase upstream master:master
# ③切換到 aaa 分支
git checkout aaa
# ④使用 rebase 模式合併本地的 aaa 和 master 分支
git rebase master

或者我們還可以使用下面這種方式拉取合併upstream的更新:

# ①切換到 master 分支
git checkout master
# ②獲取 upstream 上的 master 分支
git fetch upstream master
# ③切換到 aaa 分支
git checkout aaa
# ④使用 rebase 模式合併本地的 aaa 和 upstream/master 分支
git rebase upstream/master
將修改的代碼push到子倉庫上

完成了上述的更新合併以後,我們纔可以把代碼push到子倉庫上:

# 將本地 aaa 分支的代碼 push 到 origin 的 aaa 分支
git push origin aaa
向主倉庫發起pull request

push代碼以後,會跳出GitHub網站的登錄彈窗,登陸後會智能識別並彈出按鈕 Compare & pull request,點擊後填寫一些信息即可向主倉庫發起pull request

需要注意的是,主倉庫的開發人員收到你的申請以後,他們還會對你的改動進行審覈(即像上一篇推文講述的那樣,把你的代碼拉取到本地測試一下),只有審覈通過纔會真正被merge到主倉庫上。

舉個例子,在我們Airtest項目下,有一個項目支持設備列表的文檔 https://github.com/AirtestProject/Airtest/blob/master/docs/wiki/platforms.md ,但是因爲設備很多,我們更新不過來,所以有一些熱心的用戶,就會在自己本地fork的項目上面修改了這個platforms.md文檔,然後再向我們發起一個pull request

 

 

項目的管理員收到這個pull request之後,就會查看用戶修改了什麼地方:

 

 

如果這個用戶的pull request沒有問題,Airtest的項目管理員就會 merge 這個pull request到主倉庫上。至此,該用戶就可以成爲github上面3k star項目的contributor啦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章