说明:
完全的图像识别自动化测试执行方案
原因:
1 因为window的定位是个非常大的问题,一般来说非常难,而且很多客户端还不允许探索其内部结构
2 是有几个比较好的库,但是对中文的支持实在是不太友好,未知问题太多了,虽然Sikuli对中文支持也不好,但是有合理解决方案
3 同时,考虑到学习成本与维护成本,基本上这套执行客户端自动化是最高效的,学习起来非常容易
4 同时,还可以通过RF的语法来满足很多逻辑性的功能
5 sikuli的脚本设计与写起来,比其他类型的要更快
一、 环境的依赖
RF+SikuliLibrary
官方文档:http://rainmanwy.github.io/robotframework-SikuliLibrary/doc/SikuliLibrary.html
二、自动化必备的几个功能
点击 -----sikuli关键字Click支持
输入------sikuli支持Input Text与Paste Text两种方式,由于对中文支持不好,一般选择使用paste text
断言------sikuli关键字Wait For Image 、Wait Until Screen Contain ,Wait Until Screen Not Contain等都支持
其他------如鼠标悬浮,拖拽,右键等操作,都可以找到对应的关键字来执行
三、接下来演示实际的效果
第一步:导入SikuliLibrary库
第二步:结构设计,其中最为关键的就是image的目录设计,图片的命令规范,方便后期的目标图片维护,所以关键且重要,基本核心就是这里,甚至这里要加入分辨率这个目录,或者版本号的图片目录
第三步:编写脚本
1启动客户端(可以使用直接点击快捷键的方式打开,点击关闭按钮方式关闭,也可以采用open/close application来进行)
2输入用户名
3 输入密码
4 点击登录
5 点击进入课堂(这里分可以进去,不可以进,都要进行断言,我们这里断言截图按钮的出现)
6 如果截图按钮出现,我们就点击截图
*** Keywords ***
Login
Paste text username.png xxxxxxx
Paste text password.png xxxxxxx
Click loginbutton.png
Sleep 3
gointo
Click gointo.png
Wait For Image getscreenshot.png username.png 5
Click getscreenshot.png
sleep 3
更多的案例写法如下:
*** Settings ***
Suite Setup Start Sikuli Process
Suite Teardown Stop Remote Server
Resource login_resource.robot
Library AutoRecorder mode=suite
*** Test Cases ***
login
[Setup] Add Image Path F:\\myworkspaces\\rf-letalk\\APP_Test_Tech\\Images\\LoginPage
Login
gointo
[Setup] Add Image Path F:\\myworkspaces\\rf-letalk\\APP_Test_Tech\\Images\\ListPage
gointo
logout
[Setup] Add Image Path F:\\myworkspaces\\rf-letalk\\APP_Test_Tech\\Images\\Logout
logout
get_text
[Setup] Add Image Path F:\\myworkspaces\\rf-letalk\\APP_Test_Tech\\Images\\LoginPage
${code} EVALUATE tesserocr.file_to_text('Images/LoginPage/logoname.png', lang='chi_sim',psm=8) modules=tesserocr
Log ${code}
tesserocr
[Setup] Add Image Path F:\\myworkspaces\\rf-letalk\\APP_Test_Tech\\Images\\LoginPage
Get Text logoname.png
多选
[Setup] Add Image Path F:\\myworkspaces\\rf-letalk\\APP_Test_Tech\\Images\\LoginPage
${image_count} Image Count select.png #改成remember.png可以验证识别率的准确度非常高
Log ${image_count}
Click select.png #么有好的办法暂时,一般都是百分百匹配
Click select.png
Click select.png
打开关闭
Open Application E:\\Myinstalls\\LeTalk\\LeTalk.exe
Sleep 10
#Close Application #乐桃学园
屏幕数量
${screen_count} Get number of screens
Log ${screen_count}
多图片断言
@{期望的图片} Create List wanted_1.png wanted_2.png
@{不应该出现的图片} Create List not_wanted_1.png not_wanted_2.png not_wanted_3.png
Wait For Multiple Images 10000 10 ${期望的图片} ${不应该出现的图片}
# 多图片断言 # 超时时间 # 轮询间隔
获取识别阈值
[Setup] Add Image Path F:\\myworkspaces\\rf-letalk\\APP_Test_Tech\\Images\\LoginPage
Open Application E:\\Myinstalls\\LeTalk\\LeTalk.exe
sleep 5
${score} Get Match Score select.png
Log ${score}
注意事项:
1 每个用例用到的图片不一样,所以要把指定图片路径的方法写在用例上或者测试套件上
2 每次用例的执行完成后,都要执行一个清理动作,回到最初状态,不可以留下缓存之类的
如xx学院的登录,登录后退出,会默认展示上次登录的用户名,为了用例的稳健性,每次执行完都要做一个清除动作
四、关于落地需要研讨的内容:
1 关于分辨率的要解决---(image目录设计的时候就考虑好就可以,一次截图维护,就不需要后续维护,只有UI变更才需要)
2 虽然是图像识别的模式,但是仍然是需要系统权限的,所以执行的时候要注意权限问题
3 持续集成的方便性:非常方便,由于集成到了RF框架里,所以与其他RF的持续集成方案一致
4 识别效果:提供了修改阈值的方法,一方面可以解决识别率的问题,另一方面可以解决分辨率的问题,其实我个人是不看重这个分辨率问题的,因为你落地不会有那么多节点机器给你使用的,我们一般长期在一台node机器或者自己的机器里执行的,即便公司其他同事下载执行,公司电脑也基本一致分辨率,所以根本不是问题
5 由于完全采用图像识别,所以setup与teardown的动作就非常的重要,一定要做到测试前的初始化,测试后的主动退出动作等。
6 测试中必然会产生数据,所以设计脚本的时候,一定不要让产生的数据,影响到脚本的稳健性。
五、其他很好的库,如果有小伙伴想要研究,也是可以用到项目中来的
whitelibrary
FlaUILibrary
pywinauto(偏底层了,可以封装写好,直接rf里调用,相当于重新开发一个rf库了)
....
ps:记得实战