webTest自动化测试框架

webTest框架介绍

地址

https://github.com/wuranxu/webTest

希望大家能够给点支持,多多star一下吧!后面也会根据大家的需求不断优化~

简介

本框架基于Python3+selenium3+unittest组成,用户以Page Object的模式编写用例。

元素的定位和操作按照页面划分,达到Web端自动化回归测试的目的,
并生成测试报告。浏览器兼容性暂时未完善。

本例子展示了一个必应首页搜索"龙珠超"的测试用例,比较简陋。

列举一下相关的亮点:

  • ❤️ 支持xmind文件转为测试用例,目前存在部分问题
  • 💛 支持chrome驱动自动下载
  • 💚 支持用例重跑及自动错误截图
  • 💙 使用antd美化html报告
  • 💜 采用po模式,定位元素与实际操作分离,同一个页面的操作代码可复用
  • 🖤 优化api,智能等待用例,拒绝代码中time.sleep等待元素
  • 💔 其他(可在下方留言或github issue提需求)

运行日志

image.png

过程截图

image.png

效果展示

image.png

快速上手

  • 从远程仓库拉取代码

git clone https://github.com/wuranxu/webTest.git

image.png
  • 安装依赖包

进入下载好的webTest目录,并在此目录运行安装依赖, 需要安装好pip(默认自带的就行)

mac/Linux/windows: pip3 install -r requirements.py -i https://pypi.douban.com/simple

  • 运行demo

在webTest目录输入命令(确保chrome浏览器已安装, 驱动会自行下载):

python3 start_test.py

image.png

配置说明

见config.py,大部分说明都有对应的描述,RETRY是全局重试次数。可以参考XmindTest.py文件里面的retry字段,设置单个用例的重试次数。

环境配置

注: 无桌面版Linux目前只做到支持firefox
  • os: Windows/Mac os x/Linux
  • Python3.x
  • Chrome浏览器

目录结构

project

└───error
|
└───database
|
└───logs
|
└───xmind
|
└───page
|
└───report
|
└───tests
|   |    base_case.py
|
└───templates
|   |   report_templates.html
└───result
|   |   report_templates.html
|   |   generator.py
|   |   text_test_result.py
|
└───chromedriver
│   │   chromedriver.exe
|
└───util
|   |   chrome.py
|   |   decorator.py
|   |   driver.py
|   |   utils.py
|   |   logger.py
|   |   web_tool.py
|
│   README.md
│   run_case.py
|   requirements.txt
│   config.py
|   webdriver_test.log


内容介绍

  • chromedriver

    存放chromedriver驱动, 若本机未安装chromedriver则自动匹配本机chrome版本下载对应驱动。

  • database

    存放Mysql和Mongodb的连接类

  • error

    异常分类

  • screenshot

    存放出错截图, 目前根据用例名称创建文件夹并存放。

  • logs

    存放所有日志文件, 目前只有webdriver_test.log, 主要目的是将日志区分开来。

  • page

    页面目录, 可扩展, 针对不同模块的页面可设计不同目录结构。一般存放该页面的操作(Action)以及元素(Location), 用例具体断言不建议写于此处(因人而异)。

  • Report

    存放测试报告,为html形式,可右键通过浏览器打开,使用chrome效果尤佳。

  • templates

    存放html模板,传入测试结果以生成测试报告。

  • result

    • generator.py

      是组织测试结果, 生成测试报告, 填入数据至html报告模板的方法。

    • text_test_result.py

      继承自unittest.TextTestResult类, 存放测试结果。

  • tests

    测试套件目录, 可扩展, 子目录为某个测试集。测试集中存放测试用例。

    • base_case.py

      存放基础测试用例。

  • util

    • chrome.py

      用于更新/下载chromedriver, 目前只支持mac os和windows系统。

    • decorator.py

      用于存放自动截图/重跑等装饰器, 主要是为测试函数添加错误截图以及重跑等功能。

    • driver.py

      继承自WebDriver类, 主要用于简化原生api以及添加切换frame/handle等api。

    • logger.py

      记录日志的功能函数。

    • web_tool.py

      用于Web自动化测试的工具类, 包括截图、获取用例等方法。

    • xmind_reader.py

      用于解析xmind文件,暂时不支持过于复杂的xmind。用例的大概编写方式如下图。


      image
  • xmind

    存放Xmind文件, xmind文件用于编写测试用例。

  • config.py

    用于存放绝大部分配置。继承于BaseConf类, 可拥有自己的配置。

  • requirements.txt

    用于存放本框架所需库。

  • start_test.py

    存放组织用例, 生成测试套件, 运行测试用例等函数。

  • webdriver_test.log

    存放测试用例执行时候的有关操作和错误信息等。

注: 以上目录结构/命名可能并不合理, 还望海涵。


使用手册

