该微信群已满员。请联系Xixian Liang,邮箱 xixian@stu.ecnu.edu.cn,并附上你的微信号或二维码以便邀请入群。
https://github.com/ecnusse/Kea2
</br>
Kea2是一个易用的移动应用模糊测试工具。其核心创新点是能够将自动化UI测试与脚本(通常由人工编写)融合,从而赋予自动化UI测试以人类智能,有效发现崩溃错误及非崩溃功能(逻辑)错误。
Kea2目前基于Fastbot(一款工业级自动化UI测试工具)及uiautomator2(一款易用且稳定的Android自动化库)进行构建。Kea2目前支持Android应用。
特性 1(查找稳定性问题):集成了Fastbot的全部能力,用于压力测试和查找稳定性问题(即崩溃错误);
特性 2(自定义测试场景\事件序列\黑白名单\黑白控件1):运行Fastbot时可自定义测试场景(例如测试特定的App功能、执行特定的事件序列、进入指定UI页面、达到特定App状态、将指定Activity/UI控件/UI区域加入黑名单),并且在python脚本语言和uiautomator2驱动的支持下,这些自定义功能具有高度可用性和灵活性;
特性 3(支持断言机制2):在运行Fastbot时支持自动断言,来源于Kea的基于性质的测试理念,用于发现逻辑错误(即非崩溃功能性错误)。
对于特性 2 和 3,Kea2允许你专注于需要测试的App功能,而无需担心如何到达这些功能,只需让Fastbot帮你完成这些工作。这样你的脚本通常会编写得简短、稳健且容易维护,对应的App功能也能够得到更充分的压力测试!
Kea2三大特性的能力对比
特性 1 | 特性 2 | 特性 3 | |
---|---|---|---|
发现崩溃错误 | :+1: | :+1: | :+1: |
发现深层状态中的崩溃错误 | :+1: | :+1: | |
发现非崩溃功能(逻辑)错误 | :+1: |
Kea2(及其理念)已被以下项目使用/集成:
OPay Business — 一款金融支付应用。OPay使用Kea2对POS机和移动设备进行回归测试。
微信iExplorer — 微信内部测试平台
微信支付UAT — 微信支付内部测试平台
DevEco Testing — 华为官方HarmonyOS测试平台
如果你也在使用Kea2,欢迎联系我们并反馈你的意见和问题。
Kea2当前工作流程:
未来,Kea2计划支持:
运行环境:
通过 pip
安装Kea2:
python3 -m pip install kea2-python
通过运行以下命令查看Kea2的选项:
kea2 -h
如果之前已安装Kea2,升级到最新版本:
python3 -m pip install -U kea2-python
如果你使用清华、USTC等镜像站点,可能会升级失败,因为这些站点可能尚未同步最新版本。此时可以尝试手动指定最新版本安装,或者直接使用官方源安装:
pip install kea2-python -i https://pypi.org/simple
。
升级到指定版本(例如0.3.6):
python3 -m pip install -U kea2-python==0.3.6
Kea2连接并运行于Android设备。建议先做快速测试以确保Kea2与你的设备兼容。
连接一台真实Android设备或Android模拟器(只需一台),并运行 adb devices
确保设备已被识别。
运行 quicktest.py
,测试示例应用 omninotes
(在Kea2仓库中以 omninotes.apk
发布)。quicktest.py
脚本会自动安装并短时间测试此示例应用。
在你偏好的工作目录初始化Kea2:
kea2 init
如是首次运行Kea2,此步骤是必需的。
运行快速测试:
python3 quicktest.py
若能看到应用 omninotes
成功运行并被测试,说明Kea2正常工作!
否则请协助提交错误报告,并附上错误信息。谢谢!
利用Fastbot的全部能力对你的App进行压力测试,查找稳定性错误(即崩溃错误);
kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent native --running-minutes 10 --throttle 200
如需了解各选项含义,请参见我们的手册。
使用方式与原始Fastbot的shell命令相似。
查看更多选项请使用:
kea2 run -h
在运行Fastbot等自动化UI测试工具测试你的App时,你可能会发现某些特定UI页面或功能难以到达或被覆盖,原因是Fastbot对你的App缺乏了解。令人欣慰的是,脚本测试擅长解决此类问题。特性 2 中,Kea2支持编写小脚本来指导Fastbot探索我们期望的任意页面,也能使用类似的小脚本在测试过程中屏蔽特定控件。
在Kea2中,一个脚本包含两部分:
假设Privacy
是一个在自动化UI测试中难以到达的页面,而Kea2可以轻松指导Fastbot进入此页面。
@prob(0.5)
# precondition: 当处于页面 `Home`
@precondition(lambda self:
self.d(text="Home").exists
)
def test_goToPrivacy(self):
"""
通过打开`Drawer`,点击`Settings`选项,再点击`Privacy`来引导Fastbot进入`Privacy`页面。
"""
self.d(description="Drawer").click()
self.d(text="Settings").click()
self.d(text="Privacy").click()
@precondition
指定前置条件——当处于Home
页面。Home
页面是Privacy
页面的入口,且Fastbot能轻松到达Home
页面。脚本将在处于Home
页面时被激活,这是借助于唯一控件Home
是否存在来检测的。test_goToPrivacy
中,指定交互逻辑(打开Drawer
,点击Settings
,点击Privacy
)来引导Fastbot进入Privacy
页面。@prob
指定概率(本例中为50%),当处于Home
页面时有50%的概率进行引导,从而允许Fastbot仍有机会探索其它页面。你可以在脚本文件quicktest.py
中找到完整示例,使用命令 kea2 run
在Fastbot上执行此脚本:
# 启动Kea2并加载单个脚本 quicktest.py。
kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent u2 --running-minutes 10 --throttle 200 --driver-name d unittest discover -p quicktest.py
Kea2支持在运行Fastbot时自动断言,用以发现逻辑错误(即非崩溃错误)。为此,你可以在脚本中添加断言。断言失败时,即发现了可能的功能性错误。
特性 3 的脚本包含三部分:
在一个社交应用中,消息发送是常见功能。在消息发送页面,当输入框不为空(即有输入内容)时,send
按钮应始终出现。
针对上述一直应保持的性质,可编写以下脚本验证功能正确性:当消息发送页有input_box
控件时,输入任意非空字符串后,断言send_button
控件应始终存在。
@precondition(
lambda self: self.d(description="input_box").exists
)
def test_input_box(self):
from hypothesis.strategies import text, ascii_letters
random_str = text(alphabet=ascii_letters).example()
self.d(description="input_box").set_text(random_str)
assert self.d(description="send_button").exists
# 我们甚至可以做更多断言,例如,
# 输入字符串应出现在消息发送页面上
assert self.d(text=random_str).exists
这里使用了hypothesis生成随机文本。
你可以用类似特性 2 的命令行运行此示例。
Kea2会在每次测试结束后自动生成详尽的HTML测试报告(位置在output/目录下)。
如果自动生成失败,也可以手动使用命令 kea2 report -p '测试数据所在文件夹路径'
来生成测试报告。
测试报告支持单次测试运行和多次测试会话的合并分析,方便跟踪测试进度和定位问题。
你可以查阅用户手册,包含:
@precondition
、@prob
、@max_tries
);部分Kea/Kea2相关博客(中文):
工业界对Kea2的理解和评价(点击箭头查看详情):
General and Practical Property-based Testing for Android Apps. ASE 2024. pdf
An Empirical Study of Functional Bugs in Android Apps. ISSTA 2023. pdf
Fastbot2: Reusable Automated Model-based GUI Testing for Android Enhanced by Reinforcement Learning. ASE 2022. pdf
Guided, Stochastic Model-Based GUI Testing of Android Apps. ESEC/FSE 2017. pdf
Kea2由ecnusse团队积极开发与维护:
Zhendong Su, Yiheng Xiong, Xiangchen Shen, Mengqian Xu, Haiying Sun, Jingling Sun, Jue Wang, Geguang Pu也积极参与并对项目贡献良多!
Kea2还获得京东等多位工业界专家的宝贵建议和经验分享,感谢字节跳动(Zhao Zhang、Fastbot团队的Yuhui Su)、OPay(Tiesong Liu)、微信(Haochuan Lu,Yuetang Deng)、华为、小米等多方支持,致敬!
不少UI自动化测试工具提供了“自定义事件序列”能力(如Fastbot 和AppCrawler),但在实际使用中存在不少问题,如自定义能力有限、使用不灵活等。此前不少Fastbot用户抱怨过其“自定义事件序列”在使用中的问题,如#209, #225, #286等。 ↩
在UI自动化测试过程中支持自动断言是一个很重要的能力,但几乎没有测试工具提供这样的能力。我们注意到AppCrawler的开发者曾经希望提供一种断言机制,得到了用户的热切响应,不少用户从21年就开始催更,但始终未能实现。 ↩