持续创作,加速成长!这是我参与「掘金日新计划 · 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()
- 最后运行项目,就可以看到效果啦~