一、LuckyFrame简介
LuckyFrame自动化测试平台是一款采用 AGPL 3.0开源协议的测试平台,目前已做到全纬度覆盖了接口自动化、WEB UI自动化、APP自动化,并且可以支持分布式测试。LuckyFrame采用测试关键字驱动方式,可以简单高效的实现测试自动化,这在很大程度上解决了测试同学代码基础薄弱的问题。
同时也集成了质量管理相关的一些功能,适用于QA的日常项目过程数据的收集,并且可以展示一些基础的质量报表。
最新发布版本,实现客户端服务端之间使用 netty 进行通信,突破了内外网的限制,将全面支持服务端部署在云端,客户端部署在本地,并且本地启动客户端后,将会在服务端自动注册,只需要配置客户端项目,即可使用,方便快捷。
1. LuckyFrame使用流程
二、Web UI自动化
1. Web页面元素定位
(1) 定位工具
直接使用浏览器中的查看元素功能(F12),Firefox也可使用定位工具(对版本有要求)。Chrome、Firefox、Edge、高版本IE等主流浏览器均支持元素搜索功能,低版本IE不支持元素搜索。 我们自动化测试,主要通过获取Web页面元素,并对元素对象进行操作来实现。因此,编写自动化脚本需要一定的HTML/CSS前端知识,帮助实现定位Web页面元素。
(2) 定位示例
说明:LuckyFrame支持六种定位语法,包括:id/name/xpath/linktext/tagname/cssselector。
下面用某系统登录界面,示例说明。
示例1-id定位:登录页面用户名输入框页面源码
<input type="text" id="username" name="username" class="required" value="" placeholder="请输入登录名">
id定位表达式(包路径|定位路径):id=username
示例2-name定位:登录页面用户名输入框页面源码:
<input type="text" id="username" name="username" class="required" value="" placeholder="请输入登录名">
name定位表达式(包路径|定位路径):name=username
示例3-xpath定位:① 录页面用户名输入框;② 登录页面【还没有账户,注册】按钮
说明:xpath定位功能非常强大,几乎可以找到页面上的所有元素。
语法://tag[@attribute=‘value‘] 或 //tag[text()=‘value’] 或 //tag[contains(@attribute,’value’)]
(1) “//”表示相对路径。下级任何子节点或者任何嵌套子节点中的一个,中间可以跳级;
(2) “@”表示选区标签的属性;
(3) “text()”表示可见文本值,文本的内容要完全匹配,包括空格等特殊符号;
(4) 定位“class”标签属性时,表达式中属性值的内容要与页面“class”属性值内容完全匹配,包括空格等特殊符号。
① 页面源码:
<input type="text" id="username" name="username" class="required" value="" placeholder="请输入登录名">
xpath定位表达式(包路径|定位路径):xpath=//input[@id=‘username‘]
② 页面源码:
<a href="/eip-ai-talk-web-view/user/reg/index" style="padding-left: 60%">还没有账户,注册</a>
xpath定位表达式(包路径|定位路径):xpath= //a[text()=‘还没有账户,注册‘] 或xpath=//a[contains(text(),‘注册‘)]
2. Web UI自动化用例语法
LuckyFrame是时下主流的一款开源自动化测试平台,能够实现Web UI、移动端、接口等多类型自动化测试。但其官方使用手册内容有限,在此根据使用经验,总结出关于Web UI用例编写的常用语法详解。
(1)说明:本语法使用范围:【测试管理】→【用例管理】→【用例步骤】,用于编写用例步骤,制定的语法规范。编写用例步骤界面如下图。
用例步骤编写要素:包|定位路径、方法|操作、参数、步骤动作、预期结果、类型、扩展字段、操作。
“操作”可对步骤进行以下操作,如下图:

