Jootun M04:一轮不断的变更,拖着你不断的冲刺

夏天来了,天天上班堵在路上的心情,就像测试一样,变动的需求在不停地堆积,进度就这么堵着,你还只能一脚一脚地跟着,不停地加班加班,从以往上线前加三天,变成了三天又三天……

这次ios做了底层的框架的改动,涉及所有的对外请求,于是就测了所有页面的请求,修复了一个bug,请求成功就意味着新的框架成功了吗?两周后测联系方式正则时,发现加号请求全部失败,折腾了服务端好一阵,最后才找到原因,是ios客户端的加密组件换了,导致请求参数的密钥不一致而请求失败。

凡事皆有两面性,于是对于接口的参数加密和转码这块,我也跟着摸了一遍,对于后续琢磨做接口并发和压力就更清晰了。并发和压力这款,除了线程和结果外,还有就是编写测试数据的接口请求,后来也向总监请教了并发、性能、压力、代码效率、SQL事务锁的区别。app自动化准备放在一边,先从python多线程和接口自动化开始,在这个基础上形成性能和压力的测试思路。

上一期甚觉遗憾的web测试和F12短板,在这一期没有太多运用,测后台时,顺手练了练,仅仅是熟悉了,Network的XHR数据、Throttling构造网速,Resources的cookies清除,Sources的JS断点和修改,Console的js定位和变量打印,Dom元素的检查定位,但离得心应手,游刃有余还差得远了,远不如fiddler用的老练。

带了一位测试新人,从需求、用例、产品业务框架、产品技术框架、测试Bug管理进行了培养,提前灌输了一些数据库、接口的概念,成长很快,新人一个月后已经完全理解这些了。难能可贵的是心态,能够耐心完成测试工作,并且能够应对工作压力。今后也是一位测试好手。

我所理解的测试覆盖的三个层次

  1. 覆盖需求:覆盖需求明文的测试点,还要覆盖需求暗含的测试点,这考验的是业务理解能力。
  2. 覆盖业务:尽管本版改动没涉及,但代码写了什么你并非完全清楚,那么你需要整理并长期演进一套核心业务体系的测试点,由于版本迭代快,所以更多是从业务角度去积累。如果从系统角度去积累这套用例,也不是不行,只能练练手。因为你会发现,老要去改它以适应每个版本的功能变动。这考验的是测试文档的整理能力。
  3. 覆盖技术:app测试就是点点点,但它背后代表了app代码功能和逻辑,手机系统提供的接口处理,service的api接口传返,数据库的增删改查,还有服务器架构的请求负载转发……技术的深入并非覆盖更全,而是节省用例和资源。如果你的功能用例做到科学理论角度的100%覆盖,那么所有问题都会暴露,但是你写不出也执行不到……那就提高技术吧。

Jootun M03:用例已经预见结局……

这是忙碌的一个月,资金业务的改动,随着版本迭代而出,同时开发人员变动,导致接口开发滞后,在资金数据库和APP接口的测试上,花费了大量的精力,而且都是临时的变动任务,无用例打最重要的战斗……

最后赢下了战斗,但输了常规的项目迭代测试,安卓和iOS都漏了一些bug,非需求版本内的bug,而是历史bug。总的来说,用例的积累不足,早已可以预见这次漏bug。

其中一个问题是开发满足产品,重写了全局手势,所有页面的返回都要检查,没有用例积累,也没有整理过app的全部业务路径,最终有3个页面的返回丢失了头部导航按钮……

安卓新写的功能的列表代码,将提示语和按钮放入列表的第一项来处理,导致列表的第一项点击后,对象错误,闪退,有2个地方没测出此bug,在上线前发现……再一个安卓的QQ登录更新了接口组件,安卓开发花了3天没搞定,登录失败。上线前加班搞定……

因为大量的资金业务投诉,导致上个版本的资金流程产品设计失败,仅仅存活半个月就要改掉了。紧急调整,后台、接口、APP相关设计全改,在紧急的项目迭代测试期间,加入了大任务。而且市场已经把新版上线期宣传出去,任务增加一倍,工期不变,赞!个中滋味,全化为个人的成长……

从入职以来,所有测过的项目和迭代都让人沮丧,不是技术,不是氛围,更不是个人的战斗力,而是大量费劲精力开发并测试上线的功能,很多不会存活过2个小版本的周期,也就是1个月,甚至有些功能开发测试完,下个版本立刻弃用……对此我一直在思考去理解,从项目的角度去俯视整个团队的工作。

