我们的日常生活离不开手机,有些同学喜欢用国产的安卓机,而另一些同学喜欢用简约的iPhone。
对比安卓和iOS的软件生态,我们可以发现:安卓软件的投放渠道繁多,题材花样繁复,质量大小不一,而iOS的投放渠道则为App Store独家,相对安卓软件来讲,不仅质量均衡,而且用户不必担心手机病毒的困扰。这一点,就归功于App Store严格的审核制度。
我们的日常生活离不开手机,有些同学喜欢用国产的安卓机,而另一些同学喜欢用简约的iPhone。
对比安卓和iOS的软件生态,我们可以发现:安卓软件的投放渠道繁多,题材花样繁复,质量大小不一,而iOS的投放渠道则为App Store独家,相对安卓软件来讲,不仅质量均衡,而且用户不必担心手机病毒的困扰。这一点,就归功于App Store严格的审核制度。
Github传送门
学一门新语言,如果太专注于语法,那肯定学的不够快。如果有一定的需求目标,带着这个目标去学习一门新语言,这样才能学得快。
工作中写后端的时间比例不在少数,而且传闻Go也因其适用于服务端而著名。在Go社区中最为火热的服务端框架跟数据库抽象ORM层当属gin跟gorm了,因此本期单排的目标便是用gin+gorm打一个简易的框架,实现基本CRUD的目标。走你~
在第一话中已经大致了解了Go项目的生成,故本次gin+gorm的搭建也以此为基础。
服务端领域的各种术语在不同的场景跟技术栈下有不同的含义。但总体来讲,一个简单的服务端App都会有以下的层次:
基于以上结构,大致构建了以下的目录结构:
近几天一直在思考什么是用户思维,决定结合这一年的工作,把自己的想法记录下来。
在这之前,自己一直秉持一种观念——测试开发从工作内容上,更加符合“开(码)发(农)”的定义,因此应当更加着重于技术深耕,并且在业务对接时,也尽可能地从从技术实现的角度去阐述观点与想法。但是在经过同事伙伴们的提点,以及和家中领导激烈讨(吵)论(架)了一番之后,这个观念就慢慢地改变了。
测试,不仅仅是根据需求,利用各种工具,对开发交付的产品进行功能、性能、安全等测试,发现bug而后提交复现/解决方案,从而确保产品稳定(QC)。而另一些方面在于——如何确保研发计划完备进行,预防产品设计缺陷,从而保证产品体验;如何优化产品生命周期流程,从而使产品顺利上线运营(QA)。作为偏中台的测试开发,扮演的角色更像是“优化产品生命周期”的实现者,而前线上的QA与QC,则成为了我们的用户。因此在业务对接时,首先都需要尽可能满足前线同学的需求,让他们引领效率工具/平台的设计。
Github传送门
当测试开发真不容易,入行第一年,就要在python、NodeJS、lua、C、Java等语言间无缝切换。为了快速响应需求,挺难抽出时间去深耕一门语言的特性(诶羡慕那些只搞Java的人= =)。在MTSC2019分享中也谈到,测试开发归属质量保障QA,作为一个中台角色,其终极任务保障研发效能,因此一大需求是打通产品研发运维的生产线。说到生产线就想到上云,说到上云就想到docker跟kube,说到跟容器的交互就想到了Golang。马蛋,又要学一门新语言了。
开这个坑,旨在展现以程序员的视角学习一门新语言的过程。希望大家看得欢乐。如果有启发,那就更棒啦!
家里的电脑是Windows,从官网即可下载Win的安装包。Go的版本为1.12。
下好后安装,安装完毕之后还需要设置环境变量(我的电脑——属性——高级系统设置)。GOROOT
设置成Go的安装路径,还有一个关键的GOPATH
,它表示你的工作目录,一般所有的Go项目,甭管第三方的还是你的,都统一放到这个目录下(从这点可以看出,Go的控制欲还是很强的)。GOPATH
的一般结构如下:
安卓的fps测试,是我打开测试开发大门的一把钥匙。两年前的现在,安卓性能测试的相关资料甚少,以fps为例在网上也只有寥寥几篇文章讲述,但到了今年,已经有许多资料在各大技术论坛上供大家看到了。对于自己,一直想找一个机会把这一段技术探索写出来。所以,心动不如行动。
fps(frames per second),通常表示我们屏幕每秒展现的图片(帧)数,反映了一款应用在当前硬件下的性能消耗。比如我们抽CS的时候,就经常关注fps是否高,在高的情况下,就会有较好的流畅度。因此fps是应用性能测试中一个重要指标。
对于一个安卓app而言,为了测定fps数值,我们需要从安卓图形显示相关的模块入手。一个通用的方式是切入安卓的SurfaceFlinger服务,它是图形显示流程中软件层和硬件层的交互点,是极其关键的一环。SurfaceFlinger则是负责分析&合成各个app中的图层,而后将合成的图像数据交由硬件渲染。硬件渲染的机制复杂,因此安卓系统中,将硬件操作进行了抽象方便调用,我们将这一与SurfaceFlinger对接的层次,称之为硬件抽象层(HAL)。SurfaceFlinger与HAL在功能上有部分的耦合,一些Surface合成的工作,也会委托HAL进行。
那么我们该如何通过SurfaceFlinger获得fps数据呢?大体上,我们可以参考《Android性能测试之fps获取》一文。这种方式成功率高(虽然我家手机行不通),且不用root,较为方便
首先,通过adb,我们可以导出SurfaceFlinger服务的运行时信息。
“测试人生”第一篇文章,献给2019年的移动测试开发大会MTSC。这一次,非常荣幸能够来到北京国际会议中心参会,一睹国内质量保障工作的现状与未来的发展趋势。
在学校期间,我也参与过一些小型的学术会议,但并不如今年的MTSC这样声势浩大。工作一年以来参与的第一个讨论会,已然是全国顶会。借这个机会,能够了解到业内排头企业在质量保障业务上的解决方案,对于自己在业务理解上会颇有帮助。本次议程中,除了参与第一天主会场之外,第二天游戏测试专场也全程参与,收获颇丰,感悟良多,一言难尽。
在lua的学习过程当中,元表metatable的概念及用法是常见的障碍之一
元表,在其它lua杂谈等都提到过,是一种描述lua数据的属性以及行为的表。虽然官方给了set、account等例子详细讲解了metatable,但总还是缺乏些提炼。为了干翻这个痛点,这次,果断强上metatable的精髓。毕竟,犹豫就会败北~
我们首先就会有疑问:通过哪些属性指标,可以描述lua的数据呢?通过官方手册,我们可以很容易地找到答案。
在lua中,我们把元表中的key,也就是描述数据的属性指标,称之为event
我们可以把所有的event分为两组(括号中代表lua里的语法):
描述其基础性质的:
__index
,__newindex
__len(#)
__call
__tostring
描述其运算的:
__add(加+)
,__sub(减-)
,__mul(乘*)
,__div(除/)
,__mod(模%)
,__pow(乘方^)
,__unm(负-)
,__idiv(取整除//)
__band(与&)
,__bor(或|)
,__bxor(异或~)
,__bnot(非~)
,__shl(左移<<)
,__shr(右移>>)
__concat(联结..)
,__eq(全等==)
,__lt(小于<)
,__lte(小于等于<=)
先来看一段程序吧~