(2)关键字语法结构
关键字就是LuckyFrame平台中编写自动化测试用例时的页面使用说明,以Web UI自动化测试用例为例,关键字包括:步骤、包|定位路径、方法|操作、参数、步骤动作、预期结果、类型、扩展字段、操作。
下表对每个关键字用法做说明。
(3) 常用Web UI定位
Web UI自动化测试,是通过对Web页面元素的抓取,再对元素进行操作的方法,实现对Web UI人工测试的模拟的,因此,围绕“方法|操作”总结部分常用的方法使用语法。对于以上9个关键字,在编写Web UI自动化测试用例时,需要使用到的包括2-6,其中5、6两项,不是必填项,等待时间、预期结果断言 可根据步骤需要灵活添加。此外,“类型”固定选择“Web UI”即可,操作中的”备注“可用于对操作步骤进行备注,以便用例调试。下面对2-4:包|定位路径、方法|操作、参数,这三项进行常用的语法说明,以供大家在编写用例时,遇到不确定的方法,可以进行查阅。
1 打开URL:
包|定位路径
|
方法|操作
|
参数
|
/
|
open
|
要打开的URL
|
2 (输入框)输入:
包|定位路径
|
方法|操作
|
参数
|
Web元素定位
|
sendkeys
|
要输入的值
|
3 (输入框)清除:
包|定位路径
|
方法|操作
|
参数
|
Web元素定位
|
clear
|
/
|
4 (对象)点击操作:
包|定位路径
|
方法|操作
|
参数
|
Web元素定位
|
click
|
/
|
5 获取对象文本属性值:
包|定位路径
|
方法|操作
|
参数
|
Web元素定位
|
gettext
|
/
|
6 关闭当前浏览器窗口:
包|定位路径
|
方法|操作
|
参数
|
/
|
closewindow
|
/
|
7 iframe操作:
包|定位路径
|
方法|操作
|
参数
|
说明
|
iframe标签所在元素定位
|
gotoframe
|
/
|
跳转到iframe
|
/
|
gotodefaultcontent
|
/
|
跳转回默认iframe
|
/
|
gotoparentframe
|
/
|
跳转到上一级iframe
|
8 弹窗处理:
包|定位路径
|
方法|操作
|
参数
|
说明
|
/
|
alertaccept
|
/
|
确定
|
/
|
alertdismiss
|
/
|
取消
|
/
|
alertgettext
|
/
|
获取文本值
|
9 下拉框处理:
包|定位路径
|
方法|操作
|
参数
|
说明
|
下拉框元素定位
|
selectbyvisibletext
|
选项文本值
|
根据可见文本选择
|
下拉框元素定位
|
selectbyvalue
|
选项value标签属性值
|
根据value属性选择
|
下拉框元素定位
|
selectbyindex
|
选项index值
|
根据index值选择,初始值为0
|
下拉框元素定位
|
isselect
|
/
|
判断是否被选中
|
10 多窗口处理:
包|定位路径
|
方法|操作
|
参数
|
说明
|
/
|
getwindowhandle
|
要获取的窗口序号
|
初始值为1
|
/
|
gotowindow
|
要跳转的窗口序号/句柄值
|
|
11 鼠标移动:
包|定位路径
|
方法|操作
|
参数
|
Web元素定位
|
mouseto
|
/
|
12 页面滚动:
包|定位路径
|
方法|操作
|
参数
|
Web元素定位
|
scrollto
|
/
|
13 页面刷新:
包|定位路径
|
方法|操作
|
参数
|
Web元素定位
|
pagerefresh
|
/
|
14 调用指定用例:
包|定位路径
|
方法|操作
|
参数
|
/
|
runcase
|
用例编号
|
15 其他语法查看:
LuckyFrame为我们封装的方法很多,具体方法的使用,我们可以通过开源源码,进行查看。
Web UI的方法在客户端代码中,代码路径为:luckyclient.execution.webdriver,在EncapsulateOperation.class这个类文件中,我们可以查看到封装方法的使用规则。

