大型 Android 系统重构实战
黄俊彬
Thoughtworks 资深咨询师
2840 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 29 讲
大型 Android 系统重构实战
15
15
1.0x
00:00/00:00
登录|注册

02|自动化测试:从0开始为一个特性覆盖自动化测试

你好,我是黄俊彬。今天我们一起来学习自动化测试的知识,我将通过一个示例给你系统介绍各种自动化测试的应用场景、需要使用的框架以及具体的用例设计和编写。
我相信此时你会有一些疑问:我为什么要学自动化测试,它能给我带来什么帮助呢?在过去很多的咨询项目中,我发现自动化测试是一个很容易产生“争议”的话题,我也经常会被问到一些很有意思的问题。
自动化测试不是应该由测试同学来编写吗,我作为开发没有必要学吧?
之前一个自动化测试都没写过,怎么开始落地呢?
编写自动化测试代码意味着要写更多的代码,这能带来什么好处呢?
根据我过往的经验,对自动化测试存在类似疑问的人,其实往往是那些一个测试都没有写过的同学。所以接下来,我们就针对一个特性,从 0 开始一步一步覆盖自动化测试。在这个过程中,你将深入感受到自动化测试的“魅力”(课程的配套代码,你可以从这里获取)。

示例介绍

今天这个示例是一个登录的场景。当用户在登录页面输入正确的账户和密码时,能正常跳转到登录界面,否则提示登录失败的信息。下面是关键的代码。
登录页面代码
public class LoginActivity extends AppCompatActivity {
private LoginLogic loginLogic = new LoginLogic();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
final EditText usernameEditText = findViewById(R.id.username);
final EditText passwordEditText = findViewById(R.id.password);
final Button loginButton = findViewById(R.id.login);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean success = loginLogic.login(LoginActivity.this,usernameEditText.getText().toString(),
passwordEditText.getText().toString());
if (success) {
//登录成功跳转主界面
startActivity(new Intent(LoginActivity.this, MainActivity.class));
} else {
//登录失败进行提示
Toast.makeText(LoginActivity.this, "login failed", Toast.LENGTH_LONG).show();
}
}
});
}
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文通过一个登录示例,系统地介绍了自动化测试的实践过程,包括小型、中型和大型三种自动化测试的落地实践。在小型测试中,作者演示了单元测试的编写过程,包括设计测试用例和用例代码的结构化。中型测试则使用了Espresso和Robolectric框架对UI和业务逻辑进行测试覆盖。而大型测试则涉及了跨应用和系统UI交互的场景,作者使用了UI Automator完成大型测试。文章还强调了自动化测试的价值,包括提供多样化的编译调试、加强开发代码自测以及提供更安全的代码重构。总的来说,本文为读者提供了全面的自动化测试实践经验,涵盖了测试框架的选择、用例设计和编写,以及测试结果的展示。读者可以通过本文了解自动化测试的基本概念和实际操作,为软件开发中的自动化测试提供了有益的参考和指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大型 Android 系统重构实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • peter
    今天刚看到这个课程,马上购买了,一口气读到了这里,每一课都有问题,集中在这里提问。 老师的课很不错。 Q1:高版本不支持ButterKnife吗? 我用AS3.5创建了一个项目,API版本是32,引用了ButterKnife,结果报错,网上搜索后在build.gradle中指定了用Java8来编译,但还是报错,而且错误原因难以理解。后来把版本降低到28,就可以了。请问,28以上的高版本不支持ButterKnife了吗?(注:第一次加入的是:compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}) Q2:版本管理和分支管理有什么区别? “工程化”部分,有两个子项“版本管理”和“分支管理”,我印象中版本管理包括分支管理啊,现在分为两个部分,有什么区别? Q3:“故事”是笔误吗? 第01课中多次用到“故事”,比如,“故事平均开发周期”等。感觉应该是“事故”? Q4:androidTest 目录下的用例运行需要依赖设备,真机或模拟器都可以吗? Q5:IDE应该是用AS吧。哪个版本?AS2021吗? Q6:在哪里执行命令行./gradlew test? 我在AS3.5的“terminal”窗口中,当前项目路径下,输入“AutoTest ./gradlew test”和“./gradlew test”,都不行,提示“'AutoTest' 不是内部或外部命令,”。

    作者回复: peter,你好。非常开心收到你的留言,看了你总结的问题,就知道你非常认真地学习完成了前面几章的内容。下面我尝试来回答一下你提到的6个问题哈。 Q1:ButterKnife现在我用的也比较少了,是否考虑直接用Kotlin? Q2: 这边的版本管理主要是指二进制的版本管理。例如jar或者aar的版本,与分支不是一个概念。 Q3:故事不是笔误,故事是敏捷开发中常用的术语,例如用户故事(需求)。 Q4:是的。 Q5:目前我看到基本都是用AS,我现在用的是Android Studio Electric Eel | 2022.1.1 Q6: AutoTest是项目的名称,进入项目的根目录直接执行./gradlew test (mac系统),你也可以直接在gradle的窗口中双击test的task。

    2023-02-14归属地:北京
    4
  • 布魯斯~
    感谢老师的讲解,想请问一下老师,在现实生活上,许多登入是透过OAuth 2.0 去实现的,想请问一下老师,针对这种场景,要如何撰写自动化的大型测试吗?

    作者回复: Hi,布魯斯。 在实际项目中,首先对于账号来说得有对应的测试账号,另外大型的测试与文中介绍的方法还是一致的,只不过需要加入一些等待及超时的机制(网络请求需要时间)。

    2023-03-18归属地:澳大利亚
    1
  • 余一
    老师,为啥我的测试类测不了protected修饰的isPasswordValid方法?明明加了@VisibleForTesting注解😢

    作者回复: Hi,可以检查一下是不是在同个包一下。

    2023-07-08归属地:广东
  • le bonheur
    从上家公司开始要求跟学习写单元测试,开始爱上单元测试.终于看到了一篇比较综合写单元测试的文章.太高兴了

    作者回复: Hi,期待一起完成专栏的学习。

    2023-03-28归属地:江苏
  • Geek_6f0f96
    这样做主要收益是回归流程嘛?因为感觉大多数需求如果写测试用例,可能比需求开发时间还多

    作者回复: Hi,你好。回归是收益之一。正文中最后的第三个问题也有介绍关于自动化测试价值的问题。你可以跟着课程一起来练习体验一下,期待一起完成专栏的学习🤝。

    2023-02-28归属地:上海
  • 李鑫鑫
    抢了测试同学的工作了!

    作者回复: Hi 鑫鑫,非常开心收到你的留言。 我想说的是:测试的工作永远不仅仅是测试同学的事情哈 😊

    2023-02-16归属地:北京
  • wangzhen666
    LoginActivityTest的should_show_failed_toast_when_execute_login_given_invalid_username_and_password()没有通过

    作者回复: 可以提供一下日志以及相关的执行设备。中大型的测试相比小型测试的一个问题就是依赖设备,相对不稳定。

    2023-02-16归属地:广东
    2
  • wangzhen666
    老师方便的话把代码传一下吧~

    作者回复: 示例的代码链接:https://github.com/junbin1011/AutoTest 期待一起完成专栏的学习🤝

    2023-02-15归属地:广东
  • 晓晓
    受益匪浅,期待更新!

    作者回复: 期待一起完成专栏的学习💪

    2023-02-14归属地:广东
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部