个人的悲哀对于团队无足轻重,然而公司的投入产出却如此短见,尽管你无需操心公司的财力,但总觉得莫名其妙。

也许再过半年我才能理解,为何要这样反复无规划。

另外值得高兴的是,自己对数据库和接口的测试成长了很多,不足是web项目测试过手的越来越少,对F12的理解停滞不前,借着后台测试,向开发请教了JS定位和代码检查,以及数据返回的查看。

GMD gesture control : 将手势对单个app的无效修改为default时,程序崩溃的Logcat

——— beginning of main

06-13 23:28:21.042 819 24706 D NetlinkSocketObserver: NeighborEvent{elapsedMs=3647330183, 192.168.137.1, [488AD21337DB], RTM_NEWNEIGH, NUD_STALE}

06-13 23:28:25.168 3566 3566 D AndroidRuntime: Shutting down VM

——— beginning of crash

06-13 23:28:25.181 3566 3566 E AndroidRuntime: FATAL EXCEPTION: main

06-13 23:28:25.181 3566 3566 E AndroidRuntime: Process: com.goodmooddroid.gesturecontrol, PID: 3566

06-13 23:28:25.181 3566 3566 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method ‘com.gmd.gc.launch.LaunchTypeEnum com.gmd.gc.launch.Launch.getType()’ on a null object reference

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at com.gmd.gc.gesture.CustomGesture.setPerAppAction(CustomGesture.java:1069)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at com.gmd.gc.gesture.ui.PerAppGestureActionFragment$1$1.onAddLaunchResult(PerAppGestureActionFragment.java:122)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at com.gmd.gc.launch.AddLaunchDialogFragment.onAddLaunchResult(AddLaunchDialogFragment.java:158)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at com.gmd.gc.launch.AddLaunchArrayAdapter.onItemClick(AddLaunchArrayAdapter.java:80)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at com.gmd.gc.launch.AddLaunchDialogFragment$1.onItemClick(AddLaunchDialogFragment.java:124)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at android.widget.AdapterView.performItemClick(AdapterView.java:310)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at android.widget.AbsListView.performItemClick(AbsListView.java:1145)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at android.widget.AbsListView$PerformClick.run(AbsListView.java:3066)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at android.widget.AbsListView$3.run(AbsListView.java:3903)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at android.os.Looper.loop(Looper.java:148)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

06-13 23:28:25.181 3566 3566 E AndroidRuntime: at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:117)

——— beginning of system

06-13 23:28:25.188 819 1280 W ActivityManager: Force finishing activity com.goodmooddroid.gesturecontrol/com.gmd.gc.view.GestureActivity

06-13 23:28:25.290 32329 5593 D DropBoxEntryAddedChimeraService: User is not opted-in to Usage & Diagnostics.

06-13 23:28:25.300 819 6861 I OpenGLRenderer: Initialized EGL, version 1.4

06-13 23:28:25.403 819 828 I art : Background partial concurrent mark sweep GC freed 58535(2MB) AllocSpace objects, 2(40KB) LOS objects, 22% free, 54MB/70MB, paused 1.998ms total 194.744ms

06-13 23:28:25.722 819 836 W ActivityManager: Activity pause timeout for ActivityRecord{7487738 u0 com.goodmooddroid.gesturecontrol/com.gmd.gc.view.GestureActivity t4387 f}

06-13 23:28:25.734 819 567 W ActivityManager: Bad activity token: android.os.BinderProxy@5183f2b

06-13 23:28:25.734 819 567 W ActivityManager: java.lang.ClassCastException: android.os.BinderProxy cannot be cast to com.android.server.am.ActivityRecord$Token

06-13 23:28:25.734 819 567 W ActivityManager: at com.android.server.am.ActivityRecord.forTokenLocked(ActivityRecord.java:424)

06-13 23:28:25.734 819 567 W ActivityManager: at com.android.server.am.ActivityRecord.isInStackLocked(ActivityRecord.java:1121)

06-13 23:28:25.734 819 567 W ActivityManager: at com.android.server.am.ActivityManagerService.getActivityOptions(ActivityManagerService.java:11104)

06-13 23:28:25.734 819 567 W ActivityManager: at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:1734)

06-13 23:28:25.734 819 567 W ActivityManager: at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2483)

06-13 23:28:25.734 819 567 W ActivityManager: at android.os.Binder.execTransact(Binder.java:453)

06-13 23:28:26.287 12149 24853 D MSF.C.NetConnTag: netRecv ssoSeq:-1060493467 uin:*1999 cmd:-316037937 -1060493142

