# webTest框架介绍
### 简介
本框架基于Python3+selenium3+unittest组成,用户以Page Object的模式编写用例。元素的定位和操作按照页面划分,达到Web端自动化回归测试的目的,并生成测试报告。
### 环境配置
##### 注: 无桌面版linux目前只做到支持firefox(参考jenkins部署的服务器)
- 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。用例的大概编写方式如下图。
![image](http://upload-images.jianshu.io/upload_images/6053915-4f08935ff9ddff18.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- Xmind
存放Xmind文件, xmind文件用于编写测试用例。
- config.py
用于存放绝大部分配置。继承于BaseConf类, 可拥有自己的配置。
- requirements.txt
用于存放本框架所需库。
- run_case.py
存放组织用例, 生成测试套件, 运行测试用例等函数。
- webdriver_test.log
存放测试用例执行时候的有关操作和错误信息等。
#### 注: 以上目录结构/命名可能并不合理, 有志之士可改之。
---
### 使用手册
##### 以下内容若已安装, 可跳过。
- 安装Python3
[Python3.6下载地址](https://www.python.org/downloads/release/python-364/)
下载对应操作系统的Python版本并安装。
- 下载IDE(非必须)
推荐Pycharm
[Pycharm下载地址](https://www.jetbrains.com/pycharm/)
- 安装必须的库
目录中有install.py, 安装好Python之后, 在终端窗口中输入如下命令:
linux/mac: ```python3 install.py```
windows: ```python install.py```
注意: 安装时需要带上install.py路径或者进入该文件所在目录。
- Pycharm配置(若有)
- 第一步: 配置项目Python环境
File->Open
![image.png](http://upload-images.jianshu.io/upload_images/6053915-01ed844c0870d6c7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
选择webTest目录, 点击窗口右下角的Open
![image.png](http://upload-images.jianshu.io/upload_images/6053915-cd6a91df8687e4c0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
打开Preferences, 在Project Interpreter里选择刚才安装Python的地址, 点击OK
![image.png](http://upload-images.jianshu.io/upload_images/6053915-e4ad74e6fc94703b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 第二步: 配置run_case.py
点击Edit Configurations
![image.png](http://upload-images.jianshu.io/upload_images/6053915-7e2c8d7c3be8afb3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
如果没有Python配置的话, 点击图中"+"图标, 然后选择Python并添加
![image.png](http://upload-images.jianshu.io/upload_images/6053915-5036e9d36e54da08.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image.png](http://upload-images.jianshu.io/upload_images/6053915-92391a98b0d090c5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
配置脚本
![image.png](http://upload-images.jianshu.io/upload_images/6053915-9bb907d9d3df9026.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 第三步: 运行用例
右击run_case.py, 选择Run则为运行模式, Debug则为调试模式
![image.png](http://upload-images.jianshu.io/upload_images/6053915-9eae73a79ef61182.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 用例编写规则
Python:
- 可参考DriverAvatarSearch编写用例(最好用例的类名不重复)
- 用例需要写在TestSuite/测试集/这种目录下
- 用例需要继承base_case.py
- 用例需要以test开头如test_bmp
- 用例的test函数需要带上screenshot的装饰器, 默认失败重跑1次+截图, 不带无此功能
- 报告会按照时间生成
- 日志在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不带桌面无�
- 1
- 2
前往页