Android提升开发测试效率,程序员应该多干了些什么?

Android提升开发测试效率,程序员应该多干了什么?

一、前言

Android提升开发测试效率,程序员应该多干了些什么?

什么?

当你听到要多干些什么,要多写些代码时候,估计就会头疼了,我业务上的需求都还写不完呢。还要多加提高开发测试的需求。

别急!!!先看完下面:

当我们在Android里面工作了很多年时候,肯定不只做了一个App,也肯定不只在一家公司呆过,也肯定不只是做手机上App开发,我汇总一下遇到的那些问题,然后可以怎么做才能提高开发效率。

  1. 测试人员 你这个界面提示报错了,或者报错网路异常了,然儿网络正常的,你排查一下,然儿当你连接上调试线排查时候,却发现原来是服务器在编译期间,报错500了等。
    这不浪费你时间吗?
    怎么让测试人员自己知道等一会儿呢,这样才不浪费表情

  2. 一般一套系统的环境包含4个环境:

    1)线上环境

    2)线上模拟环境(QA环境)

    3)测试环境(Stage)

    4)开发环境(Develop)
    测试人员 给我打一个xxxx环境的包吧,我要用,帮我安装一个xxxx环境的包吧,
    联调人员 你先连接我本地服务器试试
    每次都这样,这不浪费你时间吗?

  3. 当Android设备是手机时候,新来台设备,新来测试机,怎么安装app?
    普通搞法: 找个调试线,运行代码安装(大多数情况下只能运行debug包)。或者蓝牙传过去,

    那如果新来设备比较多呢,你手上开发的App不只这一个,有多个呢?
    怎么快捷方便?

  4. 当Android 设备不是手机时候,如果是收银机,收银秤,或者车机机器,或者智能家居,电视TV,或者大屏广告屏等,反正比较大,不好放,又比较重不容易拿,或者一个人都搬不动。

    总不可能每次都花费很大力气抱到电脑旁边,插上数据线运行安装吧,或者电脑抱过去 ,无线ADB调试有些第一次还必须插线才行。 这TMD太浪费时间了,怎么快捷方便?

  5. 业务数据排查问题时,偶尔会以登录的账号维度排查,当有些数据不是以登录账号为维度,而是以设备唯一序列号为维度,怎么好方便排查呢,总不会把那台机器抱过来吧。
    有什么方法可以快捷方便?

  6. 如果是Android收银机设备的机器,里面有频繁支付功能。某一台测试机上面大多数情况下安装了测试环境的包,测试环境支付实际不扣钱的。突然那天去测试发现,已支付,原来里面是正式环境,把钱给扣了,然后得想办法把相关钱退回来。
    有什么方法避免大家这样误操作?

  7. 打包发布,拒绝原始单个单个打,各渠道包配置好,一键打,系统更新包打好task配置好自动上传,在线打包等。

我们试想:
在一个公司,做一个app,肯定会遇到上面这些低效问题,
当在一个公司,做了多个app,还是会遇到这些低效问题,
当在下一家公司,或者下下一家公司,还是会有这些低效问题。

怎么避免这些低效的沟通,或者做了很多低效重复的工作呢

且看下面分解:

二、网络异常精细处理

将网路异常精细化,让开发测试人员,在碰到简单的异常时候,立马就知道原因。不用每一次都去调试找原因。
比如:当服务器编译期间报错500了,立马就知道,不用调试找原因
比如:联调阶段当服务器数据结构变了忘了告诉客户端,提示:数据错误,json解析错误,这边可以立马知道原因

等等

ini 复制代码
<string name="ehttpio_msg">服务器开小差,请重试</string>
<string name="emobilenetuseless_msg">当前网络不可用</string>
<string name="enetworkio_msg">网络连接异常</string>
<string name="enotfoundmethods_msg">没有找到反射方法</string>
<string name="ehttpprotocol_msg">网络连接异常</string>
<string name="exmlparser_msg">XML解析出错</string>
<string name="exmlio_msg">XML通讯错误</string>
<string name="eclassnotfound_msg">没有找到反射类</string>
<string name="eillegalaccess_msg">反射调用时指针出错</string>
<string name="esecurity_msg">反射安全出错</string>
<string name="econnecttimeout_msg">请求超时,请重试</string>
<string name="eparamhasnull_msg">反射方法中有传入为null的参数</string>
<string name="eparamuninvalid_msg">反射方法中传入参数不合法</string>
<string name="HostBaseUrlError">请求地址错误</string>
<string name="failed_to_connect_to">无法连接到服务器</string>
<string name="JsonSyntaxException">数据错误,json解析错误</string>
<string name="ehttp_request_fail400">服务器异常400</string>
<string name="ehttp_request_fail403">请求ip被封了</string>
<string name="ehttp_request_fail404">服务器异常404</string>
<string name="ehttp_request_fail405">服务器异常405</string>
<string name="ehttp_request_fail502">服务器异常502</string>
<string name="ehttp_request_fail503">服务器异常503</string>
<string name="ehttp_request_fail504">服务器异常504</string>
<string name="ehttp_request_fail500">服务器异常500</string>
<string name="ehttp_request_fail401">服务器异常401</string>
<string name="ehttp_eunknownhost_msg">host地址配置错误异常</string>
<string name="ehttp_unknownservice_msg">网络连接异常</string>
<string name="ehttp_unsupportedencoding_msg">通信编码出错</string>
<string name="ehttp_requestsslhandshakeexception">证书校验异常</string>
<string name="enotdefine_msg">未知错误异常</string>

