AppUI自动化中的图像识别的使用

本文探讨了在AppUI自动化测试中如何利用图像识别技术提高测试效率。图像识别技术,如人脸识别和商品识别,已广泛应用于安全、零售等领域。在自动化测试框架中,图像识别用于解决元素无属性或自定义View识别问题。通过引入图像识别服务,如百度云、阿里云和腾讯云等,可以实现元素定位、操作及结果检测。然而,图像识别存在效率和网络消耗问题,需要结合传统自动化测试策略合理使用。总结了图像识别在业务操作封装、页面元素检测等方面的应用,并强调了其在自动化测试中的优势和局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

人工智能现在使用的越来越成熟了,如人脸识别,图像识别等,在AppUI自动化测试中,也有越来越多的框架或是公司引入图像识别技术来提高自动化测试的执行效率。图像识别,是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对象的技术,是应用深度学习算法的一种实践应用。 现阶段图像识别技术一般分为人脸识别与商品识别,人脸识别主要运用在安全检查、身份核验与移动支付中;商品识别主要运用在商品流通过程中,特别是无人货架、智能零售柜等无人零售领域 。

图像的传统识别流程分为四个步骤:图像采集→图像预处理→特征提取→图像识别。图像识别软件国外代表的有康耐视等,国内代表的有图智能、海深科技等。另外在地理学中指将遥感图像进行分类的技术。

一,测试框架中的图像识别

在我们做 App 自动化测试的时候,会发现很多场景下元素没有 id、content-desc、text 等等属性,并且有可能也会碰到由于开发采用的是自定义 View,View 中的元素也无法识别到,很多的自动化测试框架对此类场景束手无策。Appium 在 V1.9.0 中有给我们带来了针对于图像识别的全新图片元素定位的方法:-image

 

 

具体使用方法可以参考:http://testingpai.com/article/1597824416789

如果是公司自己做二次开发的自动化测试框架,可以根据业务需要自行集成图像识别功能,方便在做AppUI自动化测试时,提高测试效率。

二,收费的图像识别服务

现在越来越多的公司都提供了云服务,在服务的产品当中,都有图像识别服务,如下所示:

 

当前提供图像识别服务的云有:

当你们公司需要引入图像识别服务,来提高AppUI自动化测试效率时,就需要购买相应的服务。当得到对应的Key后,就可以通过调用相应的API来处理图像识别需求,结合AppUI自动化测试框架,处理自动化实施过程中传统框架无法操作的元素识别等操作。

三,APPUI中如何引用图像识别

在做APPUI自动化测试时,常规的做法就是:

(1)引入自动化测试框架,如Appium;

(2)借助于编码语言,通过对App元素的属性,如resouce_id,Xpath,text等属性定位要操作的元素;

(3)根据测试用例的需求,对相应的元素做指定的操作,如:click,send_keys等。

但在自动化测试执行过程中,就会遇到各种问题,如:

(1)被测试App元素属性有变化,属性被开发修改,打包的时候代码混淆从而造成测试用例必须进行维护;

(2)测试用例执行完成,需要检测的内容较多,定位检测元素效率比较低等。

(3)被测App无法获取元素属性,传统定位方法无法定位;

(4)App测试中唤起其他的应用,造成driver需要切换等。

为了解决这样的问题,引入图像识别方法是最优的解决方案,而图像识别解决的App通用操作有:

1,获取页面所有元素,检测需要操作的元素

通过图像识别功能,先将用例执行到需要操作的页面;对当前页面进行截屏,然后调用图像识别功能,识别出当前页面上的所有元素。接下来需要过滤出要操作的页面元素,如,通过元素上的文字筛选元素;通过元素类别,如image,button来区分元素;通过位置来筛选元素,如:元素在屏幕右上角,则判断元素的位置,x大于屏幕的一半,y小于屏幕的三分之一就是要查找的元素。找到要操作的元素后,执行需要的操作即可。

2,通过元素文字操作元素

一个应用无论从元素属性,还是打包混淆来影响自动化测试,但是元素显示的文字内容变化的频率是相对来说要小的多。如果能通过元素的文案来操作元素,将是不错的选择。我们借助于图像识别法,可以识别出元素对应的文字所在的位置,然后使用driver.click(x,y),就可以单击相应位置的元素。此方法可以执行单击元素操作,当然也可以对输入框输入内容。如果对输入框输入内容的话,先单击这个输入框,让其处于激活状态,然后使用driver.sendKeys()输入内容。

3,检测测试结果

当一个测试用例执行完成后,需要检测一下用例的执行情况。此时可以通过封装函数,获取当前页面的所有文字信息,然后检测用例执行效果的关键文字,是否在当前页面?如果在,由认为当前用例执行通过,如果不在则用例执行失败。

当然,如果用例关注的检测点较多,或是关注页面布局,图片信息等,则可以采取图像对比法。我们截取标准的页面显示,然后在执行完用例后,保存当前页面与标准页面做对比,设置相似度,如99%为测试通过,否则为测试失败。但是此方法有一定的问题,不能做兼容性测试,不同的设备显示的内容是不一样的。

4,封装业务操作

在完成了上面的基本元素的图像操作后,就可以根据你要测试的产品的业务逻辑,封装一定的业务函数,从而提高代码的通过性。如下:美团众包的图像识别法进入接单设置功能函数:

/**

* 进入接单设置页

*/

public void enterOrderSetting()

{

if(!checkEleByText("刷新列表"))

{

startWork();

}

Utils.sleep(3000);

clickByText("接单设置");

//处理首次进入的提醒

if(checkEleByText("知道了"))

{

clickByText("知道了");

}

System.out.println("进入接单设置页....");

Utils.sleep(3000);

driver.back();

}

四,AppUI图像识别法使用注意事项

图像识别法虽然可以解决不少AppUI自动化存在的问题,但是我们也需要知道其劣势,合理地与传统的自动化测试框架配合,从而才能达到使我们的自动化测试工程执行效率最好,发挥最佳的使用用。

1,图像识别的效率消耗

在引用语言,框架的图像识别法时,需要先将当前页面进行截图,然后分析图像上的元素,文案信息。无论是什么图像识别算法,都是有一定的效率消耗的,所以不能在测试用例中反复引用图像识别法,要根据业务操作,安排好执行策略,提高效率。

2,图像识别的网络消耗

如果使用的是第三方提供的图像识别服务,识别效率比我们自己的会高一些,但是就会有相应的网络请求。过多的网络请求,也会影响自动化测试的执行效率,同时开通的服务是按次收费的,如果测试安排的不合理,网络和金钱的消耗会非常多。

3,合理结合传统框架与图像识别

在实施AppUI自动化测试时,先分析产品的情况,如果产品变化较小,元素属性清晰,建议首先选择通过元素属性进行定位,如resouce_id。针对元素属性变化较多,页面无法抓取属性(竞对产品),H5页面,跨App的操作,检测元素内容较多,检测对象是图片等情况,就引入图像识别法解决相应的问题。

五,总结

本文介绍了如何在AppUI自动化测试中使用图像识别法,此方法可以降低测试的维护成本,提高测试用例的执行效率。当然,也有一定的限制,可以根据公司的需要,可使用的资源来合理规划你的自动化测试架构设计,将AppUI自动化真正地在业务中使用起来,发挥其有的使用。

### AppUI 自动化测试面试常见问题与最佳实践 #### 一、基础知识类问题 1. **什么是AppUI自动化测试?** - AppUI自动化测试是指通过脚本或其他工具自动验证移动应用界面的功能性和交互性的过程。这种测试可以覆盖各种场景,如登录流程、页面跳转、表单提交等[^1]。 2. **常用的AppUI自动化测试工具有哪些?** - 常用的AppUI自动化测试工具包括但不限于: - **Appium**: 跨平台支持iOS和Android的应用自动化测试框架[^1]。 - **XCUITest**: 苹果官方推出的用于iOS原生应用的自动化测试框架。 - **Espresso**: Google推出的一款专注于Android应用的UI测试框架。 3. **Appium的核心特点是什么?** - Appium是一个开源的跨平台移动端自动化测试框架,支持多种编程语言(Java, Python, Ruby等),允许开发者无需修改应用程序即可进行黑盒测试。 #### 二、技术实现类问题 1. **如何设置Appium环境?** - 设置Appium环境通常涉及以下几个步骤: - 安装Node.js以及Appium Server。 - 配置设备驱动(如ADB对于Android,或者Xcode对于iOS)。 - 使用Desired Capabilities配置目标设备和应用参数[^1]。 2. **Appium中的Desired Capabilities有哪些常用字段?** - Desired Capabilities是一组键值对,用来定义测试会话的具体需求。常见的字段包括`platformName`, `deviceName`, `appPackage`, `appActivity`等。 3. **如何处理弹窗或权限请求?** - 对于Android,可以通过`autoGrantPermissions=true`选项自动授予所需权限;而对于iOS,则需手动编写逻辑来点击授权按钮[^1]。 4. **如何定位元素?** - 元素定位方式多样,可采用ID、XPath、ClassName等方式。推荐优先使用稳定且高效的ID定位策略[^1]。 #### 三、高级技巧类问题 1. **如何设计稳定的测试用例?** - 设计稳定的测试用例需要注意以下几点: - 尽量减少对外部依赖的影响,比如网络状态或第三方服务。 - 添加显式等待机制以应对异步加载的情况。 - 利用Page Object Model (POM)模式提高代码复用性和维护性[^1]。 2. **如何优化测试效率?** - 测试效率可通过以下手段提升: - 行执行多个设备上的测试案例。 - 实施数据驱动测试方法,使单一测试能够适应不同输入条件。 - 结合CI/CD流水线实现持续集成和交付[^3]。 3. **遇到不稳定测试结果时怎么办?** - 如果发现某些测试总是失败或间歇性成功,应仔细排查可能原因,例如是否存在隐式的超时时间不足、资源竞争等问题,调整相应参数设定[^2]。 #### 四、实际操作类问题 1. **能否举一个简单的例子说明如何利用Appium完成一项基本任务?** ```python from appium import webdriver desired_caps = { 'platformName': 'Android', 'deviceName': 'emulator-5554', 'appPackage': 'com.example.app', 'appActivity': '.MainActivity' } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) element = driver.find_element_by_id("login_button") element.click() ``` #### 五、行业趋势与发展前景 1. **未来几年内,AppUI自动化测试领域可能会发生什么变化?** - 移动端AI技术和机器学习模型将进一步融入到自动化测试过程中,从而增强异常检测能力和用户体验评估能力[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值