背景
React Native是最近特别火的东西,号称一个技术解决所有难题。Facebook吧ReactNative开源后,迅速吸引了一大批人,比如我旁边的开发。他用ReactNative写了一个Android的Demo,那么我就拿这个Demo来玩玩,看看它到底是个什么东西。
安装
不知道是他拿的东西不行还是咋地,反正直接安装APK包是有问题的,运行起来是白屏,于是只能把手机给他,让他帮忙装。折腾了好久才装上。
上手
刚刚上手,感觉整个流畅度还是不错的,不过Demo太小,就一个页面,可感觉的东西很少,而且手机是高配的手机,不论怎么写,流畅度会非常不错的。
从测试的角度来看,首先它是一个Android的App,那么应该有正常开发出来的App的一些共性,比如PackageName,Activity等元素,查看了一下,果然如此。
非常好,我们要用Appium来测试的话,有这两个元素就表示肯定能把这个App启动起来。
那么我想知道这个用JS开发的App到底底层是个什么东西,有两种猜想,一种是用Android框架包装的网页合集,那就是整个App都使用WebView来展示了。另一种是经过转化,把所有的JS转化为Android,直接生成原生的内容。
对于第一种,我们要使用Appium测试,就必须要把当前会话转为WebView才行。对于第二种,就是我们非常熟悉的方式了。
我拿UIAutomatorviewer来抓取页面,发现是这样的。
那么可以很清晰的看到,这是原生的组件,并不是H5的组件。使用Appium而已轻松的自动化测试它。为了确认我的判断,我再次打开了Chrome,发现Inspector没有探测出WebView,那么可以断定,这不是一个混合App,而是一个完完整整的原生的Android应用。
简单猜想,UI层应该是直接把原生的东西封装好了,而执行方法,那就是React提供的API。
IOS暂未上手,但是应该与Android是一样的,封装原生的UI层,JS通过API与原生交互。
总结
ReactNative是一项新技术,现在版本还没有到1.0,还无法大范围推广,同理,也不会有很多公司采用它来开发app。但是作为一项有可能发展壮大的开发技术,那么作为一名测试人员,就有必要对它做一个简单的了解。
从机制上来看,ReactNative与Appium有一定的共同点,二者在某种程度上说,都是把一种开发语言翻译成另一种开发语言。ReactNative是学习一种开发语言,同时开发Android和IOS客户端,而Appium是学习一种开发语言,同时测试Android和IOS客户端。
从结果上来看,无疑是挺好的,现在的混血APP虽然对于开发来说,是一个很好的解决客户端更新的方案,但是使用Appium测起来,要多一个切换会话的过程,虽然不复杂,但是总感觉有点麻烦,反正Appium是基于UI层的测试,那么用ReactNative弄出来的APP在UI层上全都是原生,那么对使用Appium并没有什么影响,反而省了切H5的过程呢。