三、切换环境,切换序列号可配置

  1. 可开发一个界面,自己设计,控制在打测试包的时候,登录之前有入口可以进来,更严格的可以通过ASM字节码插桩, 只有测试包Debug时候才会有代码进入该控制界面,正式包Release包时候没有那些代码
  2. 可以控制切换http,https, 切换设备序列号,切换环境地址,让其可选可填,可控制测试模式,和正式模式,当测试模式时候所有选择保存才会有效。
  3. 所有切换配置可以存入MMKV,或者FastKV,或者SP,DataStore等,本地存储。
  1. 特别注意:
    1)如果涉及到数据库时候:需要分别配置测试Debug包的数据库名,和Release包的数据库名,两个名字要分开,
    2)数据库里面表字段要加一个字段来区分环境(存入值:建议就用切换环境的地址)。这样当测试包切换环境时候,查询的数据库时要带上当前环境值去匹配,才能和当前环境下数据能够对得上。 如下:
  1. 当切换环境,切换序列号等设置好,保存后,让其App 3秒后自动重启:
ini 复制代码
val intent = baseContext.packageManager.getLaunchIntentForPackage(baseContext.packageName)
val restartIntent = PendingIntent.getActivity(applicationContext, 0, intent, PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE)
val mgr = getSystemService(ALARM_SERVICE) as AlarmManager
mgr[AlarmManager.RTC, System.currentTimeMillis() + 3000] = restartIntent
ActivityManager.exitApplication()// 退出app
  1. 上面内容:甚至你可以封装好成一个包,以后做1个app,第2个app,第3个app,都可以一键接入,甚至来到其他公司,都可以说服大家这样做。毕竟方便嘛,同时也可以控制只有Debug包才接入它。Release包没有的。

四、测试包正式包区分,测试包各个环境提醒

当在测试包 Debug 包的时候,可以多写个TextView在头部展示环境(覆盖在其他上面也无所谓),这样在测试包时候,大家可以放心看到,不会出现以为不付钱时候而实际支付到生产环境了。

注意:Release打包时候没有这块内容!!!

五、下载工具

自己写个下载器,同时也可以学习

  1. 断点续传,
  2. 单文件多个线程同时下载,
  3. 多个文件同时下载,
  4. 自定义下载进度按钮
  5. 自己电脑本地搭建好服务器。配置好json,让其客户端读取该json,json内容就是配置的要下载的文件地址,可以是本地电脑里面的,也可以是线上的地址
  6. 注意要连接同一个网,让其保持在同一个局域网内。
  7. 让该下载器可以手动输入IP地址,可以手写个键盘:因为局域网内部ip可能变化。
  8. 不要嫌弃麻烦,当你有很多个app需要下载安装,当你在任何一家公司都可能有这些安装问题,你只需要把这个下载器安装到设备,或者测试机里面,把本地服务器打开,然后一切都变得很轻松。我前言里面提到的那些麻烦全部迎刃而解
  9. 甚至可以本地电脑局域网准备一份,服务器里面准备一份。当本地服务没有开,可以下载线上的,当自己不在公司,当请假了,测试人员,想要那个包,完全可以自己玩游戏一样的。
  10. 这个工具大多数情况只有自己和测试人员用,不外用。
  11. 注意,本地gradle打包,可以配置好task任务,在打包完直接copy到,本地服务器文件地址。

如下图:我N年前学习写断点续传下载,自己设计的有点不美观,但是当时写好的工具一直用到现在,经历了几家公司了,是真的方便。

六、自动化打包上传

  1. 各渠道包配置好,一键打,
  2. 系统更新包打好task配置好自动上传,一键搞定
  3. 在线打包等

这个我不具体介绍了,网上很多资料。

七、总结

本文重点介绍了:

Android提升开发测试效率,程序员应该多干了些什么?

  1. 网络异常精细处理
  2. 切换环境,切换序列号可配置
  3. 测试包正式包区分,测试包各个环境提醒
  4. 下载工具
  5. 自动化打包上传

感谢阅读:

欢迎用你发财的小手 关注,点赞、收藏

这里你会学到不一样的东西

相关推荐
pengkai火火火20 分钟前
基于springmvc拓展机制的高性能日志审计框架的设计与实现
spring boot·安全·微服务·架构
想用offer打牌1 小时前
数据库大事务有什么危害(面试版)
数据库·后端·架构
踏浪无痕1 小时前
别再只会用 Feign!手写一个 Mini RPC 框架搞懂 Spring Cloud 底层原理
后端·面试·架构
csj501 小时前
安卓基础之《(6)—Activity组件(3)》
android
怀旧,1 小时前
【Linux系统编程】13. Ext系列⽂件系统
android·linux·缓存
Dabei1 小时前
Android 语音助手简单实现与语音助手“执行任务”交流
android·前端
jzlhll1232 小时前
android NDSDManager onResolveFailed errorCode=3的解决方案
android
guslegend2 小时前
第2节:项目性能优化(中)
架构
芦半山2 小时前
四年之后,重新审视 MTE:从硬件架构到工程落地
android·安全
2501_916007472 小时前
iOS与Android符号还原服务统一重构实践总结
android·ios·小程序·重构·uni-app·iphone·webview