python自動化測試腳本編寫
① 如何使用python做android的自動化測試
開始第一個簡單的Android UI自動化測試
1.使用adb命令連接真機或模擬器
2.打開uiautomatorviewer工具
3.使用uiautomatorviewer工具獲取應用的元素進行定位
4.簡單介紹unittest框架的使用方法
5.使用Python編寫貓寧考勤應用注冊模塊的自動化測試
1.使用adb命令連接真機或模擬器:
手機USB連接電腦,進入開發者模式;
cmd命令:adb devices ,查看手機是否連接
這里寫圖片描述
顯示錯誤
這是因為adb的埠被佔用,我們需要查看是什麼應用佔用了這個埠(5037為adb默認埠)
cmd命令 : netstat -aon|findstr 「5037」
這里寫圖片描述
可以看到佔用5037埠對應的程序的PID號為8388;
cmd命令 : tasklist|findstr 「8388」
這里寫圖片描述
可以看出8388對應的程序為kadb.exe,說明該程序正在使用5037埠;
這時我們需要在任務管理器中結束kadb.exe進程,按快捷鍵「Ctrl+Shift+Esc」調出Windows任務管理器,找到「kadb.exe」,單擊下方的結束進程即可!
這里寫圖片描述
我們再次運行cmd命令:adb devices
這里寫圖片描述
這一步成功後我們才能運行sdk自帶的uiautomatorviewer;
我們需要用uiautomatorviewer工具來獲取元素,用於定位。
cmd命令:uiautomatorviewer,打開uiautomatorviewer界面
這里寫圖片描述
或者找到sdk目錄:sdk\tools中找到uiautomatorviewer.bat文件雙擊運行
這里寫圖片描述
2.打開uiautomatorviewer工具
這里寫圖片描述
我們可以根據text,resource-id,class等元素進行定位
3.使用uiautomatorviewer工具獲取應用的元素進行定位
這里我使用python自帶的IDLE進行編寫測試腳本,打開python文件找到IDLE(python GUI)雙擊打開,如圖:
這里寫圖片描述
4.簡單介紹unittest框架的使用方法
# -*- coding:utf-8 -*-
from uiautomator import device as d
import unittest
class Mytest(unittest.TestCase):
#初始化工作
def setUp(self):
print "--------------初始化工作"
#退出清理工作
def tearDown(self):
print "--------------退出清理工作"
#測試點擊貓寧考勤case
def test_login(self):
d(text="貓寧考勤").click()
print "--------------測試1"
#測試2
def test_z(self):
print "--------------測試2" #這里你可以寫你的第二個測試用例,
#測試3
def test_w(self):
print "--------------測試3" #這里你可以寫你的第三個測試用例。。。。。。。。。。。。。
if __name__ == '__main__':
unittest.main()
結果如下:
Testing started at 21:14 …
————–初始化工作
————–測試1
————–退出清理工作
————–初始化工作
————–測試3
————–退出清理工作
————–初始化工作
————–測試2
————–退出清理工作
Process finished with exit code 0
從結果中我們可以看出unittest框架的運行方式為:
setUp 測試1 tearDown
setUp 測試2 tearDown
setUp 測試3 tearDown
5.使用Python編寫貓寧考勤應用注冊模塊的自動化測試
# -*- coding:utf-8 -*-
from uiautomator import device as d
import time
import unittest
class MyTestSuite(unittest.TestCase):
# 初始化工作
def setUp(self):
print "--------------初始化工作"
# 退出清理工作
def tearDown(self):
print "--------------退出清理工作"
#***************************方法**************************************
# 判斷控制項是否存在 & text
def check_controls_exists(self, controls_text):
if d(text=controls_text).exists:
return 1
else:
return 0
# 判斷按鈕是否置灰 & text & clickable
def check_controls_click_text(self, controls_text):
if d(text=controls_text).info.get("clickable") is True:
return 1
else:
return 0
#assertIn(a, b) a in b
def check_ainb(self,resourceid,b):
if d(resourceId=resourceid).info.get("text") in b:
return 1
else:
return 0
#***********************************************************
# 注冊模塊
def test_Aregister(self):
try:
time.sleep(2)
#貓寧考勤開啟全新時代
self.assertEqual(self.check_controls_click_text("注冊"),1,u"貓寧考勤開啟全新時代")
# 貓寧考勤開啟全新時代--》點擊注冊按鈕進入注冊貓寧界面
d(text="注冊").click()
time.sleep(3)
#注冊貓寧界面
self.assertEqual(self.check_text("com.isentech.attendancet:id/regis_phone","請輸入手機號碼"),
1,u"注冊頁面-》請輸入手機號碼")
self.assertEqual(self.check_text("com.isentech.attendancet:id/regis_verifycode","請輸入驗證碼"),
1,u"注冊頁面-》請輸入驗證碼")
self.assertEqual(self.check_controls_click_text("獲取驗證碼"), 0,u"注冊頁面-》獲取驗證碼")
self.assertEqual(self.check_controls_click_text("《中科愛訊服務協議》"), 1,u"注冊頁面-》《中科愛訊服務協議》")
self.assertEqual(self.check_controls_click_text("注冊"), 0,u"注冊頁面-》注冊")
time.sleep(2)
#《中科愛訊服務協議》
d(text="《中科愛訊服務協議》").click()
time.sleep(2)
self.assertEqual(self.check_ainb("com.isentech.attendancet:id/title","服務協議"), 1,u"注冊頁面-》服務協議")
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/title_back").click()
time.sleep(1)
#手機號不輸入是否能注冊
d(text="注冊").click()
time.sleep(3)
# 手機號只輸入1個數字是否能注冊&只輸入1個數字是否能獲取驗證碼
d(resourceId="com.isentech.attendancet:id/regis_phone").set_text("1")
self.assertEqual(self.check_controls_click_text("獲取驗證碼"), 0)
time.sleep(1)
d(text="注冊").click()
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_phone").clear_text()
time.sleep(1)
#只輸入5個數字是否能獲取驗證碼
d(resourceId="com.isentech.attendancet:id/regis_phone").set_text("11111")
self.assertEqual(self.check_controls_click_text("獲取驗證碼"), 0)
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_phone").clear_text()
time.sleep(1)
#只輸入手機號是否能注冊
d(resourceId="com.isentech.attendancet:id/regis_phone").set_text(phone_number)
self.assertEqual(self.check_controls_click_text("注冊"), 0)
time.sleep(1)
d(text="注冊").click()
time.sleep(1)
#輸入正確的驗證碼&獲取驗證碼是否高亮
d(resourceId="com.isentech.attendancet:id/regis_verifycode").set_text("5648")
time.sleep(1)
self.assertEqual(self.check_controls_click_text("獲取驗證碼"), 1)
time.sleep(2)
#密碼只輸入1個數字是否能注冊&注冊按鈕是否高亮
d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("1")
d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("1")
time.sleep(1)
self.assertEqual(self.check_controls_click_text("注冊"), 0,u"密碼只輸入1個數字是否能注冊")
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_pass").clear_text()
d(resourceId="com.isentech.attendancet:id/regis_passAgain").clear_text()
time.sleep(1)
#輸入不相同的密碼是否能注冊
d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("123456")
d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("12345")
time.sleep(1)
self.assertEqual(self.check_controls_click_text("注冊"), 0,u"輸入不相同的密碼是否能注冊")
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_pass").clear_text()
d(resourceId="com.isentech.attendancet:id/regis_passAgain").clear_text()
time.sleep(1)
#輸入正確的密碼是否能注冊&我已同意是否打鉤
d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("123456")
d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("123456")
time.sleep(1)
self.assertEqual(self.check_controls_click_resourceId("com.isentech.attendancet:id/regis_agree"), 1)
self.assertEqual(self.check_controls_click_text("注冊"), 1)
time.sleep(2)
d(text="注冊").click()
time.sleep(8)
except Exception, e:
print u"Error: 注冊模塊有問題\n", e
def test_app():
test_unit = unittest.TestSuite()
test_unit.addTest(MyTestSuite("test_Aregister"))
if __name__ == "__main__":
# 測試app
unittest.main()
② 史上最強,Python3+Selenium3+PO+Yaml+DDT自動化測試框架...
本文介紹一種Python3 + Selenium3 + PO + Yaml + DDT自動化測試框架,該框架能夠滿足日常測試工作的需求。
採用Page Object模式,將頁面定位與業務操作分離,便於維護測試腳本。通過Yaml文件管理頁面元素與測試用例數據,實現元素與數據的靈活修改,提高測試靈活性。框架採用分層設計,包括基礎類、業務層、用例層和框架層,分別負責操作封裝、頁面對象實現、功能測試和流程支撐,確保模塊互不影響,便於靈活組裝。
編寫測試用例遵循以下步驟:首先,在testyaml目錄下創建頁面對象Yaml文件,定義頁面元素;其次,在testdata目錄下創建數據文件,提供測試用例參數;然後,在page_obj目錄下編寫頁面對象類,實現頁面操作邏輯;最後,在testcase目錄下編寫測試用例,利用DDT讀取Yaml數據,執行測試流程。
遵循上述方法,測試用例的編寫簡單高效。執行測試框架後,將獲得實際結果。本框架適合Python編程學習、介面自動化、Web自動化和App自動化項目實踐,同時提供簡歷撰寫指導、測試開發DevOps體系、常用自動化測試工具、JMeter性能測試等內容,幫助您實現從入門到精通的全棧自動化測試技能。
不要害怕失敗,每一次努力都是成功的鋪墊,堅持與勇氣是實現夢想的關鍵。在測試與開發的道路上,不斷挑戰自我,超越極限,您將收獲無限可能,創造屬於自己的輝煌。
面對挑戰與困境,保持信念與勇氣,用汗水澆灌夢想。相信自己的力量,堅持不懈,成為無人能及的奮斗者,創造屬於自己的非凡人生。
無論經歷多少艱辛與挫折,始終堅信,保持信念與勇氣,您將成為無人能及的奮斗者,創造屬於自己的輝煌。
③ adb+uiautomator+Python濡備綍瀹炵幇鑷鍔ㄥ寲嫻嬭瘯錛
鑷鍔ㄥ寲嫻嬭瘯鍦ˋndroid騫沖彴涓婂彲浠ヤ嬌鐢ˋDB錛圓ndroid Debug Bridge錛夈乁IAutomator鍜孭ython鏉ュ疄鐜般備互涓嬫槸鍩烘湰鐨勬ラわ細
瀹夎匒DB鍜孶IAutomator Viewer錛
紜淇滱DB宸插畨瑁呭苟閰嶇疆濂紸ndroid璁懼囩殑榪炴帴銆
UIAutomator Viewer鐢ㄤ簬鏌ョ湅鍜屽垎鏋怉ndroid搴旂敤鐨刄I緇撴瀯銆
緙栧啓UIAutomator鑴氭湰錛
浣跨敤UIAutomator Viewer鍒嗘瀽搴旂敤鐨刄I緇撴瀯錛屾壘鍒伴渶瑕佽繘琛岃嚜鍔ㄥ寲嫻嬭瘯鐨勫厓緔犮
緙栧啓UIAutomator鑴氭湰錛屼嬌鐢↗ava鎴朘otlin緙栧啓錛屼互妯℃嫙鐢ㄦ埛涓庡簲鐢ㄧ殑浜や簰銆
浣跨敤Python榪涜孉DB鎿嶄綔錛
鍒╃敤Python鐨剆ubprocess妯″潡鎵ц孉DB鍛戒護錛屼笌璁懼囪繘琛屼氦浜掞紝濡傚畨瑁呭簲鐢ㄣ佸惎鍔ㄥ簲鐢ㄧ瓑銆
鏁村悎Python鍜孶IAutomator鑴氭湰錛
浣跨敤Python鐨剆ubprocess妯″潡璋冪敤UIAutomator鑴氭湰錛屼互鎵ц孶I鑷鍔ㄥ寲嫻嬭瘯銆
澶勭悊嫻嬭瘯緇撴灉錛
鍦≒ython鑴氭湰涓娣誨姞閫昏緫錛屼互澶勭悊鍜屽垎鏋怳I鑷鍔ㄥ寲嫻嬭瘯鐨勭粨鏋溿
鍙浠ヤ嬌鐢ㄦ祴璇曟嗘灦濡俻ytest鎴杣nittest鏉ョ粍緇囨祴璇曠敤渚嬪拰鐢熸垚鎶ュ憡銆
浠ヤ笅鏄涓涓綆鍗曠殑Python鑴氭湰紺轟緥錛屽叾涓浣跨敤subprocess璋冪敤UIAutomator鑴氭湰錛
import subprocess
# 瀹氫箟UIAutomator鑴氭湰鏂囦歡璺寰
uiautomator_script = "path/to/uiautomator_script.jar"
# 鎵ц孶IAutomator鑴氭湰
subprocess.run(["java", "-jar", uiautomator_script])
璇鋒敞鎰忥紝涓婅堪紺轟緥涓鐨剈iautomator_script.jar搴旀浛鎹涓哄疄闄呯殑UIAutomator鑴氭湰鏂囦歡璺寰勩傛ゅ栵紝紜淇濊懼囧凡榪炴帴騫跺勪簬璋冭瘯妯″紡銆
④ 如何使用python做android的自動化測試
目前大家對Python都有一個共識,就是他對測試非常有用,自動化測試里Python用途也很廣,但是Python到底怎麼進行自動化測試呢?今天就簡單的向大家介紹一下怎麼使用Python進行自動化測試,本文只是自己的一點點分享,若有錯誤,請大家多多批評指正。這里主要介紹的是一些Python測試的框架
1、單元測試
a、unittest :Python自帶的單元測試框架
b、pyunit:Junit的Python版本
2、使用Pyhon進行Windows GUI測試
這部分的功能主要就是和大家平時使用的QTP類似。在Windows下我們可以使用pywinauto這個開源的框架:
來個小例子:
app.Notepad.MenuSelect("Help->About Notepad")
app.AboutNotepad.OK.Click()
app.Notepad.Edit.TypeKeys ("pywinauto Works!", with_spaces = True)
呵呵,強大吧
3、使用Python進行Web自動化測試
使用Python進行Web自動化測試的工具有很多,這里就向大家推薦一下我比較熟悉的Selenium(Web Driver)吧。
⑤ Selenium+Python做web端自動化測試框架與實例詳解教程
面對業務空閑期,我利用Selenium與Python構建了一個web端自動化測試框架,旨在提升測試效率。在此過程中,我結合網路資源,雖然初學者身份面臨諸多挑戰,但框架已基本完成,現將編寫過程和關鍵模塊分享,以便後續學習和回顧。
自動化測試的核心是編寫腳本讓軟體自動運行,檢測問題,替代手動測試。框架設計通常包括幾個關鍵模塊:
common:存放通用方法,如定位元素的函數。
data:存儲文件信息,如測試數據和配置文件。
logs:記錄程序運行的日誌。
picture:存放截圖信息。
report:生成測試報告。
test_case:編寫具體的測試用例,遵循測試用例命名規則(以test開頭)。
conf.ini和readconf.py:存儲配置信息,注意Python版本差異。
在搭建過程中,遇到的難題包括讀取XML文件和理解字典傳遞。例如,通過config_db將字典參數化傳遞。舉個例子,kwargs={'a':1, 'b':2, 'c':3}等同於test(a=1, b=2, c=3)。db模塊主要負責SQL語句的讀取和執行。
data模塊中的xml文件主要用於UI測試,test_data.xlsx則存儲用戶信息和URL。logs記錄程序運行時的詳細信息,picture存放測試過程中的截圖,report則用於存放測試報告的輸出。
雖然每個項目可能需要定製化模塊,但以上所述框架適用於大多數web UI和介面自動化測試。對於新手來說,這些模塊提供了基本的框架參考。
⑥ 如何用python做自動化測試
當然可以
1、編寫Python版本的minicom,這個是自動化測試日誌記錄的需要
用於控制串口輸出的字元顏色,高亮顯示出錯信息,方便開發者在線調試問題
2、控製程式控制電源、程式控制開關,這些可以自動化測試的硬體基礎
3、寫整套測試框架,控制整個測試交互流程,Case管理等等
Python運行起來效率沒那麼高,但是對於編寫來說是非常高效的。
⑦ 自動化腳本怎麼寫
引流腳本,其實簡單的來說,就是模擬人的自然行為,實現各種點擊,發送文字,打字等等功能。
即不需要人工去干擾,也不需要什麼控制器去控制,每天24小時,根據事先設計的指令,完成指定的任務。
一個成熟的腳本 ,可以幾十 ,幾百台手機同步運行 。
自動化腳本穩定性如何,如果涉及到一些比較敏感的業務,會不會封號呢??那麼應該如何正確的使用腳本。
目前比較好的腳本設計語言要數 按鍵精靈,分PC版和手機版本,當然也有其他的好的 自動化腳本語言。
比如 autoJS ,nodeJS等等 ,
目前基本所有的 腳本設計語言,都可以免ROOT執行 ,這個也是為了避免大型APP檢測。很多APP
都會檢測,手機是否已經被ROOT,如果已經Root ,則直接封號 ,或是限制流量等等,這樣就失去了 自動化的意義了 。
一:自動化腳本穩定不穩定?
其實設計 一個 自動化腳本 ,隨便一個 入門級程序員都可以 ,甚至不會開發的,都可以見到的開發一些腳本。
特別是按鍵精靈,支持中文 開發 ,太給力了 。
而且一般通過按鍵精靈編寫的 ,都是非常穩定的 ,因為這個開發團隊經歷了 十多年的改進,完善 ,已經非常的值得讓人信賴,
少有的良心軟體之一,不過最近也開始收費,適當收費,個人覺得也是合理的 ,因為別人也是花費大量的人力,財力 。
二:正確使用自動化腳本的方法是什麼?
不管任何一個腳本,他的最終的目標就是可以讓一些復雜的操作,可以根據事先設計的軌跡進行運行 ,至於是否封號,
這個並不屬於腳本需要實現的范圍,所以很多人使用腳本 ,導致封號,或是效果差,
就怪罪腳本不行,這個是完全不合理的 。
大多封號,都是有些用戶24小時發送廣告,生怕成本賺不回來,而且大部分都是採用模擬器的方式,
當用戶被大量騷擾,平台檢測出來你使用同樣的一個硬體環境,大量刷 ,
所以很多時候 ,我們還是得老實點 ,不停更換賬號 ,適量發送,多從平台,從用戶角度出發,才能減低封號率。
如何解決問題,讓工具為我們服務?
既然清楚,分析了真實原因 ,自然就要開始著手解決問題 ,相信解決問題的方法總比問題多。
每天我們不是在解決問題就是在解決問題的路上。
既然腳本無法解決一機一號問題 ,就得著手從其他的途徑解決這個問題 。
這里介紹一款工具 ,可以完美解決一機一號問題 。
廢話就不多說 ,可以詳細參考下面的視頻
https://www.bilibili.com/video/BV1fK411A7DD
看完這個文章介紹,我們就可以實現,將手機根據自己的需要 ,模擬出一個獨一無二的手機
功能非常的齊全 ,可以進行虛擬的GPS定位 ,隨機mac IME編碼等等 ,內置大量主流手機 。
然後配合自動化腳本 ,就可以實現批量的自動化操作,同時也可以很好的避免封號 ,
比如批量轉發視頻,或是自動點贊,評論 ,回復等等 ,
通過加大自己作品曝光量,自然對你感興趣的就會關注你,粉絲會慢慢積累,
在運營中,要做好方向規劃,利用好腳本 ,自然不管你做什麼事,都會得心應手 。