06-13 23:28:26.296 26509 26551 D Q.msg.TroopMsgProxy: insertToList MessageRecord=friendUin:2181senderuin:6031,istroop:1,msgType:-1000,time:1465831706,shmsgseq:207246

06-13 23:28:28.834 12149 12228 D MSF.C.NetConnTag: pa ok: 61375

06-13 23:28:28.834 12149 12228 D MSF.C.NetConnTag: netSend ssoSeq:61375 uin:*1999 cmd:-2080616503 61600

06-13 23:28:28.919 12149 24853 D MSF.C.NetConnTag: netRecv ssoSeq:61375 uin:*1999 cmd:-2080616503 66036

通过excel的函数,简单构造一个自动生成测试报告的框架

1.核心函数是 counta countif countifs
2.框架是
  用例层:将执行区的用例加入统计字段,比如模块和类型。
配置层:设置各个测试用例字段用到的参数值,比如模块类型优先级的构成,供用例层调用参数值;构造函数对用例进行统计,行成原始数据。这些原始数据将被报告层调用。
报告层:调用配置层的原始数据,通过模板设计与数据调用,自动形成实时版的格式化测试报告。
3.以上用框架思想玩个文字游戏,来描述怎么用excel设计自动生成的测试报告,哈!

Nexus的谷歌安卓系统:root,ota升级,线刷升级,开机绕过网络验证,checking connection

  1. root的构成
    基本构成:boot.img supersu.zip
    必备:twrp的recovery.img,用于刷别的img
  2. 5.x之后的ota升级校验
    校验机制:5.x之前,ota校验每个系统文件,所以增加的文件是可以通过ota校验的,所以root不影响。5.x之后应该是改了,因为验证的是所有系统文件的完整性,增加,删除,修改都不行,所以root过的Nexus机子在ota升级新的谷歌系统会失败。
    root后的ota:刷你当前系统版本的官方的boot.img和recovery.img,如果有改过系统文件还原,这样可以试试,感觉上是可以通过ota校验。
  3. 手工升级怎么线刷
    无损线刷升级6.0
    1.升级:下载谷歌原系统,解压出各种img,用fastboot逐个flash刷入。其中刷入bootloader和radio后要各重启一下,刷入cache前,先清空wipe cache。【data和user这类不要刷,这样才能保留你的数据】
    2.再root:从xda搞到修改过的boot.img,刷入boot,之后进twrp刷supersu.zip之类的完成最后的root。
    3.收尾:清除wipe davlik和cache后,重启进系统,就搞定了。
  4. 新装6.0或恢复出厂后,开机怎么绕过网络验证,或者英文系统的 checking connection
    Nexus开机网络验证:要说王朝变态搞局域网封禁,谷歌也变态,之前老版本可以通过顺序点四个边角跳过网络验证,6.0这个办法已经没用了,作为用户被两头夹击,爽不可言!
    手机:可以通过拔卡搞定,无论什么版本的Nexus,不走wifi而走手机网验证,再拔掉手机卡,就可以跳过了。我的手机是这么绕过的,细节步骤再搜一下,我也记不大清了。
    非手机5.0之前:应该可以通过按顺序点击四个边角来跳过开机的网络验证。
    非手机6.0:核心就是一句话,连接wifi输密码时,在下方再手动设置代理IP和端口,只要你的代理有效就可以完成网络验证了。无论是淘宝花钱过验证,还是网上攻略,核心就是给你个IP和端口。
    代理的方式:电脑端xxnet,lantern改127为0.0.0.0,手机设局域网代理IP即可。电脑端爬墙后,再设个wlan给手机wifi信号,手机也可以完成验证。或者电脑爬墙后,开代理软件,拦截手机传输的包,比如fiddler也可以完成这个任务。还有个比较绕口的方法,改hosts文件:laod博客下载最新的谷歌hosts文件,给nexus刷twrp的recovery后,mount加载system并开启mtp,在pc上拷贝hosts文件到nexus的内置存储卡上,通过twrp的文件操作拷入system的etc下,chomod为644权限,重启后就可以瞬间通过网络验证了。
  5. 进系统后,停用或冻结系统程序过头导致开机不停转圈卡死:进twrp,data/system/users/0/package-restrictions.xml 搜索里头 状态为3的 apk信息,大多是谷歌搜索有关的东西禁用后导致的,找到几条把状态给删了。重启就可以顺利秒进系统

搭建安卓app自动化,python的uiautomator

