实现Android测试项目与Qunit测试框架的互操作
2014-06-14 15:12
435 查看
实现Android测试项目与Qunit测试框架的互操作
之所以能够将Qunit测试框架应用到Android测试项目中来是基于这样的事实:WebView允许Android应用的Java代码与网页的Javascript代码的互操作。
Java代码调用Javascript的方式如下:
首先在WebView中启用Javascript:
直接向loadUrl函数传递”javascript:”格式的函数调用URL就可以调用到正在浏览的网页的Javascript的方法。这是基于浏览器(或者说浏览器内核)对“javascript:”协议的解释来实现的。比如向浏览器地址栏中输入“javascript:fun();”,那么浏览器就会直接执行当前加载的页面中的fun()这个方法。
Javascript代码调用Java的方式如下:
首先需要创建专供Javascript代码调用的Java类,然后调用WebView控件的addJavascriptInterface()方法来向javascript公开这个Java类。
定义一个Java类:CalledByJavascript 这里作为MainActivity的一个内部类来定义
通过WebView控件向javascript公开这个类:
在Javascript中调用Java代码:
以下展示如何实现将Qunit应用到Android的测试项目中:
首先新建一个Android应用项目,只包含一个MainActivity,内含一个WebView控件。在MainActivity内定义一个内部类用来作为向Javascript公开的接口。MainActivity代码如下:
然后针对待测对象(这里是CalledByJavascript类的add成员方法)应用Qunit编写相应的Qunit测试用例页面,这里为QunitTestPage.html,文件内容如下:(注意这里默认Android对象名为“android”)
将如上的Qunit测试用例,包含其引用的js、css文件全部放到应用的assets文件夹下,方便后续访问(当然,也可以部署到远程Web服务器上)。
新建一个测试项目,在一个测试用例中调用待测应用的WebView控件,然后控制WebView加载资源文件夹中的Qunit测试页面,之后就可以运行测试项目进行测试了。测试用例代码如下:
测试执行的效果如下:
同样的道理,如果想要对Qunit的测试结果在Android测试项目中做进一步处理,可以编写新的接口,然后将页面结果输出到后台,再做文本处理、统计等。
之所以能够将Qunit测试框架应用到Android测试项目中来是基于这样的事实:WebView允许Android应用的Java代码与网页的Javascript代码的互操作。
Java代码调用Javascript的方式如下:
首先在WebView中启用Javascript:
WebViewwv = (WebView)findViewById(R.id.webview1); WebSettingsws = wv.getSettings(); ws.setJavaScriptEnabled(true);
直接向loadUrl函数传递”javascript:”格式的函数调用URL就可以调用到正在浏览的网页的Javascript的方法。这是基于浏览器(或者说浏览器内核)对“javascript:”协议的解释来实现的。比如向浏览器地址栏中输入“javascript:fun();”,那么浏览器就会直接执行当前加载的页面中的fun()这个方法。
Javascript代码调用Java的方式如下:
首先需要创建专供Javascript代码调用的Java类,然后调用WebView控件的addJavascriptInterface()方法来向javascript公开这个Java类。
定义一个Java类:CalledByJavascript 这里作为MainActivity的一个内部类来定义
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); … tv = (TextView)findViewById(R.id.textview1); } final private TextView tv; public class CalledByJavascript { public CalledByJavascript () { } public void funOfJava(String message) { tv.setText(“通过javascript调用来改变了TextView的文本”); } } }
通过WebView控件向javascript公开这个类:
WebView wv = (WebView)findViewById(R.id.webview1); WebSettings setting = wv.getSettings(); setting.setJavaScriptEnabled(true); wv.addJavascriptInterface( new CalledByJavascript (this), "android"); //"android"即为javascript代码中引用Java的主对象名
在Javascript中调用Java代码:
function CallJavaCode(){ android. funOfJava (“通过javascript来调用Java函数”); }
以下展示如何实现将Qunit应用到Android的测试项目中:
首先新建一个Android应用项目,只包含一个MainActivity,内含一个WebView控件。在MainActivity内定义一个内部类用来作为向Javascript公开的接口。MainActivity代码如下:
package com.winstonwolfe.usequnitdemo; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.webkit.WebView; import android.webkit.WebSettings; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView wv = (WebView)findViewById(R.id.webView1); WebSettings ws = wv.getSettings(); ws.setJavaScriptEnabled(true); wv.addJavascriptInterface(new CalledByJavascript(), "android"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public class CalledByJavascript { //Javascript接口类 public CalledByJavascript() { } @android.webkit.JavascriptInterface public int add(int x, int y) { //待测函数 return x + y; } } }
然后针对待测对象(这里是CalledByJavascript类的add成员方法)应用Qunit编写相应的Qunit测试用例页面,这里为QunitTestPage.html,文件内容如下:(注意这里默认Android对象名为“android”)
<!DOCTYPEhtml> <html> <head> <metacharset="utf-8"> <title>QUnit测试用例</title> <linkrel="stylesheet" href="qunit/qunit.css"> </head> <body> <divid="qunit"></div> <divid="qunit-fixture"></div> <scriptsrc="qunit/qunit.js"></script> <script> test("单元测试用例1", function () { var x = 1; var y = 2; equal( android.add(x,y), 3, "期望值是3"); }); test("单元测试用例2", function () { var x = -1; var y = 2; equal( android.add(x,y),1, "期望值是1"); }); </script> </body> </html>
将如上的Qunit测试用例,包含其引用的js、css文件全部放到应用的assets文件夹下,方便后续访问(当然,也可以部署到远程Web服务器上)。
新建一个测试项目,在一个测试用例中调用待测应用的WebView控件,然后控制WebView加载资源文件夹中的Qunit测试页面,之后就可以运行测试项目进行测试了。测试用例代码如下:
package com.winstonwolfe.usequnitdemo.test; import junit.framework.TestCase; import junit.framework.Assert; import com.winstonwolfe.usequnitdemo.MainActivity; import com.winstonwolfe.usequnitdemo.R; import android.app.Activity; import android.test.ActivityInstrumentationTestCase2; import android.webkit.WebView; public class testCase1 extends ActivityInstrumentationTestCase2<MainActivity> { public testCase1(){ super(MainActivity.class); } public void testWithQunit()throws InterruptedException { // 找到待测应用的活动对象的引用 Activity activity = getActivity(); // 找到待测应用主界面上的WebView对象 final WebView wv =(WebView)activity.findViewById(R.id.webView1); wv.loadUrl("file:///android_asset/QunitTestPage.html"); } }
测试执行的效果如下:
同样的道理,如果想要对Qunit的测试结果在Android测试项目中做进一步处理,可以编写新的接口,然后将页面结果输出到后台,再做文本处理、统计等。
相关文章推荐
- android-junit-report工具实现android下junit框架测试自动生成报告
- Android自动化框架 模拟操作 模拟测试
- Android高手进阶篇4-实现侧滑菜单框架,一分钟集成到项目中
- android MVP + dagger2 + Retrofit + Rxjava+okhttp android基础项目框架搭建(3)--完美实现
- Android开源项目以及开源框架,各种UI实现效果
- Android自动化测试框架新书:<<MonnkeyRunner实现原理剖析>>交流
- android项目框架结构实现、封装、继承
- 项目记录15--热更新ulua加入框架测试和.android热更新脚本
- Android高手进阶篇4-实现侧滑菜单框架,一分钟集成到项目中
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
- 集合框架_用户登录注册案例详细分析和分包的实现、用户基本描述类和用户操作接口的实现、用户操作类的具体实现、用户测试类的实现、加入猜数字小游戏
- android——框架的实现系列(数据库操作)
- [置顶] Android移动开发-在Android项目里集成开源框架ZXing实现扫描二维码的功能
- Android绘图机制(三)——自定义View的三种实现方式以及实战项目操作
- game测试:(android项目设计师角色)01立项: 框架设计,详细设计
- Android自动化测试框架新书:<<MonnkeyRunner实现原理剖析>>交流
- Android高手进阶篇4-实现侧滑菜单框架,一分钟集成到项目中
- Android开源项目以及开源框架,各种UI实现效果。
- Android推送通知的实现--PHP+ANDROID做消息推送:基于IBM的MQTT协议的Tokudu项目测试
- 参考bbossgroups框架来实现持久层的操作