sweetest 是一款 Web 自动化测试框架,或者说是解决方案,名字取 Selenium, Web UI, Excel, Element, Test 含义。
特色:python
目前,Web 自动化测试基本上是以 Selenium 为接口来编写测试代码,但效果每每不是很好,广泛遇到以下问题:git
咱们知道,传统的测试用例通常是在 Excel 中用文本编写的,若是自动化测试用例也这么写,是否是就能够解决问题1和2?
对于问题3,我想是时候对开发提出一些要求了,同时咱们的元素定位也要优化,让页面自由的去变化,而咱们的定位只作最小适用。github
测试用例以下图:chrome
pip install sweetest
浏览器
打开 cmd 命令窗口,切换到某个目录,如:D:Autotest框架
sweetest cd sweetest_sample python start.py
OK,若是一切顺利的话,sweetest 已经跑起来了工具
目录 | 说明 |
---|---|
element\ | 页面元素表目录 |
Baidu-Elements.xlsx | 页面元素表,名称格式:project_name + "-Elements.xlsx" |
junit\ | junit格式测试结果目录 |
log\ | 自动化测试运行日志目录 |
report\ | Excel 格式测试结果目录 |
snapshot\ | 错误截图目录 |
testcase\ | 测试用例目录 |
Baidu-TestCase.xlsx | 测试用例,名称格式:project_name + "-TestCase.xlsx" |
start.py | 启动脚本,test = Autotest(project_name, sheet_name) |
备注:以上3处的 project_name 必须一致测试
页面元素表的做用主要是把元素定位独立出来,一是方便维护定位信息,二是测试用例中用元素名称书写,可读性更高。优化
目录 | 注释 |
---|---|
page | element 所在的页面,在全部页面均可用的 element 放在“通用”下面,如 title |
frame | element 所在的 frame id,若是是顶层 frame,可为空。 |
name | element 名称,在不一样的 page 下面能够同名 |
by | Selenium 定义方式 |
value | Selenium 定义的值 |
备注 | 注释做用 |
id, link_text, partial_link_text, xpath, class_name编码
如:
page | name | by | value |
---|---|---|---|
百度搜索页面 | 搜索框 | id | kw |
则自动化运行时会以 find_element_by_id('kw')
来定位
带变量的定位方式
如示例中:
page | name | by | value |
---|---|---|---|
百度搜索页面 | 搜索结果# | xpath | //*[@id="#"]/h3/a |
写用例时,须要在 搜索结果# 后面带上变量,如: 搜索结果#1
操做 | 页面 | 元素 |
---|---|---|
点击 | 百度搜索页面 | 搜索结果#1 |
则自动化运行时会以 find_element_by_xpath('//*[@id="1"]/h3/a')
来定位
已定义好的经常使用变量定位方式:
如:url#www.baidu.com
固然,若是#后面的变量不够直观的话,不建议太多使用这几个变量方式。
页面的 title
页面URL
页面的 url
通常来说,导航栏在全部页面都存在,应该把导航栏放在“通用”下面,作成变量定位方式,如示例中的:
page | name | by | value |
---|---|---|---|
通用 | 搜索页导航栏# | xpath | //*[@class="s_tab"]//a[text()="#"] |
用例中的写法:
操做 | 页面 | 元素 |
---|---|---|
点击 | 通用 | 搜索页导航栏#新闻 |
操做、页面、元素这些列其实都是选项列表,利用 Excel 的下拉菜单功能,可以让书写用例更方便,且不易笔误。
下图是测试用例文件中的 ElementsMap 页面:
咱们能够经过 Excel 的菜单栏“公式-名称管理器”来配置这些菜单,同时在用例页面经过“数据-数据有效性”配置好“操做”的下拉菜单,以及“页面-元素”的二级联动下拉菜单。
必填字段:
注意事项:
即 get
方法,打开一个连接。
打开操做,通常要在测试数据中指定新窗口名称,如:新窗口=百度搜索窗口。
检查
取页面元素的值、属性和预期结果对比。
测试数据中若是没有写“k=v”的方式,则默认是取元素的 text。
操做 | 页面 | 元素 | 测试数据 |
---|---|---|---|
检查 | 百度搜索页面 | 搜索按钮 | 百度一下 |
等价于
操做 | 页面 | 元素 | 测试数据 |
---|---|---|---|
检查 | 百度搜索页面 | 搜索按钮 | text=百度一下 |
操做 | 页面 | 元素 | 测试数据 |
---|---|---|---|
检查 | 百度搜索页面 | 搜索框 | name=wd |
操做 | 页面 | 元素 | 测试数据 |
---|---|---|---|
检查 | 百度搜索页面 | 页面标题 | 百度一下,你就知道 |
注意:测试数据中,因为逗号(,or ,)是多个“k=v”的分隔符,因此若是 v 中有逗号,要用反斜杠(\)转义;但等号(=)无需转义。
在输入框中输入文本。
测试数据列为要输入的内容。
点击
点击按钮或者连接等(一切可点击操做的)元素。此关键字支持在同一个页面上顺序点击多个元素,在元素列以竖杠(|)分割便可,如:
操做 | 页面 | 元素 |
---|---|---|
点击 | 百度搜索页面 | 搜索按钮|搜索结果#1 |
有些页面元素,当鼠标移动到上面时,会弹出下拉菜单等。此操做同关键字“点击”相似。
执行
即执行测试用例片断,支持在测试数据中给变量赋值,如咱们有用例片断 SNIPPET_001,则测试用例 BAIDU_002 中,步骤1以下:
操做 | 页面 | 元素 | 测试数据 |
---|---|---|---|
执行 | 用例片断 | SNIPPET_001 | keywords=搜狗 |
把变量 keyswords 赋值为“搜狗”,此步骤会执行用例片断 SNIPPET_001,其搜索的关键字为“搜狗”。
把检查结果反向,此关键字暂时未完整实现。
测试数据支持模糊匹配,以下:
操做 | 页面 | 元素 | 测试数据 |
---|---|---|---|
检查 | 通用 | 页面标题 | *知乎 |
则,页面标题中含有“知乎”即为经过。注意星号(*)要写在开头。
在运行时,把元素的值或属性赋值给变量,此变量能够在以后的步骤中使用"<>"引用变量名。
操做 | 页面 | 元素 | 测试数据 | 输出数据 |
---|---|---|---|---|
点击 | 百度搜索页面 | 搜索结果#1 | title=text | |
检查 | 通用 | 页面标题 | <title> |
除了控制语句符号外,步骤编号必须为数字,建议在 Excel 中设置为文本格式。
控制语句:
if then else
步骤编号 | 操做 | 页面 | 元素 | 测试数据 |
---|---|---|---|---|
^3 | 检查 | 通用 | 页面标题 | *知乎 |
>4 | 点击 | 通用 | link#登陆 | |
<5 | 点击 | 通用 | link#注册机构号 |
^ 表示 if 语句
> 表示 then 语句
< 表示 else 语句
if(^) 语句为真时,执行 then(>) 语句,为否时执行 else(<) 语句。不管后面有没有 then 或者 else 语句,不影响后续步骤执行。
then 语句 或者 else 语句,当不被执行时,测试结果为 '-',不影响测试用例结果和后续步骤执行。当执行时,和正常步骤同样,成功则继续,失败则该用例失败。
测试用例中元素是以 page + name 为惟一标识,来页面元素表中查找定位信息的。所以,不一样 page 下的元素 name 能够相同,但不能和“通用”下的相同。
测试用例中,若是 page 不为“通用”,当 <page> + name 查找不到,会继续以 “通用” + name 为标识符来查找。
“通用”是方便咱们写页面元素表的,写用例时咱们建议仍是用 <page> 来代替“通用”,甚至有时候咱们必须这么作。
在浏览器中,有可能会打开多个标签页,咱们叫它为窗口。当你新打开一个标签页时,你能够在测试数据中给它起个名字,格式为:新窗口=<window_name>, 如:
操做 | 页面 | 元素 | 测试数据 |
---|---|---|---|
打开 | 通用 | 百度搜索连接 | 新窗口=百度搜索窗口 |
检查 | 百度搜索页面 | 页面标题 | 百度一下,你就知道 |
当你给新的标签页起了窗口名字,它以后步骤的页面("通用"除外)就会绑定到这个窗口。如上面第 2 步,“百度搜索页面”会绑定到“百度搜索窗口”。那么以后的步骤或用例中,即便打开了多个标签页,只要页面是“百度搜索页面”,就会切换到“百度搜索窗口”这个标签页上操做。
注意:“通用”是不绑定到任何窗口的,也不作窗口切换,它直接在“当前窗口”操做。
“当前窗口”规则为:
注意:
python start.py
见 report 目录
QQ交流群:158755338 (验证码:python)