图像识别自动化android,Android自动化测试

写在开头:Android UI 自动化测试推荐网易的Airtest,也是谷歌推荐的,操作简单,而且基于图像识别根据用户操作界面自动生成Python测试代码

JUnit单元测试

testImplementation 'junit:junit:4.12'

5dfcdb23e101

image.png

5dfcdb23e101

image.png

使用gradle命令进行单元测试gradle test,还可以通过gradle testDebugUnitTest,或者是gradle testReleaseUnitTest,分别运行 debug 和 release 版本的 unit testing

Espresso

黑盒白盒测试区别如下:黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。

Espresso是官方默认引入的,我们先看一下这个白盒测试工具

androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

发个牢骚,看英文文档好费劲,只能用翻译插件一点一点翻译,效率很低,效果还不如看一些相关中文博客,但是毕竟官网全面系统,而且很多技术文档都是英文。希望自己坚持看英文文档,提高英文水平。

当我根据文档书写代码的时候,发现找不到onView方法,双击Shift,发现该方法在Espresso.onView

5dfcdb23e101

image.png

然后执行测试报错java.lang.RuntimeException: No activities found. Did you forget to launch the activity by calling getActivity() or startActivitySync or similar?

解决方法

@get:Rule

var mActivityRule = ActivityTestRule(MainActivity::class.java)

简单介绍一下Rule

一个JUnit Rule就是一个实现了TestRule的类,这些类的作用类似于@Before、@After,是用来在每个测试方法的执行前后执行一些代码的一个方法

@RunWith(AndroidJUnit4::class)

class ExampleInstrumentedTest {

@get:Rule

var mActivityRule = ActivityTestRule(MainActivity::class.java)

@Test

fun useA() {

//EditText输入文字

onView(withId(R.id.et)).perform(replaceText("刘德华"))

val btn = onView(withId(R.id.btn))

println("-------------------$btn")

//验证更新按钮是否显示

btn.check(matches(isDisplayed()))

//点击更新按钮

btn.perform(click())

}

}

这里记录一个遇到的问题:输入中文的时候,由于键盘上没有中文,所以要用replaceText而不是typeText,否则会报错误i.e. current IME does not understand how to translate the string into key events). As a workaround, you can use replaceText action to set the text directly in the EditText field.

单页面测试使用Espresso,多页面测试使用 UI Automator

3.UI Automator

5dfcdb23e101

测试录屏.gif

参考官方文档

在 Android 应用模块的 build.gradle 文件中,您必须设置对 UI Automator 库的依赖项引用

dependencies {

...

androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'

}

示例代码

private const val PACKAGE_NAME = "club.guozengjie.jetpack"

private const val LAUNCH_TIMEOUT = 5000L

@RunWith(AndroidJUnit4::class)

@SdkSuppress(minSdkVersion = 18)

class UIAutomatorTest {

private lateinit var device: UiDevice

@Before

fun startMainActivityFromHomeScreen() {

device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())

device.pressHome()

// Wait for launcher

val launcherPackage: String = device.launcherPackageName

assertThat(launcherPackage, notNullValue())

device.wait(

Until.hasObject(By.pkg(launcherPackage).depth(0)),

LAUNCH_TIMEOUT

)

// Launch the app

val context = ApplicationProvider.getApplicationContext()

val intent = context.packageManager.getLaunchIntentForPackage(

PACKAGE_NAME

)?.apply {

// Clear out any previous instances

addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)

}

context.startActivity(intent)

// Wait for the app to appear

device.wait(

Until.hasObject(By.pkg(PACKAGE_NAME).depth(0)),

LAUNCH_TIMEOUT

)

}

@Test

fun aaa() {

// Type text and then press the button.

device.findObject(

By.res(

PACKAGE_NAME,

"et"

)

).text = "文川雪"

device.findObject(

By.res(

PACKAGE_NAME,

"btn"

)

).click()

device.waitForIdle()

device.findObject(By.res(PACKAGE_NAME, "tv")).click()

}

}

Airtest

Airtest是一款由网易研发并开源的自动化测试框架,官网

官网有详细的文档,这里就不记录了。只想对Airtest说一个字:牛。强烈推荐

SoloPi

SoloPi是一个无线化、非侵入式的Android自动化工具,公测版拥有录制回放、性能测试、一机多控三项主要功能,能为测试开发人员节省宝贵时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何重构“箭头型”代码

本文主要起因是,一次在微博上和朋友关于嵌套好几层的if-else语句的代码重构的讨论(微博原文),在微博上大家有各式各样的问题和想法。按道理来说这些都是编程的基本功,似乎不太值得写一篇文章,不过我觉得很多…

Django博客--4.开发博客文章详情页

文章目录0.思路引导1.设计文章详情页的 URL2.获取文章的URL3.编写 detail 视图函数4.编写详情页模板5.更改主页中跳转详情页的地址链接6.模板继承--抽取base.html7.模板继承--修改 index.html使其继承base.html8.模板继承--修改detail.html使其继承base.html9.结果展示0.思路引…

10、并发容器,ConcurrentHashMap

Java 提供了不同层面的线程安全支持。在传统集合框架内部,除了 Hashtable 等同步容器,还提供了所谓的同步包装器(Synchronized Wrapper),我们可以调用 Collections 工具类提供的包装方法,来获取一个同步的包…

程序员的本质

