本文采用微信开发者工具和minium进行编码
官方文档:小程序云测-MiniTest
pip install minium
4. 找开发要源代码
1. cases: 测试用例基类和公共方法
BaseCase.py: 测试用例的基类
BasePage.py: 页面的公共方法
2. outputs: 测试报告存放目录
3. pages: 页面元素和动作,一个页面一个类
4. test: 测试用例
5. route.py: 公共路径
6. config.json: 项目配置
7. suite.json: 批量运行配置
1. 编写配置文件 config.json
{
"project_path": "D:/workspace/csx-taro-bbc/miniapp", # 小程序源代码路径
"dev_tool_path": "D:/WXKFZGJ/kfzgj/cli.bat", # 微信开发者工具路径
"platform": "ide", # 运行平台
"outputs": "outputs", # 日志输出目录
"debug_mode": "warn" # 日志打印级别
}
2. 编写 suite.json 批量运行文件
{
"pkg_list": [
{
"case_list": [
"test_*"
],
"pkg": "test.*_test"
}
]
}
3. 首先编写测试用例的基类: cases-->base--> BaseCase.py ; 继承minium.MiniTest
# 重写miniumTest中的setUpClass、tearDownClass、setUp、tearDown方法
from pathlib import Path
import minium
# 初始化类
class BaseCase(minium.MiniTest):
'''测试用例基类'''
@classmethod
def setUpClass(cls):
super(BaseCase, cls).setUpClass()
output_dir = Path(cls.CONFIG.outputs) # 获取outputs
if not output_dir.is_dir(): # 判断outputs是否是目录
output_dir.mkdir()
@classmethod
def tearDownClass(cls):
super(BaseCase, cls).tearDownClass()
cls.app.go_home()
def setUp(self):
# super(BaseCase, self).setUp()
pass
def tearDown(self):
# super(BaseCase, self).tearDown()
pass
4. 编写页面的公共方法: cases-->base-->BasePage.py
# 定义一些公共方法
import time
class BasePage:
def __init__(self, mini):
self.mini = mini
self._build_elements()
self._build_actions()
def sleep(self, seconds):
"""延时"""
time.sleep(seconds)
return self
@property
def current_page(self):
""" 获取顶层元素 """
return self.mini.app.get_current_page()
""" 获取元素 """
def get_element(self, selector, inner_text=None, text_contains=None, value=None, max_timeout=20):
return self.mini.app.get_current_page().get_element(selector, inner_text=inner_text,
text_contains=text_contains,
value=value, max_timeout=max_timeout)
""" 获取指定所有元素 """
def get_elements(self, selector, inner_text=None, max_timeout=20):
return self.mini.app.get_current_page().get_elements(selector, inner_text=inner_text, max_timeout=max_timeout)
'''跳转到指定页面'''
def navigate_to_open(self, route):
self.mini.app.navigate_to(route)
return self
'''跳转到指定页面并关闭当前页面'''
def redirect_to_open(self, route):
self.mini.app.redirect_to(route)
return self
'''跳转到tabbar页面,关闭其他非tabbar页面'''
def switch_to_tabbar(self, route):
self.mini.app.switch_tab(route)
return self
'''跳转到非原生tabbar页面'''
def switch_to_not_tabbar(self, selector, str=None):
self.mini.page.get_element(selector, inner_text=str).click()
return self
@property # 获取当前路径
def current_path(self):
return self.mini.page.path
def _build_elements(self):
# 首先用self.__class__将实例变量指向类,然后再去调用Elements类属性
self.elements = self.__class__.Elements(self)
def _build_actions(self):
self.actions = self.__class__.Actions(self)
class Elements(object):
""" 页面元素类 """
def __init__(self, page):
self.page = page
def sleep(self, seconds):
self.page.sleep(seconds)
return self
class Actions(object):
""" 页面动作类 """
def __init__(self, page):
self.page = page
def sleep(self, seconds):
self.page.sleep(seconds)
return self
5. 编写pages--> pagesclass.py; 封装页面的元素和动作
from cases.base.BasePage import BasePage
# 继承页面的公共方法
class shoppingTrolleyPage(BasePage):
class Elements(BasePage.Elements): # 继承页面公共方法中的Elements类
@property
def lifting(self): # 每一个元素都定义一个函数
""" 购物车页面选择配送方式为 自提 """
text_class = "text#_n_205"
return self.page.get_element(text_class, inner_text="自提")
class Actions(BasePage.Actions): # 继承页面公共方法中的Actions类
def click_lifting(self): # 每一个动作都定义一个类
""" 点击自提 """
# self.page=object; elements(此时是Elements类)
self.page.elements.lifting.click()
return self
6. 编写测试用例 test-->pageclass_test.py
import minium
import route
from cases.base.BaseCase import BaseCase
from pages import pageclass
@minium.ddt_class
class ClassifyPagetest(BaseCase):
def __init__(self, methodName):
super(ClassifyPagetest, self).__init__(methodName)
self.shoppingpath = pageclass.shoppingTrolleyPage(self) # 调用页面元素和动作
def test_ClassifyPath(self):
# 进入购物车
self.shoppingpath.switch_to_tabbar(route.cartPage).sleep(5)
# 点击自提
self.shoppingpath.actions.click_lifting().sleep(2)
7. 终端执行用例
minitest -m test.pageclass_test -c config.json -g # 单个执行
minitest -s suite.json -c config.json -g # 执行套件
python -m http.server 12345 -d outputs # 测试报告;浏览器输入 http://localhost:12345 访问