Android自动化大讲堂32--Instrumentation对项目的自动化测试
本文摘自《深入理解Android自动化测试》第四章第4.9.2节
对测试最初项目进行自动化测试需要进行如下几个步骤:
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自动化测试》一书,谢谢!