Web 自动化测试框架 sweetest 介绍

介绍

sweetest 是一款 Web 自动化测试框架,或者说是解决方案,名字取 Selenium, Web UI, Excel, Element, Test 含义。
特色:python

  1. 简单快速,轻松上手
  2. 无需编码能力
  3. 在 Excel 中以文本编写测试用例
  4. 维护成本低
  5. 支持千、万级别的用例规模
  6. 拥抱变化,支持敏捷

背景

目前,Web 自动化测试基本上是以 Selenium 为接口来编写测试代码,但效果每每不是很好,广泛遇到以下问题:git

  1. 用例设计人员的编码能力很弱,测试代码编写和维护成本高,效果差;
  2. 测试代码量大,测试意图不直观,没法支撑千、万级别的用例规模;
  3. Web 页面元素的定位很是繁琐,且页面结构常常变更,致使用例失效。

咱们知道,传统的测试用例通常是在 Excel 中用文本编写的,若是自动化测试用例也这么写,是否是就能够解决问题1和2?
对于问题3,我想是时候对开发提出一些要求了,同时咱们的元素定位也要优化,让页面自由的去变化,而咱们的定位只作最小适用。github

实现思路

  1. Selenium 为底层接口;
  2. 在 Excel 中用文本编写测试用例;
  3. 元素定位表格化,且优先使用“板块通用定位法”;
  4. 要求开发提供必要的、统一的元素属性;
  5. 框架负责解析测试用例,执行用例,记录日志,输出测试结果。

方案

  1. 开发语言:Python
  2. 底层接口:Selenium
  3. 用例工具:Excel

测试用例以下图:
testcasechrome

安装

环境要求

  • 系统要求:Windows
  • Python 版本:3.6+
  • Selenium
  • 浏览器:Chrome
  • Chrome 驱动: chromedriver

安装 sweetest

pip install sweetest浏览器

快速体验

打开 cmd 命令窗口,切换到某个目录,如:D:Autotest框架

sweetest
cd sweetest_sample
python start.py

install

OK,若是一切顺利的话,sweetest 已经跑起来了工具

目录结构

dir

目录 说明
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 必须一致测试

页面元素表

页面元素表的做用主要是把元素定位独立出来,一是方便维护定位信息,二是测试用例中用元素名称书写,可读性更高。优化

elements

目录 注释
page element 所在的页面,在全部页面均可用的 element 放在“通用”下面,如 title
frame element 所在的 frame id,若是是顶层 frame,可为空。
name element 名称,在不一样的 page 下面能够同名
by Selenium 定义方式
value Selenium 定义的值
备注 注释做用

元素定位

  1. id, link_text, partial_link_text, xpath, class_name编码

    如:

    page name by value
    百度搜索页面 搜索框 id kw

    则自动化运行时会以 find_element_by_id('kw') 来定位

  2. 带变量的定位方式

    如示例中:

    page name by value
    百度搜索页面 搜索结果# xpath //*[@id="#"]/h3/a

    写用例时,须要在 搜索结果# 后面带上变量,如: 搜索结果#1

    操做 页面 元素
    点击 百度搜索页面 搜索结果#1

    则自动化运行时会以 find_element_by_xpath('//*[@id="1"]/h3/a') 来定位

    已定义好的经常使用变量定位方式:

    • id#
    • link#
    • *link#
    • xpath#
    • class#
    • name#
    • url#

    如:url#www.baidu.com

    固然,若是#后面的变量不够直观的话,不建议太多使用这几个变量方式。

  3. 页面标题

    页面的 title

  4. 页面URL

    页面的 url

    通常来说,导航栏在全部页面都存在,应该把导航栏放在“通用”下面,作成变量定位方式,如示例中的:

    page name by value
    通用 搜索页导航栏# xpath //*[@class="s_tab"]//a[text()="#"]

    用例中的写法:

    操做 页面 元素
    点击 通用 搜索页导航栏#新闻

测试用例

testcase

下拉菜单配置

操做、页面、元素这些列其实都是选项列表,利用 Excel 的下拉菜单功能,可以让书写用例更方便,且不易笔误。
下图是测试用例文件中的 ElementsMap 页面:

maps

咱们能够经过 Excel 的菜单栏“公式-名称管理器”来配置这些菜单,同时在用例页面经过“数据-数据有效性”配置好“操做”的下拉菜单,以及“页面-元素”的二级联动下拉菜单。

