webTest-----webUI自动化框架
webTest框架介绍
地址
https://github.com/wuranxu/webTest
希望大家能够喜欢!!!
简介
本框架基于Python3+selenium3+unittest组成,用户以Page Object的模式编写用例。元素的定位和操作按照页面划分,达到Web端自动化回归测试的目的,并生成测试报告。浏览器兼容性暂时未完善。
本例子展示了一个必应首页搜索"龙珠超"的测试用例,比较简陋。
运行日志

过程截图

效果展示

快速上手
- 从远程仓库拉取代码
git clone https://github.com/wuranxu/webTest.git

- 安装依赖包
进入下载好的webTest目录,并在此目录运行install.py
mac/Linux: python3 install.py
windows: python install.py

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

环境配置
注: 无桌面版Linux目前只做到支持firefox
- os: Windows/Mac os x/Linux
- Python3.x
- Chrome浏览器
目录结构
project
└───ErrorPic
|
└───DataBase
|
└───Log
|
└───Xmind
|
└───Page
|
└───Report
|
└───Page
|
└───TestSuite
| | base_case.py
|
└───templates
| | report_templates.html
└───TestResult
| | report_templates.html
| | GenerateReport.py
| | Result.py
|
└───chromedriver
│ │ chromedriver.exe
|
└───Tools
| | chrome.py
| | decorator.py
| | driver.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的连接类
ErrorPic
存放出错截图, 目前根据用例名称创建文件夹并存放。
Log
存放所有日志文件, 目前只有webdriver_test.log, 主要目的是将日志区分开来。
Page
页面目录, 可扩展, 针对不同模块的页面可设计不同目录结构。一般存放该页面的操作(Action)以及元素(Location), 用例具体断言不建议写于此处(因人而异)。
Report
存放测试报告,为html形式,可右键通过浏览器打开,使用chrome效果尤佳。
templates
存放html模板,传入测试结果以生成测试报告。
TestResult
GenerateReport.py
是组织测试结果, 生成测试报告, 填入数据至html报告模板的方法。
Result.py
继承自unittest.TextTestResult类, 存放测试结果。
TestSuite
测试套件目录, 可扩展, 子目录为某个测试集。测试集中存放测试用例。
base_case.py
存放基础测试用例。
Tools
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。用例的大概编写方式如下图。

Xmind
存放Xmind文件, xmind文件用于编写测试用例。
config.py
用于存放绝大部分配置。继承于BaseConf类, 可拥有自己的配置。
requirements.txt
用于存放本框架所需库。
run_case.py
存放组织用例, 生成测试套件, 运行测试用例等函数。
webdriver_test.log
存放测试用例执行时候的有关操作和错误信息等。
注: 以上目录结构/命名可能并不合理, 还望海涵。
使用手册
以下内容若已安装, 可跳过。
安装Python3
下载对应操作系统的Python版本并安装。
下载IDE(非必须)
推荐Pycharm
安装必须的库
目录中有install.py, 安装好Python之后, 在终端窗口中输入如下命令:
Linux/mac:
python3 install.pywindows:
python install.py注意: 安装时需要带上install.py路径或者进入该文件所在目录。
Pycharm配置(若有)
第一步: 配置项目Python环境
File->Open

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

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

- 第二步: 配置run_case.py
点击Edit Configurations

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


配置脚本

- 第三步: 运行用例
右击run_case.py, 选择Run则为运行模式, Debug则为调试模式