Computers are useless. They can only give you answers. – Picasso计算机没有什么作用。他们只能告诉你答案。——毕加索很多人(包括我岳母)认为计算机变得如此智能,所以在不久的未来将不再需要程序员。另外一些人认为程序员是天才&#x…

剖析管理所有大数据组件的可视化利器:Hue

欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! 日常的大数据使用都是在服务器命令行中…

Django博客--5.让博客支持 Markdown 语法和代码高亮

文章目录0.前言1.安装 Python Markdown2.在 detail 视图中解析 Markdown3.safe 标签4.代码高亮5.效果展示0.前言 Markdown 是一种 HTML 文本标记语言,只要遵循它约定的语法格式,Markdown 的解析工具就能够把 Markdown 文档转换为标准的 HTML 文档&#…

Diango博客--6.Markdown 文章自动生成目录

文章目录0.思路引导1.在文中插入目录2.在页面的任何地方插入目录3.美化标题的锚点 URL0.思路引导 Markdown 在解析内容的同时还可以自动提取整个内容的目录结构,本文内容将从以下几个方面展开: 1)在文中插入目录; 2)在…

Java中对象和引用的理解

2019独角兽企业重金招聘Python工程师标准>>> 偶然想起Java中对象和引用的基本概念,为了加深下对此的理解和认识,特地整理一下相关的知识点,通过具体实例从两者的概念和区别两方面去更形象的认识理解,再去记忆。12一、对…

android怎样封装,如何封装属于自己的博客网站安卓APP 源码家园

说实话我今天在写这个文章的时候是我使用易语言(E4A\易安卓)的第一天,我也是易小白,但是的确可以用!我为什么写这个文章呢?因为之前我也想封装自己的网站,然后去网上找的在线封装生成APP,果然能封装好了&am…

Diango博客--7.自动生成文章摘要

文章目录0.思路引导1.方法一:覆写 save 方法2.方法二:使用 truncatechars 模板过滤器0.思路引导 博客文章的模型有一个 excerpt 字段,这个字段用于存储文章的摘要。 若在 django admin 后台手动为文章输入摘要,每次手动输入摘要…

特斯拉股价暴跌,疯狂烧钱是否真的能够带来高额回报?

“疯狂烧钱”并不能成为公司持续亏损的理由,反而可能成为公司升级转型的关键所在。 上周三,特斯拉发布第四季度财报,其后特斯拉CEO马斯克在电话会议上表示,特斯拉亏损收窄,营收同比增长88%,但与此同时其首…

Diango博客--8.解锁博客侧栏

文章目录0.思路引导1.[最新文章] 模板标签2.[归档] 模板标签3.[分类] 模板标签4.[标签云] 模板标签5.使用自定义的模板标签0.思路引导 博客侧边栏有四项内容:最新文章、归档、分类和标签云,效果展示如下: 这些内容相对比较固定和独立&…

十五、详述 IntelliJ IDEA 插件的安装及使用方法

正文 首先,进入插件安装界面: Mac:IntelliJ IDEA -> Preferences -> Plugins;Windows:File -> Settings -> Plugins.标注 1:显示 IntelliJ IDEA 的插件分类, All plugins:显示 Inte…

面向数据流的设计方法

面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。 在软件工程的需求分析阶段,信息流是一个关键考虑。通常用数据流图描绘信息在系统中加工和流动的 情况。面向数据流的设计方法定义了一些不同的“映射”,利用这些映射可以把数据流图…

AI研究的盲点:无解的神经网络内在逻辑

论人工神经网络内在逻辑的研究历史及现状。 伴随着大数据,人工智能(AI)在沉寂了多年之后,又迎来了新的高潮。在这场涉及大部分科学的革命中,人工神经网络释放了人工智能(AI)。但科学家们发现&a…

Diango博客--9.归档、分类和标签页

文章目录0.思路引导1.回顾2.归档页面3.分类页面4.标签页面0.思路引导 侧边栏已经正确地显示了最新文章列表、归档、分类、标签等信息,现在来完善归档、分类和标签功能。 当用户点击归档下的某个日期、分类栏目下的某个分类或者标签栏目下的某个标签时,…

android studio1.2.6,1.2.2 使用Android Studio开发Android APP | 菜鸟教程

写在前面本节将介绍如何使用Android Studio开发Android APP,和前面Eclipse ADT SDK搭建Android开发环境一样,本节也只是介绍一些基本东西,深入的,比如快捷键,小技巧等会再另一篇文章中详细地介绍!1.下载A…

UPS开始尝试“货车+无人机”的投递方式,不必再担心快递员离职了

继亚马逊“空中仓库”,无人机送货再现新形式。 作为世界上最大的快递承运商与包裹递送公司,UPS当然也没有放过“送货无人机”这一新颖业务。与亚马逊推出“空中仓库”的理念类似,UPS并没有选择让无人机从仓库直接起飞,而是将之与…

Diango博客--10.交流的桥梁“评论功能”

文章目录0.思路引导1.创建"评论"应用2.设计"评论"的数据库模型3.注册"评论"模型到 admin4.设计“评论”表单5.展示评论表单6.“评论”视图函数7.绑定 URL8.向读者发送是否“评论”成功的状态9.详情页底部显示“评论”内容0.思路引导 本文将创建…

python与android交互,Android客户端与Python服务器端的简单通信

最近在做一个APP,需要与服务器通信,一点一点的尝试,记录一下。本文使用了OkHttp和Flask框架。Android客户端:实现功能输入完点击OK按钮后会toast成功的信息。Python服务端:各部分代码如下:activity_main.xm…