android 自动化测试

article/2025/10/7 14:58:21

Android 谈谈自动化测试

Android自动化测试原来可以这么简单

几款Android 应用自动化测试工具

Android自动化测试探索(一)adb详细介绍 - 周希 - 博客园

移动测试基础 Android:自动化兼容性测试

Android 上一次编写,随处测试

androidStudio版本BumbleBee2021.1.1Patch3

文章日期20220421

android官网测试指南(可能需要梯子)

android 官方测试演示程序

github地址:  https://github.com/android/testing-samples/tree/mastericon-default.png?t=M3C8https://github.com/android/testing-samples/tree/master

测试入门

android测试个人理解分为本地测试和设备模拟测试

本地测试就是不依赖设备或者模拟器,只需要jvm虚拟机在pc上就可以完成的测试.特点是不依赖android框架,可以快速测试

设备模拟测试,指依赖android框架API或者设备服务设备其他应用.测试速度较慢,但是可以完成比本地测试更强大的功能

本地测试的实现多是指Junit测试框架

设备模拟测试,这里使用的是内置的AndroidJunitRunner测试框架

本地测试

参考官方示例

本地测试依赖项

dependencies {// Required -- JUnit 4 frameworktestImplementation 'junit:junit:4.12'// Optional -- Mockito frameworktestImplementation 'org.mockito:mockito-core:1.10.19'}

本地测试代码基础结构


public class CalculatorTest {private Calculator mCalculator;/*** Before注解,测试前的准备工作* 测试框架会优先运行before注解的方法* 该注解方法限制为public*/@Beforepublic void setUp() {mCalculator = new Calculator();}/*** After注解,测试后释放资源工作* 测试框架在运行完test注解方法后最后运行的方法* 同After,限制方法public*/@Afterpublic void tearDown(){mCalculator=null;}/*** Test注解,真正测试的方法* 运行在Before和After之间* 一般运行结果要有断言来设置期望的结果或者异常* assertThat()来设置期望结果* 还有许多更方便的断言库可以选择,配合Junit框架*/@Testpublic void addTwoNumbers() {double resultAdd = mCalculator.add(1d, 1d);assertThat(resultAdd, is(equalTo(2d)));}/*** Test注解,真正测试的方法* 运行在Before和After之间* 一般运行结果要有断言来设置期望的结果或者异常* Test注解内变量expected设置期望的异常*/@Test(expected = IllegalArgumentException.class)public void divDivideByZeroThrows() {mCalculator.div(32d,0d);}}

Mock模拟框架

如果需要依赖其他复杂的组件,但是只是依赖比较简单的功能,可以用Mock模拟框架,来提供一个虚假的对象,定制依赖的功能,从而起到隔离作用

//定义一个依赖context的类
class StringUtil{private Context mContext;public StringUtil(Context context) {mContext = context;}/*** 依赖context返回商店名* @return*/public String getShopId(){return mContext.getString(R.string.settings_merchant_item_merchant_id);}
}//测试StringUtil.getShopId()方法
//runWith加载MockitoJUnitRunner框架入口类
@RunWith(MockitoJUnitRunner.class)
public class MockStringTest {//mock注解标记需要模拟的对象@MockContext mContext;@Testpublic void testGetString(){//mock的方法定义一个模拟规则when(mContext.getString(R.string.settings_merchant_item_merchant_id)).thenReturn("Hello World");//加载模拟类并断言测试StringUtil stringUtil=new StringUtil(mContext);Assert.assertEquals("Hello World",stringUtil.getShopId());}
}

设备模拟测试

参考官方演示程序中AndroidJunitRunnerSample示例

设备模拟测试需要结合Junit测试框架一起使用

依赖项

build.gralde文件android {defaultConfig {...testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}}dependencies{//runner本体androidTestImplementation 'androidx.test:runner:1.1.0'//配合runner使用的Junit库,以及获取context的相关库androidTestImplementation 'androidx.test.ext:junit:1.1.3'// Optional -- rule可用可不用androidTestImplementation 'androidx.test:rules:1.1.0'// Optional -- Hamcrest library 更人性化的断言库androidTestImplementation 'org.hamcrest:hamcrest-library:1.3'// Optional -- UI testing with Espresso UI测试库androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'}

查看一个测试类的代码结构 

/*** JUnit4 unit tests for the calculator logic.* RunWith注解,测试框架入口,不同的框架有不同的入口类,这里是android扩展的Junit4* SmallTest注解,标记测试的大小,按照时间分类,有小测试(<200ms),中等测试(<1000ms),大测试(>1000ms),大测试(>),分片测试(支持测试分片)*/
@RunWith(AndroidJUnit4.class)
@SmallTest
public class CalculatorTest {private Calculator mCalculator;/*** Before注解,测试前的准备工作* 测试框架会优先运行before注解的方法* 该注解方法限制为public*/@Beforepublic void setUp() {mCalculator = new Calculator();}/*** After注解,测试后释放资源工作* 测试框架在运行完test注解方法后最后运行的方法* 同After,限制方法public*/@Afterpublic void tearDown(){mCalculator=null;}/*** Test注解,真正测试的方法* 运行在Before和After之间* 一般运行结果要有断言来设置期望的结果或者异常* assertThat()来设置期望结果* 还有许多更方便的断言库可以选择,配合Junit框架*/@Testpublic void addTwoNumbers() {double resultAdd = mCalculator.add(1d, 1d);assertThat(resultAdd, is(equalTo(2d)));}/*** Test注解,真正测试的方法* 运行在Before和After之间* 一般运行结果要有断言来设置期望的结果或者异常* Test注解内变量expected设置期望的异常*/@Test(expected = IllegalArgumentException.class)public void divDivideByZeroThrows() {mCalculator.div(32d,0d);}}

获取androidApi

插装测试的特点就是可以获取android的Api参数

可以结合UI测试框架,进行UI测试

获取Context参数

//来自androidx.test:monitor库
Context appContext = InstrumentationRegistry.getInstrumentation().getContext();
//来自androidx.test:core库
Context appContext2=ApplicationProvider.getApplicationContext();build.gradle{...
dependencies{//引入android的junit扩展库即可获得上述两个库.此外也是替换runner库中的AndroidJunit4来源androidTestImplementation    "androidx.test.ext:junit:1.1.3"
}
}

结合Espresso框架测试UI


@RunWith(AndroidJUnit4.class)
@LargeTest
public class CalculatorInstrumentationTest {/*** Use {@link ActivityScenario} to create and launch of the activity.*/@Beforepublic void launchActivity() {//加载activity界面,launch方法可以添加Bundle参数来控制activity初始化ActivityScenario.launch(CalculatorActivity.class);}@Testpublic void noOperandShowsComputationError() {final String expectedResult = getApplicationContext().getString(R.string.computationError);//Epresso框架模拟触发控件onView(withId(R.id.operation_add_btn)).perform(click());onView(withId(R.id.operation_result_text_view)).check(matches(withText(expectedResult)));}}

套件测试

假设已经有了很多插桩测试文件,现在希望能够一起有顺序的运行测试文件,Junit框架支持把若干测试类组合起来作为一个套件运行测试

/*** 定义一个套件测试类* 效果是按照添加SuiteClasses中的顺序执行测试类* 1.RunWith中添加入口Suite.class* 2.Suite.SuiteClasses注解中顺序添加要执行的测试类* 3.直接运行该套件测试类* 4.会依次执行每个测试类的before-test-after*/
@RunWith(Suite.class)
@Suite.SuiteClasses({TestSuiteFirst.class,TestSuiteSecond.class,TestSuiteThird.class
})
public class TestSuite {
}


http://chatgpt.dhexx.cn/article/VML95kxZ.shtml

相关文章

手机自动化测试

随着手机被越来越多人使用&#xff0c;移动自动化也是趋势所在。 测试的时间是至关重要的&#xff0c;尤其是移动测试&#xff0c;软件测试生命周期中的手工测试的时间已经影响到了手机抢占最佳市场先机。因此自动化是不可避免的需求。 什么是手机自动化测试? 要回答这个问题&…

App 自动化测试

一、5分钟上手自动化测试——AirtestPoco快速上手 - Airtest Project DocsAirtest Project Docshttps://airtest.doc.io.netease.com/tutorial/1_quick_start_guide/自动化测试工具-Airtest_十一姐的博客-CSDN博客_airtest工具目录一、Airtest介绍与安装二、Airtest基于图像识别…

android 自动化测试工具

Auto.js https://github.com/hyb1996/Auto.js/tree/master/app/src/main/assets/sample 布局范围分析 https://blog.csdn.net/zy0412326/article/details/105140707 免费版auto.js apk 下载 https://zhuanlan.zhihu.com/p/90065914?from_voters_pagetrue&ivk_sa10243…

Github每日精选(第65期):手机自动化测试工具maestro

Maestro 现在手机ui的测试工具已经很多了&#xff0c;为什么还要多一款Maestro 呢&#xff1f;我们来看看Maestro 的介绍。 Maestro 是为您的移动应用程序自动化 UI 测试的最简单方法。 github的地址在这里。 Maestro 建立在其前辈&#xff08;Appium、Espresso、UIAutomat…

手机自动化测试工具实现

手机自动化测试工具实现 一、PC 端监控工具实现 1、手机自动化可解决的问题 ( 1 ) 压力测试&#xff1a;一些连续不断的操作&#xff0c;比如反复切换歌曲播放及联网操作等 ( 2 ) 极限临界测试&#xff1a;一些极限条件的构造&#xff08;创建多个列表&#xff09;及输入字…

五款Android 应用的自动化测试工具

如今自动化测试已经应用到每天的测试中。这不足为奇&#xff0c;因为自动化测试在测试过程中节约了时间&#xff0c;还能避免包括人为因素造成的测试错误和遗漏。 自动化测试工具选择很多。一些是开源的&#xff0c;一些非常贵。一些自动化工具是几年前出的,一些才在市场上出来…

Android 应用有哪些自动化测试工具

目录 简述&#xff1a; 1、Monkey 测试 2、 MonkeyRunner 测试 3、Robotium测试 4、Ronaorex测试 5、Appium测试 6、UI Automator 测试 7、TestBird 测试 简述&#xff1a; 本文介绍几款流行的 Android应用自动化测试工具。希望对你有帮助&#xff0c; Monkey测试&…

六款Android 应用的自动化测试工具

如今自动化测试已经应用到每天的测试中。这不足为奇&#xff0c;因为自动化测试在测试过程中节约了时间&#xff0c;还能避免包括人为因素造成的测试错误和遗漏。 自动化测试工具选择很多。一些是开源的&#xff0c;一些非常贵。一些自动化工具是几年前出的,一些才在市场…

超好用的手机开源自动化测试工具分享

随着消费者对移动应用使用的占比增加, APP测试越来越被重视! 在现已出现的开源移动自动化测试工具中&#xff0c;总结了几个最实用的&#xff0c;希望对大家有帮助&#xff1a; 一、Calabash&#xff08;适用于Android和iOS&#xff09; Calabash-android是支持android的UI自…

几款Android 应用自动化测试工具

简述&#xff1a; 本文介绍几款流行的 Android应用自动化测试工具。 Monkey测试&#xff1a;随机测试&#xff0c;压力测试&#xff0c;运行在模拟器或实际设备中。 MonkeyRunner测试&#xff1a;操作简单&#xff0c;可录制测试脚本&#xff0c;可视化操作&#xff0c;主要生成…

2021年四大流行Android手机自动化测试工具,全在这里了

Android 自动化测试的工具非常多&#xff0c;但是目前主流使用的就那几个&#xff0c;我会详细说明他们各自的情况&#xff0c;你可以根据自己的需要决定使用哪款工具。 Appium Appium 是目前最主流的移动测试自动化框架&#xff0c;不仅支持 Android 应用&#xff0c;而且适…

2022年四大流行Android手机自动化测试工具,全在这里了

Android 自动化测试的工具非常多&#xff0c;但是目前主流使用的就那几个&#xff0c;我会详细说明他们各自的情况&#xff0c;你可以根据自己的需要决定使用哪款工具。 Appium Appium 是目前最主流的移动测试自动化框架&#xff0c;不仅支持 Android 应用&#xff0c;而且适…

Android 手机自动化测试工具有哪几种?

一、Android手机自动化测试工具&#xff0c;常用的有这7中&#xff1a; 1、首推Appium&#xff1a; 推荐理由&#xff1a;功能非常强大的移动端自动化测试框架&#xff0c;还免费 下载链接&#xff1a;Appium: Mobile App Automation Made Awesome. Appium是一种被广泛使用的…

什么是过滤器?拦截器和过滤器有何区别?

过滤器(Filter) servlet过滤器作用&#xff1a; 1.对不符合要求的请求进行拦截&#xff0c;使之不能到达servlet 2.抽取公共的代码&#xff0c;对共同的业务进行抽离&#xff0c;对请求的数据进行加工 &#xff08;例如设置编码格式、记录日志信息、鉴别用户是否登录等&#x…

面试官:谈谈过滤器和拦截器的区别?

点击关注公众号&#xff0c;Java干货及时送达&#x1f447; 来源&#xff1a;blog.csdn.net/qq_42924666/article/details/109563400 一、拦截器和过滤器的区别二、拦截器和过滤器的代码实现三、总结 1、什么是Filter及其作用介绍2、Filter API介绍3、Filter链与Filter生命周期…

springboot(13)拦截器和过滤器的区别

1. 解释拦截器和过滤器的概念 拦截器是一种拦截请求并在请求到达目标之前执行某些任务的机制。 过滤器是一种修改或拦截请求或响应的机制。通常&#xff0c;它们用于在特定的请求或响应被处理之前对其进行处理或修改。 2. 触发时机 过滤器和拦截器触发时机不一样&#xff0…

详解拦截器和过滤器的区别

拦截器和过滤器的区别 过滤器和拦截器的区别&#xff1a; ①拦截器是基于java的反射机制的&#xff0c;而过滤器是基于函数回调。  ②拦截器不依赖与servlet容器&#xff0c;过滤器依赖与servlet容器。  ③拦截器只能对action请求起作用&#xff0c;而过滤器则可以对几乎所…

SpringBoot 的拦截器和过滤器的区别和使用场景

Servlet 现在我们通常做 Java Web 开发都会用 SpringBoot &#xff0c;但要知道 SpringBoot 只是用来简化开发的&#xff0c;在此之前&#xff0c;Springframework 只是一个粘合剂框架&#xff0c;用来整合各种 Java Web 技术的&#xff0c;SpringMvc 都是出现的比较晚的技术&…

拦截器和过滤器的区别是什么

过滤器 过滤器Filter是基于Servlet实现。Servlet的工作原理是拦截配置好的客户端请求&#xff0c;然后对Request和Response进行处理。Filter过滤器随着web应用的启动而启动&#xff0c;只初始化一次。 过滤器的配置比较简单&#xff0c;直接实现Filter 接口就可以了&#xff…

Spring拦截器和过滤器的区别

本文来说下Spring拦截器和过滤器的区别 文章目录 概述拦截器和过滤器介绍过滤器 (Filter)拦截器 (Interceptor)主要区别 拦截器和过滤器的区别实现原理不同使用范围不同触发时机不同拦截的请求范围不同注入Bean情况不同控制执行顺序不同 本文小结 概述 拦截器和过滤器 filter和…