Android自动化大讲堂32--Instrumentation对项目的自动化测试

本文摘自《深入理解Android自动化测试》第四章第4.9.2节

 

0?wx_fmt=png                           

对测试最初项目进行自动化测试需要进行如下几个步骤:

1)      启动应用:启动bugben应用,并进入其主界面,即ChangeActivity;

2)      编辑界面:输入文本框1和文本框2,即textview1和textview2,的文字并选择加粗和大号字体;

3)      结果提交:点击提交按钮,即subButton,将触发按钮事件进行数据传输;

4)      界面跳转:点击后界面将从编辑界面ChangeActivity跳转至结果显示界面HelloBugbenActivity;

5)      验证显示:界面跳转后,HelloBugbenActivity将正确显示编辑界面所录入的文字和选择的粗细与大小,这也即是此项自动化测试的验证点。


基于此,我们可以按照以上步骤开始自动化测试。既然上一节咱们知道如何捕获这个控件,下面咱们就一起来看看如何进行测试。


1)      启动应用

启动bugben应用,并进入其主界面,即ChangeActivity,如代码清单4-39所示。


代码清单4-39      ChangeActivity

// xuben:启动ChangeActivity

Intent intent = new Intent();

intent.setClassName(“com.xuben.hellobugben”, ChangeActivity.class.getName());

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

changeAutoTest =

(ChangeActivity)getInstrumentation().startActivitySync(intent);


通过setClassName设置包名和类名,通过setFlags设置标识,然后就可以通过getInstrumentation()的startActivitySync(intent)进行应用启动。


2)      编辑界面

输入文本框1和文本框2(即textview1和textview2)的文字并选择两个文本框的属性。要实现输入和选择,首先得找到需要输入和选择的控件。


通过HierarchyViewer对控件ID进行捕获后,就能以这种方式获取控件了,如代码清单4-40所示。


代码清单4-40      获取控件

// xuben

// xuben:通过changeAutoTest的findViewById获取ChangeActivity界面控件

txt1 = (EditText)changeAutoTest.findViewById(R.id.txt1);

txt2 = (EditText)changeAutoTest.findViewById(R.id.txt2);

bold = (RadioButton)changeAutoTest.findViewById(R.id.bold);

notbold = (RadioButton)changeAutoTest.findViewById(R.id.notbold);

small = (RadioButton)changeAutoTest.findViewById(R.id.small);

big = (RadioButton)changeAutoTest.findViewById(R.id.big);

subButton = (Button)changeAutoTest.findViewById(R.id.myButton01);


这里的changeAutoTest就是上一步中启动ChangeActivity界面时返回的对象。

获取到控件后,就可以对其进行编辑,如代码清单4-41所示。


代码清单4-41     编辑控件

// xuben:要操作待测程序的UI必须在runTestOnUiThread()中执行

runTestOnUiThread(new Runnable() {

@Override

public void run()

// xuben:编辑界面中的文本框中文字

txt1.setText(bugben_txt1);

txt2.setText(bugben_txt2);


// xuben:选择文本框1为加粗,文本框2为大号字体

bold.setChecked(true);

big.setChecked(true);


// xuben:等待500ms以避免程序响应慢出错

SystemClock.sleep(500);


// xuben:点击subButton按钮,提交输入文本

subButton.performClick();

});


这段代码对文本框的文字和属性进行了设置,需要注意的是,这段代码是在runTestOnUiThread(newRunnable()中的run()方法中执行的,这个后续将详细分析,这里大家只需记住,操作待测试程序的UI必须在runTestOnUiThread这个线程中运行即可。


3)      结果提交

点击提交按钮,即subButton,将触发按钮事件进行数据传:

subButton的点击已经在上一步中进行,即subButton.performClick(),因为点击按钮也属于操作界面控件,所以也需要在runTestOnUiThread这个线程中执行。


下面我们重点来看看界面跳转值得关注的内容,这也是Instrumentation自动化测试中界面跳转最需注意的一个点。


4)      界面跳转:点击后界面将从编辑界面ChangeActivity跳转至结果显示界面HelloBugbenActivity。


如何响应按钮事件并进行界面跳转是待测项目需要做的事,而如何确认界面已经跳转则是测试项目需要关注的焦点。


在Instrumentation中,是通过对跳转后的界面设置Monitor(监视器)来确认的,如代码清单4-42所示。


代码清单4-42      设置Monitor

// xuben:添加一个监视器,监视HelloBugbenActivity的启动

ActivityMonitor bugbenMonitor =

getInstrumentation().addMonitor(HelloBugbenActivity.class.getName(),null, false);


注意:

必须在界面操作前对于Monitor的设置,即上述代码应该放置在runTestOnUiThread这个线程前面。


通过addMonitor()对跳转后的界面HelloBugbenActivity进行监视设置后,就可以通过runTestOnUiThread进行界面操作,操作后,我们将通过如下代码进行界面跳转确认,如代码清单4-43所示。


代码清单4-43    界面跳转确认

// xuben:从ActivityMonitor监视器中获取HelloBugbenActivity的实例

helloBugbenAutoTest = (HelloBugbenActivity)getInstrumentation()

.waitForMonitor(bugbenMonitor);

 

// xuben:HelloBugbenActivity的实例helloBugbenAutoTest应不为空

assertTrue(helloBugbenAutoTest!= null);


通过waitForMonitor()方法等待界面跳转,并返回跳转后的界面对象。

通过assertTrue()检验返回的界面对象不为空,即跳转正常。


5)      验证显示:界面跳转后,HelloBugbenActivity将正确显示编辑界面所录入的文字和选择的属性,这也即是此项自动化测试的验证点,如代码清单4-44所示。


代码清单4-44      验证显示

// xuben:通过helloBugbenAutoTest的findViewById获取文本框

textview1 =(TextView)helloBugbenAutoTest.findViewById(R.id.myTextView01);

textview2=(TextView)helloBugbenAutoTest.findViewById(R.id.myTextView02);

 

// xuben:验证文本框1的文本,该文本应为”巴哥奔”

assertEquals(bugben_txt1,textview1.getText().toString());

// xuben:验证本框2的文本,该文本应为”小简洁”

assertEquals(bugben_txt2,textview2.getText().toString());

 

// xuben:验证文本框1的文本属性,应为加粗

 TextPaint tp = textview1.getPaint();

 Boolean cmpBold = tp.isFakeBoldText();        

 assertTrue(cmpBold);

 

// xuben:验证本框2的文本字号,应为大号

 Float cmpSize = textview2.getTextSize();

 assertTrue(cmpSize.compareTo(bugben_big_size)== 0);


界面正常跳转后,则需要先通过跳转后的界面对象helloBugbenAutoTest的findViewById()方法去获取界面控件textview1和textview2,获取后即可通过getText()等方法对结果进行验证。


下一课将分享完整自动化测试项目代码,以及Instrumentation工具反思,敬请关注,谢谢。


更多内容,请点击“阅读原文”,参考《深入理解Android自动化测试》一书,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值