一、 控制测试用例的执行顺序
采用TestSuit方式来控制每条Case的运行顺序
Demo如下
public static Test suite() {
TestSuite suite = new TestSuite();
//$JUnit-BEGIN$
suite.addTestSuite(CopyOfTestApk.class);
//$JUnit-END$
return suite;
}
二、 bat批处理方式启动Robotium脚本
单个启动
am instrument -w com.testcalculator/android.test.InstrumentationTestRunner
启动Test Suit
Am instrument -e class com.testcalculator.AllTests -w com.testcalculator/android.test.InstrumentationTestRunner
Java中启动
public void callChosenTest(){
Runtime run = Runtime.getRuntime();
try {
//Process p = run.exec("am instrument -w com.testcalculator/android.test.InstrumentationTestRunner");///执行全部的测试案例
Process p = run.exec("am instrument -e class com.testcalculator.AllTests -w com.testcalculator/android.test.InstrumentationTestRunner");
//执行一个测试案例
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
命令行启动
1.运行所有的测试用例
举个栗子:运行测试工程下的所有用例
1 adb shell am instrument -w com.taobao.taobao.test/android.test.InstrumentationTestRunner
2.运行单个测试类或某个TestSuite
举个栗子:运行测试类com.taobao.taobao.test.TestRegister
1 adb shell am instrument -e class com.taobao.taobao.test.TestRegister -w com.taobao.taobao.test/android.test.InstrumentationTestRunner
3.运行某个测试类里面的某个测试方法
举个栗子:运行com.taobao.taobao.test.TestRegister中的测试方法testRegister
adb shell am instrument -e class com.taobao.taobao.test.TestRegister#testRegister -w com.taobao.taobao.test/android.test.InstrumentationTestRunner
4.运行两个不同的测试类或类中的方法
举个栗子:运行com.taobao.taobao.test.TestLogin
和com.taobao.taobao.test.TestRegister类中的方法testRegister
1 adb shell am instrument -e class com.taobao.taobao.test.TestLogin,com.taobao.taobao.test.TestRegister#testRegister -w com.taobao.taobao.test/android.test.InstrumentationTestRunner
今天解决了一下发布版消息推送证书无法收到消息推送的问题,经过一番折腾发现原来是服务器配置问题,不过也捋了一下消息推送的流程。
之前有一次也是消息推送无法收到,用开发版证书跟踪找到原因是devicetoken的问题,只测试了开发版证书就没测试发布版证书了,后来又提出了消息推送无法接收的问题,先测试了一下开发版证书,一切正常,换到发布版证书后确实收不到消息推送,查看服务器日志error为Invalid certificate chain (Received fatal alert: certificate_unknown)! Verify that the keystore you provided was produced according to specs... 于是在网上搜索 找到一片关于这个问题的文章,连接如下:http://blog.csdn.net/dj0708/article/details/8721336 内容如下:
Invalid certificate chain (Received fatal alert: certificate_unknown)! Verify that the keystore you provided was produced according to specs...是由于导证书的时候 导的是产品推送的钥匙串.p12而不是 Apple Production IOS Push Services:XXX 的.p12 ,切记选择导出证书的时候保证推送证书的p12而不是钥匙串的
正常的导出p12
错误的导出p12
文中说是导出p12的问题,由于无法在最初的电脑上重新导出p12 所以我准备重新create一个证书,这里先推荐两篇不错的文章:
实现ios应用push功能的文章:
http://tanqisen.github.io/blog/2013/02/27/ios-push-apns/
push证书的步骤
http://saeapns.sinaapp.com/doc.html
新改版的苹果网站和教程上有一些不同但都大同小异 基本都可以搞清楚的,重新create的过程我就不在多说了,看上面的文章就可以解决
用新的证书测试之后还是无法收到推送的消息,后来又仔细看服务器端的问题才发现是配置问题,修改配置之后又用原来的证书测试 也能收到推送的消息了。按道理重新create证书之后之前的证书应该就不能用了 可能是苹果服务器还没有更新吧
一、 重签名问题
1、从手机Pull所需的apk通过压缩工具删除META-INF目录
2、通过以下命令行进行签名
>jarsigner -keystore "C:\Documents and Settings\ey\.android\debug.keystore" -storepass android -keypass android D:\Mms.apk androiddebugkey
>zipalign 4 D:\Mms.apk D:\debug\Mms.apk
3、Push签名后的文件到手机上
二、只有APK程序的测试
Demo如下
package com.phone.test;
import com.jayway.android.robotium.solo.Solo;
import android.annotation.SuppressLint;
import android.test.ActivityInstrumentationTestCase2;
public class CallTest extends ActivityInstrumentationTestCase2 {
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.android.mms.ui.ConversationList";
private static String PACKAGENAME = "com.android.mms";
private static Class<?> launcherActivityClass;
static {
try {
launcherActivityClass = Class
.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
@SuppressWarnings("unchecked")
public CallTest() throws ClassNotFoundException {
super(PACKAGENAME,launcherActivityClass);
}
private Solo solo;
@Override
protected void setUp() throws Exception {
solo = new Solo(getInstrumentation(), getActivity());
}
public void testSms() {
solo.clickOnText("新信息");
solo.typeText(0, "10086");
solo.sleep(2000);
solo.clickOnEditText(1);
solo.sleep(500);
solo.goBack();
solo.typeText(1, "test");
solo.sleep(2000);
solo.typeText(1, "test");
solo.sleep(1000);
solo.clickOnButton("发送");
solo.sleep(2000);
}
@Override
public void tearDown() throws Exception {
solo.finishOpenedActivities();
}
}
存在以下问题
TypeText无法输入内容,正在查找解决办法。