3. 实例演示
注意:登录时如有输入验证码操作,需延长步骤间等待时间,通过手工输入,平台暂时无法实现通过定位获取验证码。
关于Check():
① Check()方法为验证页面是否有定位的元素存在,存在则用例执行成功,否则用例执行失败;
② Check()方法中定位的元素需考虑iframe限制;
③ Check()语法结构:Check(定位路径),例如:Check(xpath=//input[@id=’name’])。
关于iframe跳转:
A:Top Window→iframe#1,使用gotoframe,入参填写iframe#1的元素定位
B:iframe#1→Top Window,使用gotodefaultcontent,跳转到默认状态
C:Top Window→iframe#2,使用gotoframe,先跳转到iframe#1,再跳转到iframe#2
D:iframe#2→iframe#1,使用gotoparentframe,跳转到父节点iframe
E:iframe#2→Top Window,与B同理,使用gotodefaultcontent,跳转到默认状态
F:iframe#3→iframe#1,先使用gotodefaultcontent跳转到默认,再进入iframe#1
关于弹窗:
① 本场景中系统出现的弹窗为confirm弹窗,还有alert和prompt两种形式的弹窗;
② 三种弹窗中点击【确定】操作皆通过alertaccept方法实现,点击【取消】操作皆通过alertdismiss方法实现,获取弹窗文本内容皆通过alertgettext方法实现。
关于窗口跳转:
① getwindowhandle获取窗口句柄值,入参为目标窗口的下标(从1开始),默认参数为空时获取当前窗口的句柄值;
② gotowindow切换到指定窗口,入参为目标窗口的句柄值 或 下标(从0开始);
③ closewindow关闭当前窗口。
定位小技巧:使用浏览器F12工具定位元素,可以使用工具栏左上角的定位按钮。但若元素默认隐藏,当鼠标离开界面时则无法查看隐藏元素,定位这些隐藏元素,我们可以使用定位快捷键:Ctrl+Shift+C。
实例-百度搜索:


三、HTTP接口自动化
1. HTTP接口自动化用例语法
说明:
(1)HTTP接口自动化测试,每个步骤都必须要关联协议模板,去构造消息头以及消息体;
(2)在步骤动作栏中,点击输入框会自动联想当前项目下所有的协议模板,选择对应的模板即可;
(3)请求的参数都必须在模板里面先构造,不能直接在用例步骤的参数列里面去构造,步骤的参数列只能去替换模板里面的默认参数值。也就是说必须得在模板里面有的参数,步骤参数才能生效去替换默认值。
关键字语法构建:
(1)包|定位路径:请求URL;
(2)方法|操作:请求方法;
(3)参数:参数栏可以修改模板中的默认值,如果参数为空,则默认使用模板中定义好的默认参数,参数栏填写示例:参数名#参数值|参数名#参数值|参数名#参数值|……|;
(4)步骤动作:1#Wait表示当前步骤暂停1秒;
(5)预期结果:① 精确匹配,将用例里面【方法|操作】执行的结果,与【预期结果】字段里面的字符串进行精确匹配,直接在预期结果里面填写需要匹配的字符串即可;② 模糊匹配,将用例里面【方法|操作】执行的结果,与【预期结果】字段里面的字符串进行模糊匹配,模糊匹配: %=value;(6)类型:HTTP接口;(7)扩展字段:关联协议模板。
用例编写步骤:
Step1:配置协议模板
(1)新增协议模板:选择菜单 测试管理->协议模板->【添加】;
(2)输入协议模板信息:项目名称、模板名称、编码格式等信息,注意:消息头域、证书路径可根据需要填写;
(3)配置模板参数:在协议模板列表中勾选刚才新增的协议模板,点击【模板参数】进入编辑界面,输入请求报文,点击【保存】即可。
Step2:编写测试用例
(1)新增用例:选择菜单 测试管理->用例管理->【添加】;
(2)输入用例信息:项目名称、用例名称、用例类型、备注等信息;
(3)编写用例步骤 及 用例调试:在用例列表中勾选刚才新增的用例,点击【用例步骤】进入用例编辑界面,编辑完成后,点击【调试】,选择配置好的有效客户端,即可进行单次用例调试;
(4)调试结果查看:调试完成后,可在调试界面查看到执行日志及执行结果。
Step3:测试任务执行及结果查看
(1)新增测试计划:选择菜单 测试管理->测试计划->【添加】;
(2)添加计划用例:在计划列表中勾选刚才新增的计划,点击【计划用例】进入计划用例界面,勾选要执行的用例,再【保存】即可完成计划用例添加;
(3)新增测试任务:选择菜单 测试执行->任务调度->【添加】,并完成以下信息填写,包括 调度名从、项目名称、测试计划、客户端、任务类型、Cron执行表达式等;
(4)执行测试任务:在任务列表中,选择刚才新增的测试任务,点击相应的【执行】,即可执行该任务;
(5)测试结果查看:选择菜单 测试执行->任务执行,在列表中可查看刚才执行的任务结果,或者 选择菜单 测试执行->用例明细,在列表中点击刚才执行任务左侧的“?”按钮展开查看向西直行步骤及结果。
至此,一个完整的HTTP接口自动化测试用例便完成了,结果直观。
以上就是对LuckyFrame入门使用的简介,希望能够帮助大家快速入门LuckyFrame自动化测试。