Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
跨平臺的UI自動化框架,適用于游戲和App
從官網https://airtest.netease.com 開始上手吧
Android | iOS | Windows | Unity | Cocos2dx | 白鷺引擎 | 微信小程序 |
使用 pip 安裝Airtest框架
pip install -U airtest
在Mac/Linux系統下,需要手動賦予adb可執行權限
# 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
如果你需要使用GUI工具,請從 官網(https://airtest.netease.com) 下載AirtestIDE。
完整的Airtest文檔請看 readthedocs。
Airtest希望提供平臺無關的API,讓你的自動化代碼可以運行在不同平臺的應用上。
from airtest.core.api import *
# 通過ADB連接本地Android設備
init_device("Android")
# 或者使用connect_device函數
# connect_device("Android:///")
connect_device("Android:///")
install("path/to/your/apk")
start_app("package_name_of_your_apk")
touch(Template("image_of_a_button.png"))
swipe(Template("slide_start.png"), Template("slide_end.png"))
assert_exists(Template("success.png"))
keyevent("BACK")
home()
uninstall("package_name_of_your_apk")
更詳細的說明請看 Airtest Python API 文檔 或者直接看 API代碼 。
使用AirtestIDE你可以非常輕松地錄制一個自動化腳本并保存為 .air 目錄結構。 Airtest命令行則讓你能夠脫離IDE,在不同宿主機器和被測設備上運行自動化腳本。
平凡·廣東際唐律師事務所創始人
深圳市律師協會刑民交叉法律專業委員會主任
廣東省律師協會刑民交叉法律專業委員會副主任
在公安部2019年30號文《公安機關涉案槍支彈藥鑒定工作規定》(下稱《規定》)的規定中,明確指出:“本規定所稱槍支散件,是指專門用于組成槍支的主要零部件。”與30號文同步的《公安機關涉案槍支彈藥鑒定工作規定》技術說明中提到:“此次修訂增加了對槍支散件定義的說明,明確認定的槍支散件應為槍支的專用散件且為主要零部件。槍支的主要零部件是指對槍支性能具有較大影響的零部件,包括槍管、套筒、槍身以及閉鎖、供彈、退殼、擊發、發射等主要機構中起主要功能的零部件。實踐中,認定的槍支散件一般不包括以壓縮氣體為動力發射球形彈丸且槍口比動能較低(如低于11焦耳/平方厘米)的槍支散件”。理解上述規定的要旨和司法實踐意義在于以下方面:
槍支散件必須同時滿足2個條件,缺一不可:
1、專用性
所謂專用性,即應為槍支的專用散件。理解專用散件這四個字,需要先掌握槍支的概念。《規定》條文:“本規定所稱槍支,是指符合《中華人民共和國槍支管理法》第四十六條之規定,以火藥或者壓縮氣體等為動力,利用管狀器具發射金屬彈丸或者其他物質,足以致人傷亡或者喪失知覺的各種槍支。槍支一般應具備槍身、槍管、擊發機構、發射機構等。”
對應拆解專用散件,可以是以“壓縮氣體為動力”(下稱氣動)的槍支專用,也可以是以“火藥動力”(下稱火藥動力)的槍支專用。因此,我們認為,以上拆解對應的司法實踐意義首先在于:在確認是否專用性的問題上,鑒定樣本用槍或有關槍支參考資料,必須保證其充足性、全面性、客觀性。也就是說,鑒定機構必須通過科學的鑒定方式,科學的鑒定程序,充分掌握特定案件的疑似槍支零部件在鑒定當下可具體應用的全部槍型的事實,甚至于要重點注意“氣動”、“火藥動力”的區別,尤其是在遇到疑似槍支零部件并非中國境內槍型時,尤其要注意這一點。因為,根據中國有關槍支的現行法律規定,動力不同,不但可能涉及到具體人員的量刑輕重,還可能涉及到犯罪有無。
其次,值得探討的另一層面是,槍支散件的專用性,也要注意是否特定案件的疑似槍支零部件,在事實層面同時也是用在仿真槍上的問題。尤其是特定零部件具體的應用領域和市場是在境外槍械市場時,如果事實上某些零部件就是同時售賣被用在氣體或火藥動力的槍支上或者仿真槍上,是這些槍型共用的零部件,則鑒定該如何在此事實基礎上,客觀、合法的呈現鑒定結論,還特定案件涉案人員一個客觀、全面、合法的鑒定結論,就是值得深入思考和論證的問題了。
再次,討論專用性的另一司法實踐意義在于:《規定》的技術說明一文中已經明確指出的:“實踐中,認定的槍支散件一般不包括以壓縮氣體為動力發射球形彈丸且槍口比動能較低(如低于11焦耳/平方厘米)的槍支散件,以及民用市場上可合法任意購買且未經改造的機械或電子產品等通用零部件,如銷釘、螺絲、彈簧等。也即,假如疑似槍支零部件事實上是用于以壓縮氣體為動力發射球形彈丸且槍口比動能較低(如低于11焦耳/平方厘米)的槍支散件,鑒定機構就一般不應認定為槍支散件。
最后,《規定》的技術說明一文中也已經明確指出:“民用市場上可合法任意購買且未經改造的機械或電子產品等通用零部件,如銷釘、螺絲、彈簧等”,也不屬于槍支散件。以螺絲為例。螺絲由于具體槍型不同,也區分不同功能,談及其是否具有專用性的另一個要求是其是否為主要零部件,在中國的司法環境中,這取決于鑒定。畢竟,即便具有了專用性但不是主要的零部件,也不會被認定為槍支散件。
2、主要性
《規定》條文:“本規定所稱槍支散件,是指專門用于組成槍支的主要零部件”,明確認定的槍支散件應為槍支的專用散件且為主要零部件。槍支的主要零部件是指對槍支性能具有較大影響的零部件,包括槍管、套筒、槍身以及閉鎖、供彈、退殼、擊發、發射等主要機構中起主要功能的零部件。
談及主要性,首先要注意的就是《規定》的技術說明一文中明確載明的:“鑒于近年來涉案槍支種類發生很大變化,各類新型槍支和槍支散件層出不窮,認定的槍支散件包括但不限于《關于槍支主要零部件管理有關問題的批復》(公治〔2014〕110號)中列舉的槍支主要零件。”換句話說,是否主要的問題,按照現行的法律規定,由鑒定機構具體問題具體分析了。筆者認為,這是這兩年來的有關涉槍案件判罰在媒體上爭議不斷的主要原因。
武器學,是一門科學,科學是客觀事實和客觀存在,不因人的意志而改變。我國自動武器學科的泰斗,早年就建立了完善的學科理論和學術體系,明確指出,閉鎖,供彈,退殼,擊發,發射,是槍械的5大系統,槍支的主要零部件,隸屬于這5大系統。公安部2019年30號文以及技術說明中,所提到的閉鎖、供彈、退殼、擊發、發射, 即源自于此。實踐證明,基于客觀事實和學科理論的鑒定,是經得起時間和歷史檢驗的,反之,基于主觀意識和個人判斷的鑒定,注定是站不住腳的。我們認為,有關鑒定機構和從業人員,需要起碼具有武器學理論知識和專業背景,在查閱有關鑒定人員的資質資格時,不妨多加注意具體鑒定人員的畢業院校、教育背景和鑒定實踐經驗。
按照規定,槍支的主要零部件是指對槍支性能具有較大影響的零部件,包括槍管、套筒、槍身以及閉鎖、供彈、退殼、擊發、發射等主要機構中起主要功能的零部件。看文字似乎很好理解主要二字,但具體到特定案件當中,基本上要認定是否主要,完全是由特定案件的鑒定機構說了算,可能即便老百姓看過了鑒定,也可能還是不明白為什么主要。但為了方便理解,如何認知“主要”和尊重“主要”,我們以“拉柄”和“助推器”為例:來拆解是否主要的問題,供大家參考討論:
所謂的“拉柄”,又名“拉機柄”,俗稱“拉鉤”。
(名稱:拉柄)
(名稱:拉柄)
(名稱:拉柄)
所謂的“拉柄”,我們認為:不是槍支主要零部件,理由如下:
(1)從功能和作用看:在仿真游戲槍以及其他各類槍型中,拉柄是拉動槍機運動的鉤子,槍機是擊發機構的主要部件,拉柄只是拉動槍機運動的一個輔助部件,作用和地位,完全不可與槍機相提并論,屬于槍支的輔助配件。
(2)從特征看:所謂的拉柄,不具備槍支散件主要性的特征。早期的 AR15槍支,并沒有拉柄,槍支仍然正常工作,仍然能打響,事實可見拉柄不是槍支缺一不可的零部件,拉柄不符合2019年30號文及其技術說明對槍支主要零部件的定義,不應是槍支主要零部件。
如下圖:
(名稱:早期AR15槍型部分外觀圖)
(名稱:早期AR15上機匣)
(名稱:早期AR15槍型部分外觀圖)
(3)就材質而言,槍機屬于高強度鋼材,拉柄屬于鋁合金,拉柄拉動槍機運動,產生摩擦,拉柄材質較軟所以槍機不會被磨損,但是如果拉柄也是鋼材,那么槍機和拉柄都會同時磨損。隨著拉柄逐漸地磨損,到達一定的數量,拉柄就會報廢,需要更換新的,因此有一定的使用壽命,其明顯屬于耗材性質,故拉柄屬于槍支的輔助配件。
(名稱:斷裂的拉柄)
(名稱:磨損的拉柄)
加之,拉柄,網絡數據檢索可見:廣泛應用于氣體為動力的比動能較低的仿真游戲槍上,不具備槍支散件專用性的特征,不是槍支主要零部件。例如,在美國市場熱銷的WE TECH 公司以氣體為動力的仿真游戲槍 ,詳細公司網站和產品信息如下:
網址:
https://www.weairsoft.com/we-m4a1-gbbr-tan.html
(名稱:WE TECH 公司 WE 888 型 仿真游戲槍)
(名稱:WE TECH 公司 WE 888 型 仿真游戲槍)
(名稱:WE TECH 公司 WE 888 型 仿真游戲槍)
(名稱:WE TECH 公司 WE 888 型 仿真游戲槍)
公開網絡視頻如下:
(視頻編號 ,:IMG_9812.MOV)
所謂的“助推器 ”:
(名稱:助推器)
(名稱:助推器)
助推器不是槍支主要部件,理由如下:
(1) 從功能和作用看,在仿真玩具槍及其他各類槍型中,當槍機內部灰塵較多,摩擦力較大時,槍機不能運動到工作位置,需要手按助推器,幫助槍機往前運動。助推器,也是輔助槍機運動的部件,屬于槍機的輔助部件,不是槍支的主要零部件。
(2)從助推器這一名稱看,并不在《輕武器術語》(GJB 5236-2003)、《民用槍械術語》(GB/T 14658-1993)里面,這些國家標準的文獻中也只有槍機,沒有助推器,助推器不在五大機構之內,不屬于槍支的主要零部件。
(3)所謂的助推器,不具備槍支散件主要性的特征。早期的AR15槍械,是沒有助推器的,槍支仍然能正常工作,仍然能打響,可見助推器不是槍支缺一不可的零部件,助推器不符合2019年30號文及其技術說明對槍支主要零部件的定義,因而,助推器不是槍支主要零部件。
(名稱:早期AR15外觀圖 )
加之,所謂的助推器,也不具備槍支散件專用性的特征。網絡數據檢索可見,其廣泛應用于氣體為動力的仿真游戲槍上,不符合2019年30號文及其技術說明對槍支零部件的專業性的特征,不具備槍支散件專用性的特征要求,不是槍支主要零部件。
內容來源 | 劉平凡律師 廣東際唐律師事務所
本期編輯 | 際唐新媒體小編
版權聲明 | 本文屬于原創文章,轉載需注明作者姓名及出處!
irtest是網易出品的一款基于圖像識別和poco控件識別的一款UI自動化測試工具。Airtest的框架是網易團隊自己開發的一個圖像識別框架,這個框架的祖宗就是一種新穎的圖形腳本語言Sikuli。Sikuli這個框架的原理是這樣的,計算機用戶不需要一行行的去寫代碼,而是用屏幕截屏的方式,用截出來的圖形擺列組合成神器的程序,這是Airtest的一部分。??另外,Airtest也基于poco這個U控件搜索框架,這個框架也是網易自家的跨平臺U測試框架,原理類似于appium,通過控件的名稱,id之類的來定位目標控件,然后調用函數方法,例如click(),swip()之類的方法來對目標控件進行點擊或者是操作。我使用Airtest而不適用appium主要是因為Airtest環境搭建非常方便,基本上安裝后就把所有需要的工具都集成了,包括python和adb,Airtest中的Python和本機的Python是不一樣的,所以要在本機運行還需要額外安裝Python庫:pip install poco。因為Airtest是網易開發的,所以擁有比較友好的文檔和教程。
官方文檔
Airtest快速上手教程 https://airtest.doc.io.netease.com/
airtest-ide教程 https://airtest.readthedocs.io/zh_CN/latest/README_MORE.html#example
airtest教程 http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/1_quick_start.html
這次要寫的一個例子是抖音極速版賺金幣的簡單薅羊毛例子,非常簡單,主要是為了使用Airtest。
https://airtest.netease.com/下載對應平臺的安裝包,安裝完后正常啟動即可
打開Airtest,在右側點擊刷新ADB,會出現已經連接到電腦的機器(一定要打開USB調試模式),如果沒有的話,就重啟ADB,再進行刷新。出現連接機器后,在connect后面的下拉列表出現三個選項:Use javacap、Use ADB orientation、Use ADB touch。為了不出現莫名其妙的問題,最好全部選中,然后點擊connect連接,就能顯示出系統桌面。
Airtest在執行的過程中,會向手機安裝幾個軟件:Yosemite(一種輸入法,主要是執行輸入文字)、pocoservice-debug(執行Airtest發來的命令),在連接真機的過程中,報了一個錯誤Failure [INSTALL_FAILED_OLDER_SDK],手機版本太低,不能安裝數據包。我有一個古董機,512運存的,Android版本是4.3,所以測試的時候一定要注意Android版本哦
這一篇我們主要不是講Airtest教程,所以不進行詳細講解。這里我推薦一個非常好的學習網站--嗶哩嗶哩,就是這個二次元編程網站。上面有很多詳細的視頻教程,花一個小時看一下,再把官方教程過一遍,就差不多了。我們就以實例代碼進行簡單講解。代碼如下:
from airtest.core.api import *
from airtest.cli.parser import cli_setup
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
class DouYin:
def __init__(self):
if not cli_setup():
auto_setup(__file__, logdir=True, devices=[
"Android://127.0.0.1:5037/emulator-5554?cap_method=JAVACAP&&ori_method=ADBORI&&touch_method=ADBTOUCH"
])
self.poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
size = self.poco.get_screen_size()
self.width = size[0]
self.height = size[1]
def VisitHome(self):
self.poco(text="抖音極速版").click()
# 進入短視頻頁面后,查找推薦元素是否存在
self.poco(name='com.ss.android.ugc.aweme.lite:id/amh').wait(30)
# 找到推薦元素表示已經進入首頁,但是視頻加載需要一些時間,這里等待5秒
sleep(5)
try:
# 初次打開可能會出現青少年模式選項
self.poco(text='我知道了').click()
except:
pass
def LoopMove(self):
start_pos = (0.5 * self.width, 0.8 * self.height)
end_pos = (0.5 * self.width, 0.2 * self.height)
while True:
# 從底部滑到上面,切換視頻
swipe(start_pos, end_pos, duration=1)
# 每個視頻觀看20秒
sleep(20)
if __name__ == '__main__':
douyin = DouYin()
douyin.VisitHome()
douyin.LoopMove()
在使用py腳本運行時,如果是Linux或者macOS的用戶,請注意看運行結果是不是有報錯,提示adb沒有運行權限。
官方文檔已經給我們提示過了
cd /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac
chmod +x adb
主要是auto_setup中連接設備的配置,官方文檔中這樣解釋
我們在連接中增加了參數設置cap_method、ori_method、touch_method,分別對應工具上的三個選項,不設置連接會出問題。
get_screen_size獲取屏幕大小,這樣對于不同的設備,不同的分辨率,滑動距離都是一樣的。poco(text="抖音極速版").click()搜索屏幕上的“抖音極速版”元素,點擊打開。要保證抖音在首頁顯示,如果不在首頁要做滑動處理。sleep(5)視頻加載需要時間,所以這里我們靜候5秒swipe(start_pos, end_pos, duration=1)執行滑動操作,設置起點和終點以及滑動時間
然后就可以一直薅羊毛了,各種短視頻都可以,當然安裝完APP后,先手動打開登陸一下軟件更好,這樣我們的自動化操作就不需要做這些步驟了。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。