以下内容若已安装, 可跳过。
  • 安装Python3

    Python3.6下载地址

    下载对应操作系统的Python版本并安装。

  • 下载IDE(非必须)

    推荐Pycharm

    Pycharm下载地址

  • 安装必须的库

    目录中有install.py, 安装好Python之后, 在终端窗口中输入如下命令:

    Linux/mac: python3 install.py

    windows: python install.py

    注意: 安装时需要带上install.py路径或者进入该文件所在目录。

  • Pycharm配置(若有)

    • 第一步: 配置项目Python环境

      File->Open

    image.png

    选择webTest目录, 点击窗口右下角的Open

    image.png

    打开Preferences, 在Project Interpreter里选择刚才安装Python的地址, 点击OK

    image.png
    • 第二步: 配置start_test.py

    点击Edit Configurations

image.png

如果没有Python配置的话, 点击图中"+"图标, 然后选择Python并添加


image.png
image.png

配置脚本


image.png
  • 第三步: 运行用例

右击start_test.py, 选择Run则为运行模式, Debug则为调试模式


image.png
  • 用例编写规则

    Python:

    • 可参考Search.py编写用例(最好用例的类名不重复)

    • 用例需要写在TestSuite/测试集/这种目录下

    • 用例需要继承base_case.py

    • 用例需要以test开头如test_bmp

    • 用例的test函数需要带上screenshot的装饰器, 不带无截图功能

    • 报告会按照时间生成, 且会写入2份report.html

    • 日志在webdriver_test.log查看

    • Page页面编写此页面需要的操作及元素

    • Location类是封装了WebElement, 其中包含name, value, 默认以css方式定位

    • Location类实例化的时候可指定第三个参数, 方便使用其他定位的同学。如:

      menu = Location("大后台左侧菜单", ".menuItem", "XPATH")

    Xmind:

    • 画布(必填)

      为TestSuite名, 可允许重复画布名

    • 根元素(必填)

      为用例的Class名

    • 描述(最好有)

      为该用例的测试点

    • 页面(必填)

      需要填写Page下的页面, 子节点为其页面下需要用到的方法, 方法后如果还有子节点,则为该方法返回值, 若有多个返回值则用;分割且该返回值会被保留方便做断言

    • 跳过(不填默认生成用例)

      不为True的时候均会生成用例

    • 重跑次数(可选)

      用例若失败, 重新运行的次数, 默认为0。

    • 步骤(必填)

      子节点为页面方法或断言, 若以assert开头则为断言, 否则则判断为方法, 若在页面中忘了填写该方法, 则调用系统内部方法。

      方法节点的子节点为参数, 同样以;分割。

      断言的子节点为2或3个, 如assertEqual, 可理解是A==B?true:msg, 最后一个参数是msg, 具体出错原因。

    • 已知缺陷

      1. 截止到现在还未支持非页面方法调用如print;
      2. 不支持导入本用例需要的其他类库;
      3. 其他不爽的有待补充。

亮痛点

  • 浏览器驱动

    • 问题: 浏览器驱动偶尔会与浏览器对应不上
    • 解决方案: 自动下载, 但只针对mac/win下的chrome, 且版本不能太低。firefox不支持, 任性。
  • 集成jenkins

    • 问题: centos6.x不带桌面无法运行UI自动化用例

    • 解决方案:

      1. phantomJs(不合适, 还是要写出来)

        新版selenium使用的时候会提示被废弃, 建议用无头模式取代, 且运行不稳定。

      2. Chrome无头模式(centos7以上应可行)

        由于jenkins所在机器centos6.x版本过低, 被Chrome放弃支持, Chrome浏览器无法安装

      3. Firefox无头模式(目测不可行, 测太多次了记不住)

        Firefox可正常安装, 但是geckodriver比较挑浏览器版本, 多次试验不成功, 换了无数个浏览器版本+geckodriver版本后已经忘了是否可行。

      4. Firefox+虚拟桌面(目前解决方案)

        见用例driver.py文件。但不完美, 错误截图显示的网页内容都····一言难尽, 好像一个瞎子终于重获光明却发现自己满脸麻子。回到正题, 为什么不自动同步firefox驱动, 因为在c方案卡壳太久比较恶心。

        版本信息:

        geckodriver0.16

        selenium>=3.4

        firefox52.0

  • 测试报告

    由于邮件不支持js和引入的css, 导致报告巨难看。所以采用了附件形式, 目前是个比较大的痛点。

  • Page Object

    关于po, 确实也没有很深的研究, 只等小白鼠试水了。

  • api封装

    api封装得还不够多, 除了常用方法以外。但是基本上每个方法都插入了显示等待, 大大降低了元素找不到, 点不到, 各种不到的可能性。

  • 重跑

    解决了使用装饰器重跑用例不执行setUp+tearDown的问题。

  • 错误截图

    截图用base64保存, 所以只有错误的时候才会截图。因为base64太大。

  • Xmind编写用例

    这算一个小亮点吧。

  • 自动化配置环境

    已完成, 方便使用。

  • 数据库

    支持mongo和mysql。

  • 执行效率

    目前是单线程, 后续可能会支持异步。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容