用例编写规则
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, 具体出错原因。已知缺陷
- 截止到现在还未支持非页面方法调用如print;
- 不支持导入本用例需要的其他类库;
- 其他不爽的有待补充。
亮痛点
浏览器驱动
- 问题: 浏览器驱动偶尔会与浏览器对应不上
- 解决方案: 自动下载, 但只针对mac/win下的chrome, 且版本不能太低。firefox不支持, 任性。
集成jenkins
问题: centos6.x不带桌面无法运行UI自动化用例
解决方案:
phantomJs(不合适, 还是要写出来)
新版selenium使用的时候会提示被废弃, 建议用无头模式取代, 且运行不稳定。
Chrome无头模式(centos7以上应可行)
由于jenkins所在机器centos6.x版本过低, 被Chrome放弃支持, Chrome浏览器无法安装
Firefox无头模式(目测不可行, 测太多次了记不住)
Firefox可正常安装, 但是geckodriver比较挑浏览器版本, 多次试验不成功, 换了无数个浏览器版本+geckodriver版本后已经忘了是否可行。
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。
执行效率
目前是单线程, 还没做多线程, 时间紧迫。所以在jenkins那台老爷机比较慢, 如果用例多起来了肯定是不行的。
代码规范/质量
写得一塌糊涂, 大家看不过去就帮忙改了吧, 跪谢orz
webTest-----webUI自动化框架的更多相关文章
- 学会这个,助你升值加薪自动化框架之python+selenium+pytest
1.概述 selenium: 基于JavaScript代码库的自动化测试框架,通过脚本语言,模拟用户行为操作,最接近用户真实场景,实现对web自动测试. Selenium,是目前的最火爆企业最主流的w ...
- 基于Java+Selenium的WebUI自动化测试框架(十四)-----使用TestNG的Sample
到目前为止,我们所写的东西,都是集中在如何使用Selenium和Java来定位和读取元素.那么,到底如何具体开展测试,如何实现参数化,如何实现判定呢?下面,我们来看看Java应用程序的测试框架吧. 当 ...
- 基于Java+Selenium的WebUI自动化测试框架(十)-----读取Excel文件(JXL)
之前,我们使用了读取XML文件的方式来实现页面元素的读取,并做成了基础页面类.下面,我们来进行一些扩展,通过Excel来读取页面元素. Excel的使用,大多数人应该都不陌生.那么Java读取Exce ...
- Appium移动自动化框架
引言:Appium 是一个移动端自动化测试开源工具,可以针对不同的平台用一套API来编写测试用例.本文对Appium自动化测试框架的功能进行了概括. 本文选自<软件自动化测试开发>. Ap ...
- CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维
前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...
- python自动化测试(3)- 自动化框架及工具
python自动化测试(3) 自动化框架及工具 1 概述 手续的关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 后面所谈到 ...
- Selenium2学习-001-Selenium2 WebUI自动化Java开发 Windows 环境配置
此文主要介绍 Selenium2 WebUI自动化Java开发 Windows 环境配置,供各位亲们参考,若有不足之处,敬请各位大神指正,非常感谢! 所需软件列表如下所示: 所属分类 具体名称 备注 ...
- Appnium移动自动化框架初探
作者:cryanimal QQ:164166060 本文简要介绍了appnium自动化框架的架构.加载流程.支持语言.相关配置,以及元素定位工具等. 官方网站: http://appium.io Ap ...
- Web自动化框架LazyUI使用手册(2)--先跑起来再说(第一个测试用例-百度搜索)
作者:cryanimal QQ:164166060 上篇文章中,简要介绍了LazyUI框架,本文便来演示,如何从无到有快速搭建基于lazyUI的工程,并成功运行第一个测试用例. 本文以百度搜索为例,选 ...
- Web自动化框架搭建——前言
1.web测试功能特性 a.功能逻辑测试(功能测试),这一块所有系统都是一致的,比如数据的添加.删除.修改:功能测试案例设计感兴趣和有时间的话可以另外专题探讨: b.浏览器兼容性测试,更重要的是体验这 ...
随机推荐
- Linux上常用软件安装和总结
Linux总结: 以前只顾着撸码,Linux这些一般都是运维玩的,然后也没怎么折腾过,每次上线也都只是发布下,最多也就是启停服务器.最近闲来无事就玩了玩Linux,还挺好的. 这里做一个总结来结束Li ...
- ActiveMQ入门练习
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久 ...
- java时间格式转化(毫秒 to 00:00)
把秒数转换为%d:%02d:%02d 格式 private String stringForTime(int timeSec) { int totalSeconds = timeSec; int se ...
- awk的+=用法
awk增加统计列值为增加列数或进行运行结果统计,使用符号 + =.增加的结果赋给符号左边变量值,增加到变量的域在符号右边.例如将 $ 1加入变量total,表达式为toatl+=$1.列值增加很有用. ...
- 理解JavaScript中的作用域
什么是变量,什么是作用域? 变量:简单来说就是在特定时间内保存特定值的一个名字而已,由于不存在定义某个变量必须要保存某种数据类型值的规则,所以变量的值及其数据类型可以在脚本生命周期内任意改变,变量可 ...
- SpringMVC源码情操陶冶-DispatcherServlet父类简析
阅读源码有助于陶冶情操,本文对springmvc作个简单的向导 springmvc-web.xml配置 <servlet> <servlet-name>dispatch< ...
- 夏令营提高班上午上机测试 Day 1 解题报告
Day 1的题难度上来说不算太高,但是T2和T3还是有一定的思维量的. 一个比较好的开始.虽然AK的人只有几个.. (懒得去翻result了..忘了当时拿了多少分了 (哦,前两天我们机房是没有成绩的, ...
- BZOJ 3620: 似乎在梦中见过的样子 [KMP 暴力]
和我签订契约,成为魔法少女吧 题意:求所有形似于A+B+A 的子串的数量 , 且len(A)>=k,len(B)>=1 位置不同其他性质相同的子串算不同子串,位置相同但拆分不同的子串算同一 ...
- C# 使用反射获取界面并传参
// 通过反射创建类库中的实例 try { // 通过反射,获取模块 Assembly assembly = Assembly.LoadFrom(AppDomain.CurrentDomain.Bas ...
- 实时滚动图表绘制方法: LightningChart教程 + 源码下载
LightningChart图形控件彻底发挥了GPU加速和性能优化的最大效应,能够实时呈现超过10亿数据点的庞大数据,为大家提供先进与快速的图表库.这里的实时图实现的比较简单,大家先试一下这个效果,熟 ...