用例字段

必填字段:

  • 用例编号
  • 步骤编号
  • 操做
  • 页面
  • 元素

前置条件:

  • BASE: 整个测试套件的基础,必须经过才会执行下一步,如:登陆;若是有的话应该为第一个测试用例。
  • SETUP:每一个测试用例执行前须要执行的用例,只有 SETUP 执行成功才会执行该用例,如:返回首页。
  • MAIN:一组用例的第一用例,和 SUB 一块儿使用,一个 MAIN 后面能够带多个连续的 SUB 用例。此用例须要先执行 SETUP 用例。
  • SUB:和 MAIN 一块儿使用,当前一个用例(MAIN or SUB)执行结果为经过时才会执行,不然测试结果置为 Blocked;且执行此用例前不会执行 SETUP 用例。
  • SNIPPET:用例片断,运行到此用例时不会当即执行,须要在其余用例中使用“执行”关键字调用此“用例片断”,才会执行;配合“执行”关键字的变量赋值功能,能够实现用例复用。

注意事项:

  • 通常必须有 SETUP 用例。当执行 SETUP 失败,会尝试执行一次 BASE->SETUP 做为 SETUP 的执行结果。
  • BASE 用例能够有 0 到多个,但做为 SETUP 中 BASE->SETUP 的 BASE 只有最后一个 BASE 用例。
  • SETUP 用例只能有 1 条,若是写了多条,只有最后一条起做用。

操做(关键字)及对应的测试数据

  • 打开

    get 方法,打开一个连接。

    打开操做,通常要在测试数据中指定新窗口名称,如:新窗口=百度搜索窗口。

  • 检查

    取页面元素的值、属性和预期结果对比。

    测试数据中若是没有写“k=v”的方式,则默认是取元素的 text。

    • 检查 text:
    操做 页面 元素 测试数据
    检查 百度搜索页面 搜索按钮 百度一下

    等价于

    操做 页面 元素 测试数据
    检查 百度搜索页面 搜索按钮 text=百度一下
    • 检查属性:
    操做 页面 元素 测试数据
    检查 百度搜索页面 搜索框 name=wd
    • “页面标题”和“页面URL”直接在测试数据中写预期结果便可。
    操做 页面 元素 测试数据
    检查 百度搜索页面 页面标题 百度一下,你就知道

    注意:测试数据中,因为逗号(,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> 来代替“通用”,甚至有时候咱们必须这么作。

窗口管理(页面,frame)

在浏览器中,有可能会打开多个标签页,咱们叫它为窗口。当你新打开一个标签页时,你能够在测试数据中给它起个名字,格式为:新窗口=<window_name>, 如:

操做 页面 元素 测试数据
打开 通用 百度搜索连接 新窗口=百度搜索窗口
检查 百度搜索页面 页面标题 百度一下,你就知道

当你给新的标签页起了窗口名字,它以后步骤的页面("通用"除外)就会绑定到这个窗口。如上面第 2 步,“百度搜索页面”会绑定到“百度搜索窗口”。那么以后的步骤或用例中,即便打开了多个标签页,只要页面是“百度搜索页面”,就会切换到“百度搜索窗口”这个标签页上操做。

注意:“通用”是不绑定到任何窗口的,也不作窗口切换,它直接在“当前窗口”操做。

“当前窗口”规则为:

  • 执行到某个步骤时,“当前窗口”是浏览器焦点所在的窗口,也就是上个步骤执行操做的窗口。
  • 若是此步骤的页面已绑定到其余窗口,则“当前窗口”会切换过去。
  • 若是此步骤的页面还没有捆定任何窗口,则会捆定到“当前窗口”。
  • 上个步骤若是是新打开的窗口,则“当前窗口”是新打开的窗口。

注意:

  • 若是打开了 2 个或以上窗口,没有起名字的窗口,在执行到切换窗口的步骤时,会自动被关掉。
  • 起了名字的窗口不会被关掉。
  • 但若是起了一样的名字,则原先的那个窗口会被关掉,绑定在其上面的页面也会被注销。

测试执行

python start.py

测试报告

见 report 目录

QQ交流群:158755338 (验证码:python)

项目地址:https://github.com/tonglei100...

相关文章
相关标签/搜索