1. 程式人生 > >Appium+python自動化(三十三)- 測試環境和本地環境傻傻滴分不清楚-Remote(超詳解)

Appium+python自動化(三十三)- 測試環境和本地環境傻傻滴分不清楚-Remote(超詳解)

  簡介

  在前邊所有涉及啟動app的時候有這樣一行程式碼driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps),很多小夥伴們和同學們不知道這個ip和埠哪裡來的,我覺得有必要給小夥伴解釋一下,於是巨集哥決定寫一篇關於這個appium的伺服器ip文章! 來給大家答答疑,解解惑!這樣就不會問一些比較幼稚的問題,讓別人看了笑話,笑掉大牙了。eg:巨集哥,巨集哥,巨集哥,那個我在測試伺服器搭建測試環境,我是不是就只能在測試伺服器上除錯程式碼,然後進行測試了。那這樣我還的搭建一套別寫指令碼的環境。。。。等等的傻白寡的問題,Remote 我們先給他相一相面,就知道它的意思是:遠端。那麼我們是不是把那個IP地址修改成測試伺服器的IP,一切問題是不是就迎刃而解了。

  目的

  一般來說appium中127.0.0.1這個地址的預設的不需要修改。在做自動化過程中,如果遇到需要遠端操作的話,這個功能就可以派上用場了。想想看,如果公司給你單獨配置一臺跑自動化測試電腦,然後自己工作的電腦寫指令碼,在自動化機器上執行指令碼,這樣工作自動化兩不誤,是不是很爽呢?

  說明

  127.0.0.1

  127.0.0.1是環回(loopback)地址,用來測試本機的TCP/IP協議棧,比如你在cmd裡輸入:ping 127.0.0.1:

  

 

  看到的就是向本機發送請求包,這個請求只會在你的本地跑,不會通過網路傳送出去。

  “本地”,你一定還想到了localhost,開啟你的hosts檔案(右鍵選擇用notenotepad++開啟):

  

 

  可以看到:

  

 

  是的,127.0.0.1和localhost的是“等價的”:

  localhost是個域名,性質跟 “www.baidu.com” 差不多。(不能直接繫結套接字,必須先gethostbyname)轉成IP才能繫結——括號裡的字我也不太明白。也就是說你的localhost預設的ip就是127.0.0.1。

  現在我們就可以這樣理解了,地址寫127.0.0.1的意思就是要在本地進行訪問:

  

 

  

 

  我們把地址直接寫成localhost,這樣也是可以調通的。

  埠號:4723

  這個值不是固定的,唯一的要求就是——不要衝突,你可以在cmd你檢視目前佔用的埠號,輸入命令

  netstat -ano檢視所有端口占用;

  netstat -ano | findstr “4723” 檢視4723埠號被哪個程式佔用

  第一個沒有檢視到程式,因為巨集哥沒有開啟appium

  巨集哥開始啟動appium第二個檢視到了

  

 

  也可以開啟你的appium:

  

 

  在這裡就可以修改埠號了,但是你在這裡怎麼改埠號,那麼你程式碼裡就要對應的修改埠號。

  /wd/hub

  將滑鼠定位到remote 放在上邊,然後按住Ctrl點選滑鼠左鍵進入原始碼,我們來看原始碼:

  

 

  可以看到,WebDriver類在初始化時也定義了一個地址,除了埠號不一樣其它的和我們傳的是一樣的。因此我們就可以簡單的把/wd/hub理解為——(烏龜的屁股--龜腚)規定。

  設定IP

  1.開啟appium>General Setting介面

  

 

  2.這裡用個appium預設的服務端地址127.0.0.1埠4723,一般在自己機器上除錯,無需修改

  訪問地址

  1.程式碼裡面的那個地址到底指向的是哪裡呢?

  啟動appium服務後,在瀏覽器輸入:http://127.0.0.1:4723/wd/hub。出現如下圖所示,說明服務啟動成功,可以把appium看出是一個服務端。

  

 

  2.appium後臺訪問日誌

  

 

  配置測試機

  1.一臺工作電腦,一臺跑自動化測試的電腦,如何用工作的電腦遠端控制自動化測試的那臺電腦呢?

  2.測試電腦上的appium服務地址改成本機IP地址如:192.168.1.1(注意注意注意!!!這裡要是本機的ip地址)

  

 

  3.啟動測試電腦上的appium。(可以看到日誌啟動的address 192.0.0.1,port 4723)

  

 

  遠端操作

  1.在自己工作電腦上開啟瀏覽器輸入:192.168.1.1:4723/wd/hub。這一步很重要,一定要看到如下介面,確認遠端連結成功.

  

 

  2.腳本里面的程式碼修改下地址

  

 

  3.測試機上環境準備好後,在本機上執行指令碼,於是測試機上可以自動運行了。

  小結

  1.首先 localhost 是一個域名,在過去它指向 127.0.0.1 這個IP地址。在作業系統支援 ipv6 後,它同時還指向ipv6 的地址 [::1]

  在 Windows 中,這個域名是預定義的,從 hosts 檔案(c:\windows\system32\drivers\etc\hosts)(etc/hosts)中可以看出:

  # localhost name resolution is handled within DNS itself.

  # 127.0.0.1 localhost

  # ::1 localhost

  而在 Linux 中,其定義位於 /etc/hosts 中:

  127.0.0.1 localhost

  注意這個值是可修改的,比如我把它改成

  192.068.206.1 localhost

  然後再去 ping localhost,提示就變成了

  PING localhost (192.168.206.1) 56(84) bytes of data.

  當然一般人不會像我這麼蛋疼。

  ————分割線—說完localhost再說127.0.0.1————

  127.0.0.1 這個地址通常分配給 loopback 介面。loopback 是一個特殊的網路介面(可理解成虛擬網絡卡),用於本機中各個應用之間的網路互動。只要作業系統的網路元件是正常的,loopback 就能工作。Windows 中看不到這個介面,Linux中這個介面叫 lo:

  #ifconfig

  eth0 Link encap:Ethernet hwaddr 00:00:00:00:00:00

  inet addr :192.168.0.1 Bcase:192.168.0.255 Mask:255.255.255.0

  ......

  lo Link encap:Local Loopback

  inetaddr: 127.0.0.1 Mask: 255.0.0.0

  ......

  可以看出 lo 介面的地址是 127.0.0.1。事實上整個 127.* 網段都算能夠使用,比如你 ping 127.0.0.2 也是通的。

  但是使用127.0.0.1作為loopback介面的預設地址只是一個慣例,比如下面這樣:

  #ifconfig lo 192.168.128.1

  #ping localhost #糟糕,ping不通了

  #ping 192.128.128.1 # 可以通

  #ifconfig lo

  lo Link encap:Local Loopback

  inetaddr: 192.168.128.1 Mask: 255.255.255.0

 鄭州不孕不育醫院:http://yyk.39.net/zz3/zonghe/1d427.html/鄭州不孕不育醫院哪家好:http://yyk.39.net/zz3/zonghe/1d427.html/鄭州不孕不育醫院排名:http://yyk.39.net/zz3/zonghe/1d427.html/

  當然,一般人更不會像我這樣蛋疼。如果隨便改這些配置,可能導致很多隻認 127.0.0.1 的軟體掛掉。

  ————分割線—說完127.0.0.1再說本機地址————

  確切地說,“本機地址”並不是一個規範的名詞。通常情況下,指的是“本機物理網絡卡所繫結的網路協議地址”。由於目前常用網路協議只剩下了IPV4,IPX/Apple Tak消失了,IPV6還沒普及,所以通常僅指IP地址甚至ipv4地址。一般情況下,並不會把 127.0.0.1當作本機地址——因為沒必要特別說明,大家都知道。

  本機地址是與具體的網路介面繫結的。比如乙太網卡、無線網絡卡或者PPP/PPPoE撥號網路的虛擬網絡卡,想要正常工作都要繫結一個地址,否則其他裝置就不知道如何訪問它。

  ————最後總結一下區別————

  localhost 是個域名,不是地址,它可以被配置為任意的 IP 地址,不過通常情況下都指向 127.0.0.1(ipv4)和 [::1](ipv6)

  整個127.* 網段通常被用作 loopback 網路介面的預設地址,按慣例通常設定為 127.0.0.1。這個地址在其他計算機上不能訪問,就算你想訪問,訪問的也是自己,因為每臺帶有TCP/IP協議棧的裝置基本上都有 localhost/127.0.0.1。

  本機地址通常指的是繫結在物理或虛擬網路介面上的IP地址,可供其他裝置訪問到。

  最後,從開發度來看

  localhost是個域名,性質跟 “www.baidu.com” 差不多。不能直接繫結套接字,必須先gethostbyname轉成IP才能繫結。

  127.0.0.1 是繫結在 loopback 介面上的地址,如果服務端套接字繫結在它上面,你的客戶端程式就只能在本機訪問。

  如果主機中存在多個網絡卡,分別連線不同的物理網路,比如 192.168.0.1/255.255.255.0 和 192.168.1.1/255.255.255.0,那麼當你的服務端套接字綁到 192.168.0.1 這個地址上時,位於 192.168.1.* 網段的其他計算機是無法連線的,只有位於192.168.0.* 網段的計算機才能訪問你的服務端程式。

  2.好了,今天就分享到這裡,想必各位小夥伴和童鞋們對這一行程式碼衍生出來的問題都有了