【minium】微信小程序自动化之旅 (二)

552 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

最近在研究微信官网提供的用于微信小程序的UI自动化测试框架 minium,感兴趣的伙伴可以一起哦~

接着上章,minium提供一个基于unittest封装好的测试框架MiniTest,本章就来使用这个测试框架。

MiniTest框架使用

我们先在项目目录下新建一个文件config.json,然后将上节demo中的配置移动到config.json中。更多的配置参数可查看官方文档

接着在项目目录下创建一个文件夹testcase用来存放测试用例,在testcase下创建测试用例文件first_case.py,首先使用官方提供的一个例子如下:

import minium


class FirstTest(minium.MiniTest):
    def test_get_system_info(self):
        sys_info = self.mini.get_system_info()
        self.assertIn("SDKVersion", sys_info)

这里有个要注意的点,不能直接在IDE上直接允许这个单元测试方法。这样无法加载配置文件。

通过在终端中输入命令minitest -m testcase.first_case -c config.json -g执行测试用例。-m指定测试用例模块,-c指定配置文件,-g生成网页测试报告(想了解更多配置,可以查看官方文档命令行工具

执行完成后,可以发现项目目录下会生成outputs文件夹,这个文件夹是用来放测试报告相关文件的,可以通过命令python3 -m http.server 12345 -d outputs启动一个服务器来查看报告,查看网址http://localhost:12345/就可以看到对应的测试报告了,如下:

如果想要直接在IDE中启动,可以在项目目录下新建一个test_runner.py文件,主要作用就是扫描testcase文件夹下以_case结尾的测试用例文件,加入到测试套件中运行。

import unittest

if __name__ == "__main__":
    loader = unittest.TestLoader()
    tests = loader.discover(start_dir='testcase', pattern='*_case.py')
    loaded_suite = unittest.TestSuite()
    loaded_suite.addTests(tests)
    unittest.TextTestRunner().run(loaded_suite)

这样就可以通过运行test_runner.py文件执行测试用例了。然后通过命令minireport outputs outputs根据输出的测试结果生成网页测试报告(相当于命令行中-g参数的作用)。

真机调试

Android

首先要安装SDK,具体安装步骤可参考Android SDK安装指南。通过数据线将真机连接到电脑,在手机的开发者工具中,打开调试模式,然后使用adb devices命令查看,当状态为"device",则说明可以调试了。

在项目配置文件config.json中新增如下参数,如果当前电脑只连接了一台Android机,则device_desire字段可以省略:

{
  "project_path": "/Users/huyanping/projects/minitest/wxapp",
  "dev_tool_path": "/Applications/wechatwebdevtools.app/Contents/MacOS/cli",
  "platform": "Android",
  "device_desire": {
    "serial": "9HQ4C19911001448"
  }
}

再次启动上面的first_case测试用例。这里要注意,真机上需要安装微信,并且要与微信开发者工具登陆微信号一致。

启动项目后,真机会自动安装WeAutomator工具,安装完成后,会通过微信开发者工具进行真机调试模式,真机上自动打开对应的小程序就成功啦,如下图。

ios真机调试比较复杂,感兴趣的可以查看官方文档说明

元素定位

首先打开微信开发者工具,点击页面上的【表单-form】,右侧调试器中选择「Wxml」就可以看到对应的小程序DOM结构了,如下图

minium提供了几种定位元素的方式,具体可查看官方文档说明,这里演示一个小例子,定位到【获取验证码】按钮,并且点击。

  • 复制【表单-form】页面路径,后面代码中可以直接跳转到这个页面。

  • 通过调试器查看元素的结构,这里可以通过class去获取元素

  • FirstTest内新增一个测试用例test_click_btn如下
class FirstTest(minium.MiniTest):
    def test_get_system_info(self):
        ...

    def test_click_btn(self):
        # 跳转到指定页面
        self.app.navigate_to("/pages/others/form/form")
        # 获取当前页面
        page = self.app.get_current_page()
        # 指定等待时间
        page.wait_for(10)
        # 根据class获取元素 tagname.classname
        e = page.get_element("view.weui-vcode-btn")
        # 点击元素
        e.click()
  • 最后运行项目,就可以看到效果啦~