微信小程序自动化测试:自定义测试(Minium)
点击文末小卡片免费获取软件测试全套资料资料在手涨薪更快录制回放支持输入文本查找断言等自动化测试基础操作无需编写代码用例生成效率高但是部分操作不支持对复杂业务场景有局限性。如果用户希望适用复杂的业务场景自主制定测试场景可以尝试 自定义测试Minium方案。小程序测试框架 Minium 是微信测试团队为小程序开发或测试同学提供的一套测试接口它实现了miniprogram-automator 中小程序自动化所有能力如可以直接触发小程序页面元素设置页面数据向AppService注入代码片段Mock/Hook wx对象的接口等。此外他还支持并封装了所有的原生操作都进行了封装屏蔽了iOS/Android底层差异实现了一套脚本在三端同时运行。用户写好的Minium脚本可以再本地执行也可以直接上传到微信小程序云测服务执行无需准备和维护真机环境。一、编写用例编写小程序自动化测试脚本常见操作包括基本操作如页面跳转元素定位及相关操作处理小程序API处理小程序的原生控件如处理授权弹窗支持数据驱动测试基本操作对小程序页面元素定位元素操作或页面跳转等。简单的UI测试例如以下用例class FirstTest(minium.MiniTest): def test_network(self): # 页面跳转 self.app.navigate_to(/packageAPI/pages/get-network-type/get-network-type) # 元素定位 ele self.page.get_element(button, inner_text获取手机网络状态) # 元素点击 ele.click() # 打印元素文本 self.logger.info(self.page.get_element(/page/view/view[2]/view/view[1]/text).inner_text)处理小程序APIMinium框架提供处理小程序开放API方法根据需求选择相应方法例如mock_wx_method() — mock掉小程序API的调用hook_wx_method() — hook小程序API的调用call_wx_method() — 调用小程序的API…更多接口方法参考 Minium接口调用小程序API获取回调信息用例例如class FirstTest(minium.MiniTest): def test_call_wx_method(self): 调用小程序API获取回调对象 :return: sys_info self.app.call_wx_method(getSystemInfo).get(result, {}).get(result) self.assertIsInstance(sys_info, dict, is dict) self.assertTrue(True if sys_info else False, not empty)处理小程序原生控件Minium提供了针对小程序内涉及原生控件(授权弹窗、弹窗、地图、分享小程序等)的操作封装注意部分封装的接口暂不支持IDE平台调用。若跑测平台是IDE则需要在config.json中配置mock_native_modal配置项后通过mock的方式实现处理模态弹窗用例示例如下class FirstTest(minium.MiniTest): def test_native(self): self.mini.clear_auth() self.app.redirect_to(/pages/testnative/testnative) called threading.Semaphore(0) callback_args None def callback(args): nonlocal callback_args called.release() callback_args args # hook showModal方法获取回调后执行callback self.app.hook_wx_method(showModal, callbackcallback) self.page.get_element(#testModal).tap() time.sleep(2) # 点击弹窗 确定 self.native.handle_modal(确定) is_called called.acquire(timeout10) # 释放hook showModal方法 self.app.release_hook_wx_method(showModal) self.assertTrue(is_called, callback called) self.assertDictContainsSubset( {errMsg: showModal:ok, cancel: False, confirm: True}, callback_args[0])跑测平台IDEconfig.json 配置 mock_native_modal 示例如下mock_native_modal: { showModal: { title: test modal, content: modal content }, }数据驱动自动化测试往往需多组数据测试若采用录制回放测试则需录制多个用例不够灵活所以若需测试同一个用例不同组测试数据可使用**数据驱动DDT**模式实现测试数据与测试脚本的分离通过DDT将测试数据加载到脚本中。数据驱动DDT有以下优点灵活配置测试数据与功能代码分开易维护下面是我们集成数据驱动测试(基于ddt封装)的例子minium.ddt_class class BaseTest(minium.MiniTest): minium.ddt_case([], [1, 2]) def test_evaluate_sync(self, args): 向 app Service 层注入代码 同步返回结果 :param args: :return: # 参数 args: [] args: [1, 2] result self.app.evaluate( function(...args){return test evaluate: ${args}}, args, syncTrue ) self.assertEqual( result.get(result, {}).get(result), test evaluate: {}.format(,.join(args)) )此外还能给具体的 test data 命名自定义命名会体现在测试方法名中。数据驱动详情可参考 测试流程控制 数据驱动测试二、执行用例开发者编写完 Python 用例脚本后可本地调试也可在云测上测试。本地执行开发者将编写好的用例进行本地调试minitest命令加载用例初始化环境开启自动化能力进行环境检查后执行用例。需IDE依赖支持USB真机调试。在初始化环境过程中遇到常见问题如下开发者工具没有自动打开先排查开发者工具自动化能力进行环境检查配置了真机环境但无法拉起真机上的小程序排查是否使用了真机调试2.0如果是切换回真机调试1.0报错traceback中有出现 _miniClassSetUp 的调用确认下开发者工具上选用的基础库是最新的开发者工具项目窗口右上角 - 详情 - 本地设置 - 调试基础库Minium为了保证同一套代码在IDEAndroidIOS上运行环境组成比较复杂所以测试用例的运行依赖于配置文件。支持配置运行平台、IDE监听端口号、连接手机的参数、账号信息、自动处理授权弹窗等等可参考 项目配置执行完用例后会生成日志文件提供本地测试报告包括截图、运行日志、错误日志。具体实践可参考示例云测服务测试开发者可以将本地调试好的用例上传至云测新建测试计划新建Minium任务可选择多平台真机且支持多平台同时运行无需用户部署和维护真机环境。测试结束后云测服务提供详细的测试报告包括运行截图、日志信息网络请求分析性能分析等。当用例执行失败时会提供错误日志及错误行代码方便用户排查错误原因。具体操作可参考云测官方文档 自定义测试对比三、最佳实践小程序开发者有两种第一种是普通开发小程序由小程序拥有者自行开发。还有一种是第三方服务商小程序拥有者可以授权给他们代开发小程序。对于第三方服务商测试团队来说他们面临的情况会更加复杂。例如在明源云的测试团队中授权给他们开发的地产开发商小程序非常多1000并且每个小程序的页面数量也很多手工测试显然无法覆盖业务需求。明源云测试同学希望可以利用自动化测试能力解决这个问题。如果用微信小程序自动化测试——录制回放的方案每个页面都需要手动录制耗时耗力。这里他们使用了Minium框架编写自定义测试用例目前已经有 90 用例执行。在编写用例时采用了Page Object模式简称PO模式将测试用例和页面元素定位、元素、元素操作等分离提升用例复用性降低维护成本。在具体执行用例过程中他们将云测服务和内部的devops流程打通利用云测第三方接口定时触发或者自动触发自动化任务然后利用查询任务接口再将测试结果同步到内部的用例管理平台如果有问题提单给程序修复实现整个流程闭环。四、总结自定义测试Minium的核心优点完全自主定制测试场景灵活度高支持数据驱动测试结合云测服务可以无需用户部署维护真机环境并且提供详细的测试报告并提供第三方接口方便用户打通devops流程智能化Monkey录制回放测试自定义测试Minium三种自动化测试能力各有优缺点如下所示最后祝大家都能找到心仪的工作快乐工作幸福生活广阔天地大有作为。最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走这些资料对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你凡事要趁早特别是技术行业一定要提升技术功底。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2467082.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!