========================
【环境】

编辑器:PyCharm
解释器:Python 2.7
自动化模块:uiautomator
调试器:adb 工具

python的uiautomator模块作者xiaocong,他在github说明文档里提到uiautomator模块使用的前提条件要求安装Android SDK,这玩意好像还要先搞JDK环境,搞定JDK+SDK后,确实是可以跑uiautomator脚本的。

本着偷懒和较真的心态,我思考那么如果没有JDK+Android SDK呢?于是把JDK和SDK的path变量给删了,确认java和javac命令无效,然后把adb路径指向我平时用来刷机的adb目录。运行uiautomator的test.py,手机正常开屏和关屏。

========================
【问题】

1.目录权限

我在安装模块后,调试代码,发现跑不通,会报错 IOError: RPC server not started
网上搜了一下,不得其解,有个攻略说别的问题的,他提到了logcat,
于是我用自己的adb bat脚本从手机里拉最新的log日志,
一行一行看下去,找到原因了。

E/dalvikvm(18312): Dex cache directory isn’t writable: /data/dalvik-cache
I/dalvikvm(18312): Unable to open or create cache for /data/local/tmp/bundle.jar (/data/dalvik-cache/data@local@tmp@bundle.jar@classes.dex)
E/dalvikvm(18312): Dex cache directory isn’t writable: /data/dalvik-cache
I/dalvikvm(18312): Unable to open or create cache for /data/local/tmp/uiautomator-stub.jar (/data/dalvik-cache/data@local@tmp@uiautomator-stub.jar@classes.dex)

两个jar文件没有写入,导致PC端的py代码的uiautomator无法正常运行,这个问题在xiaocong解答另一个2013的error反馈也得到验证,他提到了jar云云的问题。

尝试给/data/dalvik-cache和/data/local/tmp/添加权限773,这样other用户就可以写入了。再次跑test.py,通过,可以通过uiautomator控制手机,关闭屏幕,和开启屏幕。

2.如何修改手机的系统目录权限

a. 首先需要root,如果还没root一切都是扯淡
b. root后可以adb shell 用su获取超级权限,手机会弹窗问你是否授权,然后chmod 773 目录名
c. 也可以在手机端用文件管理器,比如ES或RE图形界面直接修改目录属性里的权限
d. 也可以写个关于adb的bat脚本,批处理。通过 echo 命令语句>temp.txt >>追加 adb shell<temp/.txt逐条执行

方式很多,最终能让python代码执行,能在相应目录创建所需的jar就行了

==========

关于JDK和SDK是否必须,暂时未知,等到跑更复杂的脚本时就知道了,反正随时可以装回来,先给屏蔽了。

Android系统build.prop文件

原文链接 http://www.cnblogs.com/findyou/p/3947150.html

#begin build properties (开始设置系统性能)

#autogenerated by buildinfo.sh (通过设置形成系统信息)
ro.build.id=GRI40 (版本ID)
ro.build.display.id=GRJ22 (版本号)
ro.build.version.incremental=eng.buildbot.20110619.060228 (版本增量)
ro.build.version.sdk=10 (sdk版本)
ro.build.version.codename=REL (版本代号)
ro.build.version.release=2.3.4 (Android 2.3.4系統无需修改,也可改为3.0装装B)
ro.build.date=Sun Jun 19 06:02:58 UTC 2011 (制作者制作的时间,可修改2011年X月X日 某某某制作)
ro.build.date.utc=0
ro.build.type=user
ro.build.user=buildbot
ro.build.host=bb1
ro.build.tags=test-keys
ro.product.model=HTC Wildfire (HTC内部手机代号也就是手机名)
ro.product.brand=htc_wwe (手机品牌,改为中国山寨机)
ro.product.name=htc_buzz (手机正式名称)
ro.product.device=buzz (采用的设备,改为China G8)
ro.product.board=buzz (采用的处理器,改为China 800.8Ghz)
ro.product.cpu.abi=armeabi-v6j (cpu的版本)
ro.product.cpu.abi2=armeabi (cpu的品牌)
ro.product.manufacturer=HTC (手机制造商,改为中国智造)
ro.product.locale.language=en (手机默认语言,把en改为zh)
ro.product.locale.region=US (地区语言,美国毛多呀美国,干掉US改为CN)
ro.wifi.channels= (WIFI连接的渠道)
ro.board.platform=msm7k (主板平台)
#ro.build.product is obsolete;use ro.product.device (旧代码ro.build.product,使用代码ro.product.device)
ro.build.product=buzz (建立产品)
#Do not try to parse ro.build.description or .fingerprint (不要试图修改description和fingerprint)
ro.build.description=passion-user 2.3.3 GRI40 102588 release-keys (用户的KEY)
ro.build.fingerprint=google/passion/passion:2.3.3/GRI40/102588:user/release-keys (机身码的啥玩意)

