|
从什么是自动化测试开始
自动化测试就是通过一定的编程手段,自动执行本来需要手动执行的一系列测试的活动。
自动化测试和手动测试的对比:
执行速度快
可靠性高
复用性高
节省人力资源成本
移动端自动化测试工具的选择
Appium:可以用来测试native、hybird和mobile web APP,最突出的一点是它既支持Android的自动化测试,也支持
IOS的测试;另一方面是它支持使用不同的编程语言编写测试代码。缺点:稳定性有待提高。点此进官网
Uiautomator:其是Google官方提供的一款自动化测试框架,主要特点是支持跨进程操作(这一点极大的方便了对
应用外控件的操作)。缺点:只支持Android Platform、API16及以上,调试编译运行比较麻烦。具体可在官网查看
Robotium:支持native和hybird的自动化测试,API使用起来方便简单,执行速度快,可根据控件ID操作;另外它
既可以基于源码操作,也能基于APK测试,功能强大。缺点:不支持跨进程的操作;针对APK操作,而且需要对A
PK重新签名(有工具:re-sign),因此操作相对复杂。点此进官网
其他的自动化测试框架:monkey,monkeyrunner,Testdroid(商业)和Eggplant(商业)等。
Robotium版“Hello World”
基于源码自动化测试
搭建实战测试项目:在eclipse中依次选择File->New->Other->Android Test Project,一路点击next,添加Robotium
.jar 5.6.3,在添加jar文件时应在java build path中查看,不然在初始化solo时容易碰到NullPointerException错误。
新建第一个测试用例:新建Java类,继承ActivityInstrumentationTestCase2< >.
//泛型写入需要测试的工程的入口activity名-LoginActivity
- public class TestCase1 extends ActivityInstrumentationTestCase2<LoginActivity> {
- private Solo solo;
- public TestCase1(){
- //LoginActivity是指启动的activity名称
- super(LoginActivity.class);
- }
- //实现测试前的初始化工作,JUnit框架下的方法
- @Override
- protected void setUp() throws Exception {
- // TODO Auto-generated method stub
- super.setUp();
- solo=new Solo(getInstrumentation(),getActivity());
- }
- //实现测试完成后的垃圾回收等工作,JUnit框架下的方法
- @Override
- protected void tearDown() throws Exception {
- // TODO Auto-generated method stub
- solo.finishOpenedActivities();
- super.tearDown();
- }
- //测试用例
- public void testTestCase1(){
- //不推荐通过index的方式找到控件,应通过ID的方式
- solo.enterText(0, "abcd");
- solo.enterText(1, "1234567");
- solo.clickOnButton(0);
- assertTrue("错误提示信息没有出现,可能出现bug",solo.searchText("用户名或者密码错误",true));
- }
- }
复制代码
小结:在setUp()中实现一些前置动作,在tearDown()做一些恢复初始状态的动作,然后在test方法实现测试动作。
运行Robotium例子:在测试类中单击鼠标右键,选择Run As->Android JUnit Test.
基于APK的自动化测试
APK重签名:在基于APK的自动化测试过程中,需要确保被测试的APK必须与测试项目具有相同的签名。利用工
具re-sign.jar,用法可自行Google。(re-sign重签名找的debug.keystore是位于C://User/.android下的,而eclip
se的debug.keystore要与re-sign的一致)
搭建项目和新建测试用例与上述一样
//该注解的作用是给编译器一条指令,告诉它对被注解的代码内部的某些警告保持静默
@SuppressWarnings("rawtypes")
public class FirstQunarTest extends ActivityInstrumentationTestCase2{
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME="com.Qunar.NoteActivity";
private static Class<?> launcherActivityClass;
/*static代码块(静态代码块):在类中独立于类成员的static语句块,可随便存放
它不在任何的方法体中,JVM加载类时会按照它们在类中出现的先后顺序依次执行它们,
并且只会执行一次*/
- static{
- try {
- launcherActivityClass=Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- @SuppressWarnings("unchecked")
- public FirstQunarTest(){
- super(launcherActivityClass);
- }
- private Solo solo;
- @Override
- protected void setUp() throws Exception {
- // TODO Auto-generated method stub
- solo=new Solo(getInstrumentation(),getActivity());
- }
- //测试用例:黑盒测试方式——无被测项目的源代码(基于APK)
- //robotium通过反射的方法来调用被测应用程序的代码(具体原理??)
- public void testCanOpenSettings(){
- if(solo.searchText("软件更新")){
- solo.clickOnView(solo.getView("button3"));
- }
- solo.pressMenuItem(0);
- }
- @Override
- protected void tearDown() throws Exception {
- // TODO Auto-generated method stub
- solo.finishOpenedActivities();
- super.tearDown();
- }
- }
复制代码
运行Robotium例子:在测试类中单击鼠标右键,选择Run As->Android JUnit Test.
|
|