# 这也许是最硬核的自动化测试机器人




当你用chrome浏览网页的时候，你可能会经常遇到这样的一幕。

没错，这就是没网络时候的默认的界面。

不过有多少人知道在这里点一下空格键，你将会开启一个全新的游戏的世界。没错了，这里google放了一个小小的彩蛋，当没网络提示出现之后，按空格键将会启动一款名叫dino的网页小游戏。

这款游戏玩起来非常简单，玩家扮演一只名为dino的小暴龙，dino每天的工作就是不断的向前跑(脑补BGM:向前跑 迎着冷眼和嘲笑，生命的广阔不历经磨难怎能感到.....)，这一路艰难险阻，会突然出现各式各样的大小仙人掌等障碍物，玩家需要操控dino上蹿下跳来躲避这些未知的危险。游戏操作非常简单，只需要用到空格键或者向上的箭头键，节奏明快，很上头，一不小心就会玩很久。

除了断网的时候可以跟dino小恐龙不期而遇之外，我们还可以在chrome浏览器里输入```chrome://dino/```，这样就可以直接打开游戏了。

这款彩蛋小游戏其实很多人都知道了，而且也有不少人手上把玩过一番，大家可以把自己的最高分留言在评论区里，比一比谁更无聊。说起冲击高分，最近我看到有个老外搞了套硬核的自动系统，号称可以独孤求败，把这款游戏玩到天荒地老。废话不多说，直接上视频。

小朋友，你是不是有很多的问号？

这个是怎么实现的呢？

其实我也不知道。不过我猜也许这是通过树莓派+传感器实现的，具体原理可能是

* 利用光感电阻和电容进行串联，实现测光的效果，可以设计成也是有光的时候是高电频，弱光的时候是低电频
* 当光敏电阻识别到是弱光的时候，发送指令给机械臂，按下空格键，实现dino跳跃的效果

所以理想情况下你只要会设计电路，熟悉树莓派编程，外加上运气好，你就可以实现同样的效果了。

是不是有点硬核？不过这套系统可能会存在这样的问题，就是在外部的光线情况变化了的情况下，比如晚上光源比较弱的时候，这套系统可能就没办法工作的很好了，因为那时候dino可能会不停的跳来跳去，变成一只飞翔的恐龙，降落的时候踩到仙人掌，那可就game over了。

瑕不掩瑜，这个例子告诉我们，只要脑洞够大，我们日常工作生活中能用到自动化的地方其实会有很多。世界上不缺乏需求，缺的是发觉需求的能力以及实现需求的勇气。记得当初在宜家里看到过自动测试柜门的机械臂（大概是这个，记的不是很清楚了），就是让机械臂不停的去开关柜门，进行持续的磨损测试，这种测试只能机器去做了，这是自动化的典型应用场景。另外我也有过耳闻有团队使用树莓派加温度传感器去自动化测试手机温度的案例。

dino玩到后面难度其实会增加的，恐龙移动的速度会随着分数的提高越来越快，这时候可能要通过调整光感电阻的位置来实现提前跳跃的功能，所以上面的装置应该并不是可以一帆风顺的直接跑下去的。另外第二关整体的背景会变成黑色，这对光感电阻也是很不友好的，那么有没有什么办法可以让dino一直跑下去跑到天荒地老呢？

答案是有的，看下面的视频。

在这个视频里，我其实就是做了3件事情

* 把障碍物小仙人掌的y坐标改成0，这样小仙人掌就飞升了 ```Obstacle.types[0].yPos = 0```
* 把障碍物大仙人掌的y坐标改成0，这样大仙人掌就飘走了 ```Obstacle.types[1].yPos = 0```
* 把障碍物翼龙的各种坐标改成0，这样就飞龙在天了 ```Obstacle.types[2].yPos = [0, 0, 0]```

这样一来所有的障碍物都成了热气球，dino就可以永远的奔跑下去了吧。

说回测试，上面的例子在游戏测试中其实有可能会用到，这是一种简单的跑关的方式。

在做游戏测试的时候，我们需要验证我们的关卡设计是不是符合预期的，关卡设计中的梗能不能被玩家get到，比如dino的后面关卡中的深色背景梗，这时候就需要我们有快捷的方式去把所有的关卡跑通，而上面把障碍物全部放风筝的做法就可以很好的让关卡一直跑下去，简单的人工介入之后就可以做基本的测试和检查了。另外在一些游戏里会有一些经典的bug或者秘籍，比如魂斗罗的上、上、下、下、左、右、左、右、B、A、B、A 30条命秘籍，这些也许是当初为了测试游戏时候为了大幅度降低游戏难度，从而减少跑关时间所留下的后门。这种后门其实在软件开发领域很常见，比如测试环境上的万能验证码后门。

无论是硬核的树莓派周边解决方案，还是代码流的改运行时的方法，我们的初衷都是遇到问题，然后解决问题。

使用自动化的方式去提升测试效率，解决测试工作中遇到的特定问题，这是大家都广泛认可的观点和方案。有时候自动化做不好，可能并不是工具的锅，而是大家也许没有把有限的精力和能力用在最合适的场景上吧。




原始封面

![课程图片](https://images.unsplash.com/photo-1509565840034-3c385bbe6451?w=300)


