我这是一家手游公司, 前端使用 unity,appium 之类框架的都无法识别 unity 控件,最后得知网易 airtest 下面的 poco 框架可识别 unity 控件。
由于之前没有相关经验靠自己摸爬滚打,走了很多弯路,代码结构/框架也重构了几次(现在还想重构 )。
在设计之初有过很多构想,觉得应该满足那些要求:
了解到 Page Object 模式很主流,很火。然后使用 yaml 数据驱动,很炫酷,高大上的样子(想立马就应用到项目中)
但任何技术最终还要是服务于业务,是要能解决某些或某类问题
这里以我对 po 模式非常浅显的理解和我当前的做法做了个对比:
po 模式 | 当前搞法 | |
---|---|---|
代码量 | 多 两倍以上 | 少 |
复杂度 | 较复杂 | 简单明了 |
ui 变化 | 修改简单 | 修改简单 |
单看表格可能看不懂哈,直接贴 python 代码如下:
省去了 case 前置界面准备,前置数据准备
data_0 = [
['0', '每有一个进攻战术达到<color=#fca926>10级</color>,\n球队进攻<color=#fca926>+0</color>', '1', '15001', 9],
['1', '每有一个进攻战术达到<color=#fca926>10级</color>,\n球队进攻<color=#fca926>+1</color>', '2', '15002', 9],
['2', '每有一个进攻战术达到<color=#fca926>10级</color>,\n球队进攻<color=#fca926>+2</color>', '4', '15003', 9],
['3', '每有一个进攻战术达到<color=#fca926>10级</color>,\n球队进攻<color=#fca926>+4</color>', '6', '15004', 9],
['4', '每有一个进攻战术达到<color=#fca926>10级</color>,\n球队进攻<color=#fca926>+6</color>', '9', '15005', 9],
['5', '每有一个进攻战术达到<color=#fca926>10级</color>,\n球队进攻<color=#fca926>+9</color>', '12', '15006', 9],
['6', '每有一个进攻战术达到<color=#fca926>10级</color>,\n球队进攻<color=#fca926>+12</color>', '16', '15007', 9],
['7', '每有一个进攻战术达到<color=#fca926>10级</color>,\n球队进攻<color=#fca926>+16</color>', '20', '15008', 9],
['8', '每有一个进攻战术达到<color=#fca926>10级</color>,\n球队进攻<color=#fca926>+20</color>', '25', '15009', 9],
['9', '每有一个进攻战术达到<color=#fca926>10级</color>,\n球队进攻<color=#fca926>+25</color>', '30', '15010', 9],
['10', '每有一个进攻战术达到<color=#fca926>10级</color>,\n球队进攻<color=#fca926>+30</color>', '0', '0', 0],
]
@allure.story('战术素养')
@allure.title('升级常规进攻素养0-10级')
@user3ize('level, des, number, style, t_book', data_0)
def test_0(self, mt, level, des, number, style, t_book):
poco = mt.poco
poco("Content").child("TacticsStyleItem(Clone)")[0].click() #选中常规进攻素养
assert poco("Content").child("TacticsStyleItem(Clone)")[0].child('GiftType').get_text().split('.')[1] == level
#检查当前进攻素养的等级是否正确
assert poco("DetailPanel").child("CurrentEffect").child('Desc').get_text() == des #断言当前进攻素养的文案内容是否正确
if level != '10':
poco("UpgradePanel").child("UpgradeBtn").click() #点击升级按钮
poco("Content").child("TacticsStyleItem(Clone)")[0].click() #点击跳过动画
assert mt.sql.select(SQL_1_0+style)[1][0] == t_book, SQL_1_0+style #查看数据库对应类型道具应该减少一个
assert poco("CurrentEffect").child('Desc').get_text().split('+')[1].split('<')[0] == number #升级后加成的数值是否正确
else:
assert poco("UpgradePanel").child("UpgradeBtn").child("Label").get_text() == "已满级" #满级时应不能升级
这样看来,po 模式会更加繁琐,笨重,好像 po 模式没有什么优势。 请有这方面经验的朋友解惑一下