整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

微信小程序自动化测试工具Airtest

irtest

跨平台的UI自动化框架,适用于游戏和App

快速开始

  • 各种运行: Airtest提供了跨平台的API,包括安装应用、模拟输入、断言等。 基于图像识别技术定位UI元素,你无需嵌入任何代码即可进行自动化。
  • 扩展性: Airtest提供了命令行和python接口,可以很容易地在大规模设备集群上运行。自动生成的HTML报告,包含详细步骤和录屏,让你迅速定位失败点。
  • AirtestIDE: 是一个强大的GUI工具,可以帮助你录制和调试自动化脚本。 AirtestIDE支持了完整的自动化流程:录制脚本->真机回放->生成报告
  • Poco: Poco 框架可以直接访问UI控件,支持主流平台和游戏引擎。通过Python API操作UI控件,可以实现更强大的自动化控制。

从官网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,让你的自动化代码可以运行在不同平台的应用上。

  1. 使用 connect_device 来连接任意Android设备或者Windows窗口。
  2. 使用 模拟操作 的API来自动化你的游戏或者App。
  3. 不要 忘记 声明断言 来验证结果。
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代码 。

用命令行运行.air脚本

使用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。

安装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后,先手动打开登陆一下软件更好,这样我们的自动化操作就不需要做这些步骤了。