前端测试 robot 实现自动化 webUI 自动化

Tcat · 2016年04月14日 · 最后由 chucktest 回复于 2016年07月28日 · 4083 次阅读

robot 实现自动化 webUI 自动化

目前项目有这样 webUI 自动化这样一个需求,考虑到自己技术和精力有限,以及时间比较赶,所以做出一个简单的 webUI 自动化框架,目前用起来效果还可以,欢迎大家吐槽。。。

为什么做

  • 目前项目处于初期,服务端仍然有大量需求,但是整体的方向不会有太大变动
  • 项目代码质量不是很好,常常会出现开发提交代码后,部署成功但主要的功能都跑不通的情况,这时候就需要重新打回,影响测试以及开发的进度
  • 项目进度比较赶,有时候可能主要是对新功能进行测试,对以前的功能关注较少,有时候容易出现漏测的情况

做成啥样

  • 每次开发提测后会自动触发 webUI 自动化
  • 保证主要的功能能够冒烟通过,通过设置通过率
  • 如果失败会自动给相应的开发发送失败用例的报告
  • 失败的页面自动截图

装些什么东西

序号 安装包名 安装方法 下载地址 备注
1 python exe 文件,直接双击安装 https://www.python.org/download/releases/2.7.8/ 安装路径不能有空格,在环境变量 PATH 中加上 Python 安装路径
2 setuptools 下载 ez_setup.py 文件,双击 https://pypi.python.org/pypi/setuptools Python 的套件管理程式,非必需,可以不装
3 pip 1.cmd 进入 ez_setup.py 文件目录
2.用 setuptools 安装:easy_install pip
https://pip.pypa.io/en/latest/index.html Python 的套件管理程式,在 PATH 最后添加 Python 的 Scripts 目录
4 robot framework pip install robotframework https://pypi.python.org/pypi/robotframework robot framework 本身
5 wxPython exe 文件,直接双击安装 http://wxpython.org/download.php#stable 支撑 Ride 的运行库,需要安装 2.8 的
6 robotframework-ride pip install robotframework-ride https://pypi.python.org/pypi/robotframework-ride Ride
7 selenium2library pip install robotframework-selenium2library https://pypi.python.org/pypi/robotframework-selenium2library selenium2 测试库,基于 webdriver 驱动
8 databaselibrary pip install robotframework-databaselibrary https://github.com/franz-see/Robotframework-Database-Library DB 库
9 requests pip install requests https://pypi.python.org/pypi/requests RequestsLibrary 库
10 RequestsLibrary pip install -U robotframework-requests https://github.com/bulkan/robotframework-requests http request 库
11 pyodbc pip install pyodbc https://pypi.python.org/pypi/pyodbc python 的 odbc,解决中文乱码
12 MySQL Connector exe 文件,直接双击安装 http://www.mysql.com/downloads/connector/odbc/ Mysql 的驱动,可以不安装

项目的结构

结构

  • suite 主要是存放各模块测试用例的地方,主要是按功能进行 suite 划分,比如用户管理
  • driver 存放各浏览器的 webdriver 目录
  • keyword 存放所有关键字的资源文件夹,其中包括:
    • action:存放 webdriver 相关的操作
    • api:存放 call api 的一些关键字
    • assert:存放有关断言的关键字
    • tool:存放其他的一些工具类关键字,如查询数据库
  • page 目前元素是按页面来组织的,页面以 csv 的形式保存,每次通过读取相应页面的相应元素名称来获取其定位方式,如获取用户信息管理username_ipt,得到id=username
  • report 存放 robot 产生的测试报告,以及自定义解析 xml 文件后的测试报告
  • screenshot 存放测试失败后截图的目录
  • template 存放一些常用的场景模版以后会经常使用的,如登录到运营平台
  • uitls 存放自定义的一些 py 文件

用例怎么写的

  1. 在 page 文件夹添加相应的页面文件登录页.csv
  2. 添加需要测试用到的控件,username_ipt,id,userName,用户名等等
  3. 在 suite 目录添加相应的 suite 文件运营平台.txt
  4. 添加测试用例登录到运营平台并导入keyword中相应的资源文件
  5. 开始写具体的用例了 登录到运营平台 ${configs} 读取多个配置 url=platform url=admin 打开浏览器 ${configs[0]} 清空元素文本 登录页 username_ipt 输入文本 登录页 username_ipt ${username} 清空元素文本 登录页 password_ipt 输入密码 登录页 password_ipt ${password} 点击按钮 登录页 submit_btn 检查元素是否包含文本 账户平台首页 username_link ${username}

怎么跑的

每次手动执行 robot 比较麻烦,利用 jenkins 每次从 git 上拉取最新的测试用例,保证项目的持续集成以及自动回归

  • 安装 robot 插件
  • 增加新自由项目
  • 添加源码管理,因为我们仓库是 git,所以选择 git
  • 可以设置构建触发器,比如可以设置每天跑一次0 0 * * *
  • 在项目中选择 execute shell 填入运行的命令,这里自己自己写了个 sh 脚本用来跑用例生成报告
#!/usr/bin/env bash
ROOT=$(cd `dirname $0`; pwd)
TIME=$(date +%Y-%m-%d_%H_%M_%S)

function if_error
{
    if [ $1 -ne 0 ]
    then
        echo -e "\033[31mfailed!error code:$1\033[0m"
        exit $1
    else
        echo -e "\033[32msuccess!\033[0m"
    fi
}
function error
{
    echo -e "\033[31m$@\033[0m"
    exit 1
}
function success
{
    echo -e "\033[32m$@\033[0m"
}
function dump
{
    echo -e "\033[44m$1\033[0m"
}

dump "check connect..."
ping -c4 XX.XX.XX.XXX #服务器IP
if_error $?

dump "start run test..."
pybot -d report/$TIME $ROOT/suite

dump "start generate html report..."
if [ ! -d $ROOT/report/$TIME ];then
    dump "not found report dir!"
    exit -1
fi

python genLog.py report/$TIME/output.xml demo.html report/email.html
if_error $?
  • 增加构建后步骤,加入 Publish Robot Framework test results,设置测试通过目标
  • 通过 ExtendedEmailPublisher 插件增加邮件模版
  • 构建就可以看到结果了,失败会发邮件给相应开发
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 9 条回复 时间 点赞

可以尝试下

我这边移动端的 case 没楼主分的那么细。对项目结构挺感兴趣的,方便留个 q 勾搭下吗

Tcat #3 · 2016年04月18日 Author

#2 楼 @neyo 可以啊,移动端这块其实我也是准备做,但现在还不适合,q 2914776331

一直使用 slemium

Tcat #5 · 2016年04月19日 Author

#4 楼 @unbug 这个就是 selenium 啊

大神,我最近刚研究 robot 这一块,有些问题可能需要请教,看到你 qq 我可以加么?😁

想请教下页面元素是以什么格式存放的啊

Tcat #8 · 2016年06月03日 Author

#7 楼 @happy_summer 是按照 page 存放在 csv 中的

不错 目前正在用 rf 搭建框架 有不懂的可以像大神请较学习了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册