# python_pytest_selenium_PO_allure_DDT **Repository Path**: xiao_gao_xian_sheng/python_pytest_selenium_-po_allure_-ddt ## Basic Information - **Project Name**: python_pytest_selenium_PO_allure_DDT - **Description**: python+pytest+selenium+PO+allure+DDT实现web自动化测试框架 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-02 - **Last Updated**: 2025-07-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Web自动化测试框架 基于Python+Pytest+Selenium+PO模式+Allure+DDT的Web自动化测试框架 ## 功能特性 - 基于Page Object模式设计 - 支持多浏览器测试 - 支持数据驱动测试(DDT) - 集成Allure报告 - 完善的日志系统 - 自动管理浏览器驱动 ## 快速开始 生成依赖文件:pip freeze > requirements.txt 1. 安装依赖: `pip install -r requirements.txt` 2. 配置config.ini 3. 运行测试: `python run.py` pytest_selenium_ddt/ ├── config/ │ ├── __init__.py │ ├── config.ini # 配置文件 │ ├── config.py # 配置管理 │ └── constants.py # 路径常量 ├── data/ │ └── data.yaml # 测试数据 ├── drivers/ │ ├── chromedriver.exe # 各浏览器驱动 │ ├── geckodriver.exe │ └── msedgedriver.exe ├── logs/ # 日志文件 ├── page_base/ │ └── page_base.py # 页面基类 ├── page_element/ │ └── el_jiuxian_login.py # 元素定位 ├── page_object/ │ └── page_jiuxian_login.py # 页面对象 ├── report/ # Allure报告 ├── screenshots/ # 截图 ├── tests/ │ ├── __init__.py │ └── test_login2.py # 测试用例 ├── utils/ │ ├── __init__.py │ ├── email_util.py # 邮件工具 │ ├── log_util.py # 日志工具 │ ├── logger.py # 日志配置 │ ├── mysql_util.py # 数据库工具 │ ├── read_data_util.py # 数据读取 │ ├── shutil_util.py # 文件操作 │ ├── timer.py # 时间工具 │ └── zipfile_util.py # 压缩工具 ├── conftest.py # pytest夹具 ├── pytest.ini # pytest配置 ├── README.md # 项目说明 ├── requirements.txt # 依赖库 └── run.py # 主运行文件 # 安装插件: pip install -r requirements.txt # 指定模块运行 # if __name__ == '__main__': # pytest.main(["-vs", 'test_login.py']) v:详细输出测试用例名称和结果 -s:允许测试中的 print 或日志直接显示 # 指定文件夹 # pytest.main(["-vs", './interface_testcase']) # 通过nodeid制定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名组成 # pytest.main(["-vs", './interface_testcase/test_interface.py::TestLogin::test03']) # 显式指定测试用例的执行顺序 # @pytest.mark.run(order=1) 数字越小,优先级越高(order=1 比 order=2 先执行) order=-1 表示最后执行 # (Data-Driven Testing,核心是分离数据与逻辑) pip install pytest ddt pyyaml # run.py生成allure报告时:同时运行标记为 'search' 和 'add' 的用例 pytest.main(['-vs', '--alluredir', './temp/report', '-m', 'search or add']) # 查看帮助 pytest -h # gitee仓库命令: git add . # 提交 git commit -m 'update' # 推送 git push # 拉取 git pull origin main # 解决冲突 # 查看冲突文件 git status # 用编辑器打开冲突文件,你会看到类似这样的标记 <<<<<<< HEAD 本地修改的内容 ======= 远程修改的内容 >>>>>>> branch-name # 手动解决冲突 删除 <<<<<<< HEAD, ======= 和 >>>>>>> branch-name 这些标记 # 标记冲突已解决 git add 冲突的文件名 # 完成合并 git commit -m '冲突已解决,请推送' git push 这是一个 PowerShell 命令,创建一个名为 .gitignore 的新文件,-ItemType File 指定要创建的是文件类型 New-Item .gitignore -ItemType File 用记事本(Notepad)打开刚创建的 .gitignore 文件 notepad .gitignore 运行以下命令,让 Git 停止跟踪它们(但保留本地文件): --cached 表示 仅从 Git 缓存中移除,不删除本地文件 git rm --cache -r .env .env.prod .env.test git rm --cache .env* 提交更改: # 将 .gitignore 文件添加到 Git 的暂存区(staging area) git add .gitignore 提交更改到本地 Git 仓库 git commit -m "加.gitignore 规则,移除.idea目录的 Git跟踪" 首先确认你要回滚的提交记录: git log --oneline # 或更详细的日志 git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit git revert # 示例 git revert e4f5g6h 强制将远程仓库main主分支覆盖到远程仓库子分支sub-branch git push -f origin main:sub-branch 仓库创建分支本地看不到远程分支的问题解决方案: 首先获取所有远程分支信息 git fetch --all 查看所有远程分支 git branch -r 或查看所有分支(本地+远程) git branch -a 创建本地分支并关联远程分支 如果你想在本地创建一个分支并跟踪远程分支 git checkout -b 本地分支名 origin/远程分支名 例如:git checkout -b roncoo_branch origin/roncoo_branch 确认当前所在分支: git branch # 进行修改并提交 git add . git commit -m "在roncoo分支上做了修改" # 推送到远程 git push origin roncoo_branch 推送代码到远程分支 git push origin 本地分支名:远程分支名 如果本地分支名和远程分支名相同,可以简写为: git push origin 分支名 或者如果你已经设置了上游跟踪分支(使用 -u 参数): git push -u origin 分支名 # 第一次推送时使用 git push # 之后可以简写 确保你的远程仓库配置正确(查看仓库信息): git remote -v 切换到主分支(master/main)的方法 git checkout master/main 操作步骤:将本地分支代码合并到本地主分支,再推送到远程主分支 1. 确保本地主分支(master)是最新的: git checkout master # 切换到主分支 git pull origin master # 拉取远程最新代码 2.并本地分支(如 xiao_gao_test_branch)到本地 master git merge xiao_gao_test_branch # 将指定分支合并到当前分支(master) 如果出现冲突: 需要手动解决冲突后,再提交 git add . # 标记冲突已解决 git commit -m "Merge branch xiao_gao_test_branch into master" 3. 将本地 master 推送到远程仓库 git push origin master # 推送本地 master 到远程 # pytest常用的装饰器和标记 # @pytest.fixture用于测试用例执行之前或之后进行一些设置和清理工作 # @pytest.mark.skip(reason='因为坏了')用于跳过某个测试用例,reason参数非必填用于解释为什么跳过该用例 # @pytest.mark.skipif(sys.version_info < (3, 8), reason="需要python版本3.8+") sys是Python的标准库模块用于获取当前python的版本 # @pytest.mark.xfail作用是该用例预期为失败但是执行成功的话报告会显示XPASS要是失败的话显示XFAIL # @pytest.mark.usefixtures("login")用于在测试类或测试函数上应用一个或多个夹具。它可以让你在不直接传入夹具参数的情况下使用夹具 # @pytest.mark.smoke用于为测试函数添加自定义标记 pytest -m smoke终端这么写就只运行smoke标签的用例 # @pytest.mark.timeout(0.1)用于该用例超过设定的时间就会执行失败 # @pytest.mark.filterwarnings("ignore::DeprecationWarning")用户忽略警告的 # @pytest.mark.tryfirst将夹具放在所有其他夹具之前执行@pytest.mark.trylast将夹具放在所有其他夹具之后执行 # @pytest.mark.run(order=2)用于设置用例的执行顺序 # @pytest.mark.dependency()用于定义测试之间的依赖关系。如果某个测试失败,则依赖于它的测试将被跳过 @pytest.mark.dependency(depends=["test_01"]) # @allure.feature('用例的所属模块') # @allure.story('实现登录的操作行为') # @allure.severity(allure.severity_level.NORMAL) 用例的等级 可选值有 blocker(阻塞性,如核心功能无法使用)、critical(严重,如主要功能报错)、normal(一般,常规功能问题 )、minor(次要,细微功能瑕疵 )、trivial( trivial,极微小问题,如 UI 轻微不规整 ) # @allure.epic('这是测试总说明') # @allure.title('一个用例标题') # @allure.testcase('存放系统的地址') 点击链接可直接跳转到对应测试用例管理系统 # @allure.issue('对应的缺陷地址') 用例失败时,直接链接到具体缺陷,便于追踪 # @allure.description('用例的详细描述') # @allure.step('用例的操作步骤') # *args 调用时,多余的参数会被 *args 捕获为元组 (1, 2, 3) 或 (10, 20) # **kwargs 调用时,多余的键值对会被 **kwargs 捕获为字典 {"name": "Alice", "age": 25, ...} # 夹具的scope参数 # function:每个测试函数调用一次。 # class:每个测试类调用一次。 # module:每个模块调用一次。 # session:整个测试会话调用一次。 # package:每个包调用一次。