# ui_test_framework_2022 **Repository Path**: lin-haoqiang/ui_test_framework_2022 ## Basic Information - **Project Name**: ui_test_framework_2022 - **Description**: 基于PO模式 / 关键字驱动模式的web UI自动化测试框架(Pytest+Selenium) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 0 - **Created**: 2023-01-19 - **Last Updated**: 2024-07-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一、项目概述 该项目是基于pytest + selenium的web端UI自动化测试框架的demo,以稀土掘金为测试网站:https://juejin.cn/。 该项目总体分为两个目录(每个目录其实相当于IDEA的Module概念。): - pom(以pom模式演示的demo工程) - kdt(以关键字驱动模式演示的demo工程) # 二、demo启动说明 注意:请先使用`pipenv`安装package。 ## pom 1. 启动`pom/run.py`。 ## kdt 1. 启动`kdt/run.py`。 1. 注意,默认在`kdt/pytest.ini`只选择了执行`test/test_excel.py`。 2. 本项目test_excel.py生成的用例有14条,全部完成需105秒左右。如需挑选用例执行,可在`kdt/pytest.ini`的addopts使用`-k`参数。 # 三、pom目录讲解(pom模式) pom目录中,主要目录为3个: - `base`:存放页面对象公共的selenium操作,被页面对象继承且调用。 - `pageobject`:存放页面对象,被测试用例直接调用。 - `test`:存放测试用例。 pom目录要介绍的东西不多,毕竟pom相对简单易懂。暂时设置的功能也不多,因为部分功能与kwt目录有重叠,所以大部分功能都设置在了kwt目录。所以本项目重点的kwt目录。 # 四、kwt目录讲解(关键字驱动模式) ## 项目功能描述 1. 支持以excel文件来驱动用例的**动态**生成,也支持创建test_xx.py自己编写代码来执行。 2. 支持日志记录。 3. 集成allure测试报告。 1. allure报告含有步骤说明、步骤的截图、日志记录 4. 通过excel文件动态生成用例执行时,仍支持有选择地、灵活地执行所需用例。方式如下: 1. 利用命令行参数`-k` 2. 该参数不仅仅可以筛选用例方法名,也可以筛选用例方法使用`@pytest.mark.parametrize`时的ids,所以我们也可以通过excel文件的用例名称来筛选用例的执行 3. 修改`glob.glob("excel/**/test_*.xlsx", recursive=True)` 4. 利用@pytest.mark,即pytest.ini的markers 5. 可指定用例方法是否使用同一浏览器。 ## 项目启动逻辑概述 1. 主程序运行,`pytest.main()`执行后启动pytest框架 2. 执行pytest夹具。(通常会在这里启动driver,即浏览器) 3. pytest扫描指定路径的测试用例文件。(test_xx.py) 1. 在所有的test_xx.py文件,有一个特殊文件为`test_excel.py`,该文件会扫描指定目录下的所有excel文件,读取后根据文件动态生成用例方法。 2. 除`test_excel.py`文件外,其它test_xx.py按照正常流程执行 4. pytest执行测试用例方法。 ## 概念与关系解读 ### excel文件与testsuite excel文件中,一个sheet为一个suite,一个suite可存放多个用例 ## excel文件格式 ![img.png](temp/excel_format1.png) ![img.png](temp/excel_format2.png) ![img.png](temp/excel_format3.png) # 五、一些说明 ## 关于用例与浏览器的数量绑定关系 执行每个用例都要打开一个浏览器然后再关闭吗? 不一定。 pom和kdt中你都可以选择。你也可以选择每个类的所有用例都只使用浏览器。 如何实现?使用夹具。 目前的实现是定义多个启动driver的夹具,如driver夹具的范围为function级别、class_driver夹具的范围为class级别。 > 提醒:当使用数据驱动,每次执行用例,如果夹具的范围是fucntion,则每次基于数据驱动的执行用例方法都会执行方法级别的夹具。 ## 关于滑动验证码破解 1. 本项目也针对掘金的登录的滑动验证码进行了代码操作。但关于验证码识别,如果做不到成功率高,最好不要弄,除非你花钱找专业的。 2. 掘金这个滑块验证码,有时当手动或自动将滑块拖到视觉上正中间时也验证失败。(不知道是否是验证失败次数多了,自动限制IP了)