#end build properties (性能代码完毕)

#system.prop for buzz (系统技术支持由BUZZ提供)
#Density in DPI of the LCD of this board. This is used to scale the UI (高密度的液晶的DPI板。这是用来大规模UI的)
#appropriately. If this property is not defined, the default value is 160 dpi. (appropriately.如果这个属性没有定义,缺省值是160 dpi的分辨率)
ro.sf.lcd_density=120 (显示屏分辨率,数值越大分辨率越底)
#View configuration for QVGA. (屏幕的设置)
view.fading_edge_length=8
view.touch_slop=15 (触摸屏灵敏度,数值越大越灵敏)
view.minimum_fling_velocity=25 (滑动速度)
view.scroll_friction=0.008 (滑动误差)

#RIL specific configuration. (特定设置)
rild.libpath=/system/lib/libhtc_ril.so
ro.ril.ecc.HTC-WWE=999
ro.ril.ecc.HTC-ELL=92,93,94
ro.ril.enable.a52.HTC-ITA=1
ro.ril.enable.a53.HTC-ITA=1
ro.ril.enable.a52=0
ro.ril.enable.a53=1
ro.ril.vmail.23415=1571,BT
ro.ril.hsdpa.category=8 (hsdpa全称High Speed Downlink Packet Access中文意思:高速下行分组接入,设置的数越大传输越快)
ro.ril.htcmaskw1.bitmask=4294967295
ro.ril.htcmaskw1=14449
ro.ril.def.agps.mode=2 (打开AGPS服务支持,可改为ro.ril.def.agps.mode=0 改后能省电但GPS定位速度会变慢)
ro.ril.gprsclass=12 (GPRS设置)

#For HSDPA low throughput (HSDPA低输量)
ro.ril.disable.power.collapse=1 (关闭电源)
#Modify MMS APN retry timer from 5s to 2s. (修改短信的APN设置5秒为2秒)
ro.gsm.2nd_data_retry_config=max_retries=3, 2000, 2000, 2000
#Time between scans in seconds. Keep it high to minimize battery drain.(扫描在几秒之内,可降低用电量)
#This only affects the case in which there are remembered access points, (这个修改仅能影响此文件)
#but none are in range.(但是没有一项是在范围内的)
wifi.interface=eth0 (WIFI界面)
wifi.supplicant_scan_interval=45 (WIFI扫描间隔时间,这里设置是45秒。把这个时间设置长点能省电)

#Mobile data interfaces (移动数据的接口)
mobiledata.interfaces=rmnet0,rmnet1,rmnet2
#Allow or deny tethering. (允许和拒绝绑定)
ro.tether.denied=false
#Default network type. (默认的网络类型)
#0 => WCDMA Preferred. (0=WCDMA优先)
ro.telephony.default_network=0
#Enable Google-specific location features, (谷歌特定地点的设置)
#like NetworkLocationProvider and LocationCollector.(如网络服务器提供商和服务器位置)
ro.com.google.locationfeatures=1

#The OpenGL ES API level that is natively supported by this device. (开放式绘图介面)
#This is a 16.16 fixed point number. (界面有16个点,16个不动点数量)
ro.opengles.version=65536 (开放式绘图介面参数)
#Disable fs check on boot by default. (开机时默认禁用FS检查)
sys.checkfs.fat=false

#Performance settings. (性能设置)
dalvik.vm.execution-mode=int:jit
dalvik.vm.heapsize=24m (虚拟内存大小,可设置为16m或24m或32m或48m)
persist.sys.use_dithering=1
persist.sys.purgeable_assets=1
#Increase SKIA decode memory capability for progressive jpg file.
ro.media.dec.jpeg.memcap=20000000

