安卓自动化测试:Jenkin构建后运行自动化出现IllegalAccessError错误;低电量时、

2019-04-13 20:31发布

安卓自动化测试:Jenkin构建后运行自动化出现IllegalAccessError错误;低电量时、停止运行自动化测试用例

Jenkin构建后运行自动化出现IllegalAccessError错误

某次jenkins构建时,出现如下错误: com.android.xsltest.testcase.OtherInfoAdd:INSTRUMENTATION_RESULT: shortMsg=java.lang.IllegalAccessError INSTRUMENTATION_RESULT: longMsg=java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation 因为出错误之前,多个版本都是自动化运行成功,且从失败到成功,并未改过对应的代码,所以以为是构建问题,于是重新运行构建。 不过,多次构建后,仍是出现同样的问题。而且都是在保存病历的患者信息页出现的,而且即使只输入姓名,也会出现同样的问题。而且,使用eclipse直接运行自动化,就没有出现这个问题。 经过google查找,发现是由于测试应用和被测的病历夹都包含了同样的包引起的,而pinyin4j-2.5.0.jar确实在两个应用中都在使用。 从前记得eclipse中,只要把包含的包取消选中,就可以解决该问题了。但是jenkins构建使用gradle进行构建,所以只能修改build.gralde的内容。而需要修改的位置是: dependencies {      compilefileTree(dir: 'tests/libs', include: '*.jar')      compilefileTree(dir: 'app/misc', include: 'cafe.jar')      compile fileTree(dir: 'app/libs', include:'pinyin4j-2.5.0.jar') } 通过查找到的信息,按里面的说明,尝试把   compile fileTree(dir: 'app/libs',include: 'pinyin4j-2.5.0.jar') 修改为以下几种,分别进行尝试:       compile 'com.belerweb:pinyin4j:2.5.0' androidTestCompile('com.belerweb:pinyin4j:2.5.0') { exclude group:'com.belerweb' } androidTestCompile('com.belerweb:pinyin4j:2.5.0') { exclude group:'net.sourceforge.pinyin4j' } provided 'com.belerweb:pinyin4j:2.5.0' 运行后发现,基本都提示找不到对应的包。后来,经过多次查找,找到如下文档: “How to use provided scope for jar file inGradle build?” http://stackoverflow.com/questions/18738888/how-to-use-provided-scope-for-jar-file-in-gradle-build 通过改为如下内容,jenkins构建后的安卓自动化运行正常。 dependencies {     compilefileTree(dir: 'tests/libs', include: '*.jar')     compilefileTree(dir: 'app/misc', include: 'cafe.jar')     providedfiles('app/libs/pinyin4j-2.5.0.jar') }

低电量时、停止运行自动化测试用例

有一次,打算在家里看看安卓自动化的运行情况。发现所有的构建都是失败,似乎手机没有启动,不过,这怎么可能呢?一直连接着电脑的usb充电啊。周一到单位看了下,确实未启动,手机的关机了,而且电量比较低。又有几次,坐在电脑前,就看到了低电。之所以之前未发现,是因为每天仅有几次构建和自动化,其他时间都在充电;而这次,构建间隔30分钟左右,几乎结束上次构建,就开始了下次构建,电量一直在降低。 考虑了两个想法,一个是加大usb口的充电电流,一个是在低电时,基本不运行用例。 对于第二种方式,使用如下函数获得整数的电量值,然后与指定值比较,低于则不运行用例操作。        public static int getBatteryInfo(Context context) {               IntentFilterifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);               IntentbatteryStatus = context.registerReceiver(null, ifilter);               int status = batteryStatus.getIntExtra("level", 0);               return status;    } 尝试后,定期30分钟执行的用例,如果低电的话,几分钟就运行完了,剩余的时间可以充电,而电量满足需求时,则正常运行用例。 该函数返回的是100以内的整数,我们设定的是5或10,如果低电,则留出尽量多的时间充电,而不是用完电,导致关机,而无法测试   第一种方式,购买了有电源的usb hub集线器,一共4个口。发现也能解决电量低的问题。 为了看手机的充电电流,也查找了相关命令,但未详细研究原因和结果。知道的内容如下,供以后参考。 shell@hlte:/ $ dumpsys battery Current Battery Service state:   ACpowered: false   USBpowered: true  Wireless powered: false  status: 2  health: 2  present: true  level: 61  scale: 100  voltage: 3977  temperature: 303  technology: Li-ion   LEDCharging: true   LEDLow Battery: false  current now: 450  Dormant Settings: false  Dormant Disable LED Settings: true  Dormant Always Settings: true  Adaptive Fast Charging Settings: true   SUPPORT_LOG_BATTERY_USAGE: false         Adb相关命令:       http://imsardine.simplbug.com/note/android/adb/commands/commands.html#shell Adb中的dumpsys命令: http://imsardine.simplbug.com/note/android/adb/commands/dumpsys.html   电池、电压等相关数据放在手机的/sys/class/power_supply目录,大概看了下,需要时再详细了解。