**[English](https://github.com/abcnull/python-ui-auto-test/blob/master/README_en.md) | [博客](https://blog.csdn.net/abcnull/article/details/103379143)**
[TOC]
# python-ui-auto-test
python + selenium + unittest + PO + BeautifulReport + redis + mysql + ParamUnittest + 多线程 + 截图/日志 + 多浏览器支持 + RemoteWebDriver +文件读取 + 全参数化构建
搭建过程中非常感谢李鹏飞大侠的技术支持!后续有问题请在如下途径私聊联系!
欢迎大家 **Watch**,**Star** 和 **Fork**!
- 框架作者:**abcnull**
- csdn 博客:**https://blog.csdn.net/abcnull**
- github:**https://github.com/abcnull**
- e-mail:**abcnull@qq.com**
## 框架结构
```
python-ui-auto-test
- api-test(api 测试包,未添加内容)
- ui-test(ui 测试包)
- base(与项目初始化配置相关)
- case(测试用例脚本)
- common(共用方法)
- data(数据驱动)
- locator(页面对应的元素定位)
- page(页面类)
- report(输出报告)
- html(html 类型报告)
- log(log 日志报告)
- img(测试截图)
- resource(资源文件夹)
- config(配置文件)
- driver(驱动)
- util(工具类)
- README.md(项目介绍 md)
- requirements.txt(项目依赖清单)
- run_all.py(类似于 testng 文件执行测试套,单线程)
- run_all_mutithread.py(类似于 testng 文件执行测试套,多线程)
- venv(虚拟环境的文件夹,github 拉下来后需要自己创虚拟环境)
- .gitignore(git 忽略文件)
External Libraries
Scratches and Consoles
```
![框架结构](https://github.com/abcnull/Image-Resources/blob/master/python-ui-auto-test/1575304456217.png)
## 框架概述
- 采用 PO 思想,将 PageObject 更细致化,使得页面的元素定位和页面对应的数据分别放在 locator 和 data 中,case 中存放测试用例
- common 中存放了 PageCommon 和 BrowserCommon,分别是封装了页面操作和浏览器操作的代码
- base 中存放的是初始化数据库和驱动的 Assembler 装配器,用来在测试用例之初创建初始化配置。其`__init__(self)`方法源码如下所示:
```python
# 初始化所有工具
def __init__(self):
# 驱动装配
self.assemble_driver()
# redis 工具装配
if ConfigReader().read("project")["redis_enable"].upper() == "Y":
# 装配 redis 连接池工具
self.assemble_redis()
elif ConfigReader().read("project")["redis_enable"].upper() == "N":
self.redis_pool_tool = None
else:
self.redis_pool_tool = None
raise RuntimeError("配置文件中配置 redis 是否启用字段有误!请修改!")
# mysql 工具装配
if ConfigReader().read("project")["mysql_enable"].upper() == "Y":
# 装配 mysql 工具
self.assemble_mysql()
elif ConfigReader().read("project")["mysql_enable"].upper() == "N":
self.mysql_tool = None
else:
self.mysql_tool = None
raise RuntimeError("配置文件中配置 mysql 是否启用字段有误!请修改!")
# 将装配器保存到线程存储器中,键名为线程,键值为装配器对象
ThreadLocalStorage.set(threading.current_thread(), self)
```
- report 中分别存放了 html 测试报告,log 日志信息和 img 截图。测试报告采用 BeautifulReport 模板,log 日志的输出可以通过 util/config/config.ini 进行全套参数化配置,截图这块受于 BeautifulReport 的限制本来是存放于项目下 img 中,但目前通过`../`的方式还是将截图放在这里。对于火狐驱动会产生 log 日志在 case 用例中,目前我也通过`../`将火狐的日志移动此 log 文件夹中。html 和 截图可以配置选择重名是否被覆盖,log 直接配置成最大轮转数为 5,重名是否被覆盖,拿 html 举例,可以判断重名获取新的报告名,采用递归思想,源码如下所示:
```python
# 递归方法
# 判断报告的名字在配置文件指定路径下是否有重复,并根据配置是否允许重复返回报告新的名字
def get_html_name(self, filename: str = None, report_dir="."):
"""
获取新的报告名
:param filename: 报告名称
:param report_dir: 报告路径
:return: 通过配置文件判断报告是否可以被覆盖,返回新的报告名
"""
# 若允许被覆盖同名报告
if ConfigReader().read("html")["cover_allowed"].upper() == "Y":
# 返回报告名
return filename
# 若不支持覆盖同名报告
elif ConfigReader().read("html")["cover_allowed"].upper() == "N":
# 判断报告路径是否存在,若存在
if os.path.exists(report_dir + filename + ".html"):
# 如果名字不以 ")" 结尾
if not filename.endswith(")"):
filename = filename + "(2)"
# 如果名字以 ")" 结尾
else:
file_num = filename[filename.index("(") + 1: -1]
num = int(file_num)
# 报告名称字段自增
num += 1
filename = filename[:filename.index("(")] + "(" + str(num) + ")"
# 若报告不存在
else:
# 递归出口,运行测试并产出报告存放
return filename
# 递归:不断改变 filename 后报告是否还能找到
return self.get_html_name(filename, report_dir)
# 若配置中既不是 Y/y 也不是 N/n 就抛出异常
else:
raise RuntimeError("config.ini中[html]的cover_allowed字段配置错误,请检查!")
```
- 资源文件夹中 config 实现了项目完全依靠参数来配置运行,driver 文件夹中目前存放了所有主流驱动,版本信息请见 config.ini 中有介绍
![框架概述](https://github.com/abcnull/Image-Resources/blob/master/python-ui-auto-test/1575305550583.png)
- 工具类中包括配置文件读取器,log 日志工具,mysql 连接工具,redis 连接池工具,报告生成工具,截图工具,文本工具,线程本地存储工具
- `run_all.py`可以单线程运行所有测试用例,`run_all_mutithread`则可以多线程运行测试用例,但是要注意的是多线程运行后测试报告还是无法汇总成一个报告,这个得对 BeautifulReport 进行二次开发才可以解决
## 层次结构思想
框架采用火热的 PageObject(PO)思想使得结构更加清晰,对于逻辑性代码可以在 page 文件夹中维护,业务流程组织可以在 case 中维护,data 数据改变或者 locator 元素定位改变也可以快速跟踪修改,base 中存放初始化的工具,common 存放共用方法。至于用例如何组织来运行,可见下面几种方式
- case 文件中的一个测试类中分有多个 test 打头的方法,这些方法通过`setUp()`方法来初始化装配器(装配器中含有一个驱动),也就是一个 test 打头的方法为一个测试点,每开一个测试点相当于使用了一个新的装配器,其中含有驱动。测试类中一个 test 打头的方法可以是一个完整流程
- 如若不希望写`setUp()`,自己可以专门写个方法放在某一个 test 打头的方法里头也行,这样不会每个 test 都跑这个方法了
- 框架中有个非常好用的功能,比如测试电商系统类似淘宝,天猫的购物网站系统,分为商品页面,购物车页,结算页等,
没有合适的资源?快使用搜索试试~ 我知道了~
python-ui-auto-test:WebUI自动化:python +Selenium+单元测试+ PageObject +...
共52个文件
py:37个
exe:5个
md:3个
24 下载量 119 浏览量
2021-05-11
15:00:54
上传
评论 3
收藏 19.93MB ZIP 举报
温馨提示
| [TOC] python-ui-auto-test python + selenium + unittest + PO + BeautifulReport + redis + mysql + ParamUnittest + 多线程 + 截图/日志 + 多浏览器支持 + RemoteWebDriver +文件读取 + 全参数化构建 搭建过程中非常感谢李鹏飞大侠的技术支持!后续有问题请在如下途径私聊联系! 欢迎大家 Watch,Star 和 Fork! 框架作者:abcnull csdn 博客: github: e-mail: 框架结构 python-ui-auto-test - api-test(api 测试包,未添加内容) - ui-test(ui 测试包) - base(与项目初始化配置相关) - case(测试用例脚本)
资源详情
资源评论
资源推荐
收起资源包目录
python-ui-auto-test-master.zip (52个子文件)
python-ui-auto-test-master
ui-test
locator
baidu_result_locator.py 150B
baidu_main_locator.py 251B
csdn_locator.py 47B
__init__.py 33B
case
test_csdn_case.py 2KB
__init__.py 9B
test_other_case.py 2KB
test_baidu_case.py 3KB
base
__init__.py 9B
assembler.py 9KB
data
baidu_result_data.py 55B
baidu_main_data.py 164B
__init__.py 18B
csdn_data.py 181B
suite
run_all_mutithread.py 2KB
run_all.py 1KB
page
baidu_result_page.py 307B
__init__.py 15B
csdn_page.py 216B
baidu_main_page.py 475B
__init__.py 54B
common
page_common.py 2KB
browser_common.py 3KB
__init__.py 12B
resource
config
config.ini 3KB
__init__.py 21B
driver
SafariDriver.safariextz 229KB
chromedriver.exe 8.3MB
operadriver.exe 10.29MB
IEDriverServer.exe 2.89MB
msedgedriver.exe 8.73MB
__init__.py 15B
geckodriver.exe 13.81MB
__init__.py 30B
report
log
ui_log.log 158KB
img
force_test_1_TestCsdnCase.png 347KB
html
UI测试报告.html 130KB
requirements.txt 0B
README.md 5KB
util
thread_local_storage.py 1KB
log_tool.py 4KB
text_tool.py 739B
__init__.py 12B
report_tool.py 3KB
mysql_tool.py 2KB
screenshot_tool.py 3KB
redis_pool.py 2KB
config_reader.py 1KB
api-test
__init__.py 28B
.gitignore 58B
README_en.md 11KB
README.md 11KB
共 52 条
- 1
亲爱的薄荷绿
- 粉丝: 35
- 资源: 4664
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Ollama安装文件,从官网下载
- 数据库编程中Cursor(游标)的概念、功能与应用场景解析
- 通过 OpenCV 加载视频文件 1.mp4,并使用 YOLOv8 模型进行姿态检测 它逐帧处理视频,检测人体关键点并绘制关键点及其连接 具体来说,代码首先加载 YOLOv8 模型并定义了关键点之间的
- 1ef69c3e3bfa6ebc829f03a871190d69.part01
- 9.6.0.3_1d9317597fbe653ff1d29cfaacfca6b8.apk
- lv_0_20250204142911.mp4
- NASA锂电池数据集(补).zip
- 面向对象课程设计基于Java+MySQL+JDBC+JavaSwing的图书信息管理系统源代码+数据库+课程设计报告
- DHCP服务租约和续约过程流程图
- 1ef69c3e3bfa6ebc829f03a871190d69.part02
- 1ef69c3e3bfa6ebc829f03a871190d69.part03
- 1ef69c3e3bfa6ebc829f03a871190d69.part04
- 基于Servlet+Jsp+MySQL的艺术作品展览管理系统源代码+数据库
- 1ef69c3e3bfa6ebc829f03a871190d69.part05
- 1ef69c3e3bfa6ebc829f03a871190d69.part06
- 财务收支数据年终报表-可视化图表.xlsx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0