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

本文详细介绍了在使用Jenkins构建过程中遇到的非法访问错误(IllegalAccessError)的解决办法,涉及到如何在Gradle构建配置中正确引用依赖项,避免重复包引入导致的问题。同时,文章还探讨了如何在低电量时合理安排自动化测试用例的执行,以防止设备因电量耗尽而无法继续测试的情况。通过调整电池状态检测逻辑和优化资源分配策略,实现了自动化测试的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安卓自动化测试: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目录,大概看了下,需要时再详细了解。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值