小程序自动化测试的示例分析

  介绍

小编给大家分享一下小程序自动化测试的示例分析,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!

背景

近期团队打算做一个小程序自动化测试的工具,期望能够做到业务人员操作一遍小程序后,自动还原之前的操作路径,并且捕获操作过程中发生的异常,以此来判断这次发布是否会影响小程序的基础功能。

<人物> 小程序自动化测试的示例分析“> <figcaption> </figcaption> </图> <p>上述描述看似简单,但是中间还是有些难点的,第一个难点就是如何在业务人员操作小程序的时候记录操作路径,第二个难点就是如何将记录的操作路径进行还原。</p> <h3数据id=氨晏?”>自动化SDK </h3> <p>如何将操作路径还原这个问题,首选官方提供的SDK: <代码> miniprogram-automator> </代码。</p> <p>小程序自动化SDK为开发者提供了一套通过外部脚本操控小程序的方案,从而实现小程序自动化测试的目的。通过该SDK,你可以做到以下事情:</p> <ul类= <李>

控制小程序跳转到指定页面

<李>

获取小程序页面数据

<李>

获取小程序页面元素状态

<李>

触发小程序元素绑定事件

<李>

往AppService注入代码片段

<李>

调用天气对象上任意接口

<李>

上面的描述都来自官方文档,建议阅读后面内容之前可以先看看官方文档,当然如果之前用过操纵,也可以快速上手,api基本一致。下面简单介绍下SDK的使用方式。

//,引入sdkconst  automator =,要求(& # 39;miniprogram-automator& # 39;)//,启动微信开发者工具automator.launch({//才能,微信开发者工具安装路径下的,cli 工具//才能,Windows下为安装路径下的,cli.bat//才能,MacOS下为安装路径下的,cli   cliPath才能:& # 39;路径//cli # 39;,,,//,项目地址,即要运行的小程序的路径   projectPath才能:& # 39;路径//项目# 39;   })(async  miniProgram =祝辞,{,//miniProgram 为,IDE 启动后的实例   ,,,//,启动小程序里的,index 页面   const 才能;page =, await  miniProgram.reLaunch(& # 39;/页面/索引/指数# 39;),,//,等待,500 ms   await 才能page.waitFor(500),,//,获取页面元素   const 才能;element =, await 页面。美元(& # 39;.main-btn& # 39;),,//,点击元素   await 才能;element.tap(),,,,//,关闭,IDE   await 才能;miniProgram.close ()   })复制代码

有个地方需要提醒一下:使用SDK之前需要开启开发者工具的服务端口,要不然会启动失败。

<人物> 小程序自动化测试的示例分析“> <figcaption> </figcaption> </图> <h3数据id=氨晏?”>捕获用户行为</h3> <p>有了还原操作路径的办法,接下来就要解决记录操作路径的难题了。</p> <p>在小程序中,并不能像网络中通过事件冒泡的方式在窗口中捕获所有的事件,好在小程序所以的页面和组件都必须通过<代码>页面</代码>,<代码> </代码>组件方法来包装,所以我们可以改写这两个方法,拦截传入的方法,并判断第一个参数是否为<代码> </代码>事件对象,以此来捕获所有的事件。</p> <pre类=//,暂存原生方法const  originPage =, Pageconst  originComponent =,组件//,改写,PagePage =, (params),=祝辞,{const 才能;names =,种(params),, for  (const  name  of 名称),{,,,//,进行方法拦截   ,,,if  (typeof  obj[名字],===,& # 39;函数# 39;),{   ,,,,,params[名字],=,hookMethod(名字,,params[名字],假)   ,,,}   ,,}   originPage才能(params)   }//,改写,ComponentComponent =, (params),=祝辞,{if 才能;(params.methods), {,,,,, const  {, methods },=, params ,,,,, const  names =,种(方法),,,,,,for  (const  name  of 名称),{,,,,,,,//,进行方法拦截   ,,,,,,,if  (typeof 方法[名字],===,& # 39;函数# 39;),{   ,,,,,,,,,方法[名字],=,hookMethod(名称,方法[名字],,真的)   ,,,,,,,}   ,,,,,}   ,,}   originComponent才能(params)   }const  hookMethod =,(名称,方法,isComponent),=祝辞,{return 才能;函数(…args), {,,, const  (evt),=, args //,取出第一个参数   ,,,//,判断是否为,event 对象   ,,,if  (evt ,,, evt.target ,,, evt.type),{,,,,,//,记录用户行为   ,,,},,,,return  method.apply (,, args)   ,,}   }复制代码

小程序自动化测试的示例分析