#ADDITIONAL_BUILD_PROPERTIES (其他性能设置)
keyguard.no_require_sim=true (手机卡保护设置)
ro.rommanager.developerid=cyanogenmodnightly (固件管理器开发者是CM大神)
ro.url.legal=http://www.google.com/intl/%s/mobile/android/basic/phone-legal.html
ro.url.legal.android_privacy=http://www.google.com/intl/%s/mobile/android/basic/privacy.html
ro.com.google.clientidbase=android-google (谷歌客户身份)
ro.com.android.wifi-watchlist=GoogleGuest (WIFI用户名单)
ro.setupwizard.enterprise_mode=1 (默认情景模式)
ro.com.android.dateformat=MM-dd-yyyy (默认时间格式,改为yyyy-MM-dd,显示效果就是XXXX年XX月XX日)
ro.com.android.dataroaming=false (漫游设置)
ro.config.ringtone=Playa.ogg (默认铃声设置,文件在/system/media/audio/ringtones 把喜欢的铃声放这里,比如123.MP3放入ringtones文件夹中,这里代码改为ro.config.ringtone=123.mp3)
ro.config.notification_sound=regulus.ogg (默认提示音,文件在/system/media/audio/notifications 修改方法同上)
ro.config.alarm_alert=Alarm_Beep_03.ogg (默认闹铃,文件在/system/media/audio/alarms 修改方法同上)
ro.modversion=CyanogenMod-7-06192011-NIGHTLY-buzz (版本信息,改这个能让你大名出现系统关于中)
ro.setupwizard.mode=OPTIONAL (安装向导模式)
net.bt.name=Android (系统名称)
dalvik.vm.stack-trace-file=/data/anr/traces.txt

测试的成长与苛刻的任务

测试得快是很容易的,测试得好也不难,但测试得又快又好就很难了。

测试总是面临非常有限的资源,需求很多模糊的,开发提交的晚,开发对业务理解偏差,测试用例考虑不全等等……

等你完成测试后,可能心生抱怨,测试任务怎么这么苛刻。甚至你想责备一句,谁来做他也做不好……

建议你这时调整心态,把公司的任务当成挑战,不要去关注是否公平,而是去思考如何改进自己的测试流程和测试技术,更好地完成测试任务。

即使最终你没有完美完成,但每一次任务你都会得到提高。

当时间流逝,等你要离开时,你回首在这的经厉,不再是抱怨和不满,而是成长与感激。

这也正是面试时,为什么求职者对上家公司的抱怨可以看作求职者能力心态不足的一个判断。从上文就可以推导验证这个判断逻辑。

首发于脉脉,为同一作者,故归入原创标签

Jootun M02:加班加点搞测试

基本上整个月大部分时间都在加班,感觉有很久没见到老婆一面。
参加了一次同学聚会,聊了各自的测试工作,有技术方面的,工作环境的,管理的,测试内容的,也不好说那种是好是不好。不管在哪种环境,也只能做好自己,从中获得更多的成长。
有的人很厉害,可以各种倒腾,但我做不到,只是喜欢学习技术,渴望对it更深入,更深入一些。
一个人的测试很不好做,UI,功能,逻辑处理,接口数据,用户体验,接口改动对老版的兼容,客户端改动对老功能的兼容,客户端对机型的兼容……
即便是你非常努力地加班去完成,仍然还有漏过的bug,一两个就给人感觉测试不够。所以,我并没有想去完美它,而且不断通过每次测试的总结,提高自己的技术。完美是虚幻的。
需要改进的测试流程如下,
1.项目概要还要写的更全面些,以作为测试计划的一个作用,从中把握整个项目的侧重点与节奏。
2.测试用例还要减少用字,提高执行的阅读效率,UI设计稿与原型UI的测试应该各有侧重点,不应重复浪费测试资源。用例阶段应该先从界面元素,功能,逻辑处理先入手,再去写UI设计稿用例,最后要补充完,三大块的兼容测试用例。
3.需要设计一个更好的测试报告模板,提交给技术总监,以此提高自己对报告的编写以及报告构成的把握。
对于测试技术这块,
1.近期感触最深的是接口测试,一个是抓包看请求返回,一个是接口测试软件的快捷键熟练使用。这种感觉就像打游戏……对接口和单元测试的理解越来越具体了。感觉自己真的快要入门了。感谢51和Jootun进入我的人生
2.再一个是mysql的SQL语句使用,基本熟练了。对SQL客户端的快捷键也熟练起来。
3.庆幸自己对快捷键的执着,才能让我在极其恶劣的测试资源下,完成大量的测试工作。各种文档编辑器的快捷键可以说是测试的基本功。
我在测试机上,把开发主管的测试号改名为刘氏加班特工队,这是调侃,是无奈,也是乐观的战斗精神。面对项目的压力,你无法逃避,无法上脾气,无法去求全责备,只能尽力去融入团队,和大家一起完成目标。
测试是什么?