web自动化(6)——项目配置和Grid分布式

1. 框架的可配置性

项目之间的区别:

  • 兼容性:有些项目只兼容chrome,有些只兼容Firefox等
  • 元素定位特点:有些项目闪现快,有的项目很慢
  • 有些项目集成Jenkins,不需要用python生成allure报告

如果想要我们的框架在运用到一个新项目的时候,只需要修改一些配置文件,就需要我们框架本身就支持这些配置

2. 如何实现项目配置

三种方式

  • 启动参数
  • 配置文件
  • 环境变量(容器化)

2.1 找出配置项

  • driver_type:浏览器类型
  • wait_max:最长等待时间
  • wait_poo:最短的等待时间(频率)
  • allure_gen:是否生成allure报告
  • allure_show:是否自动打开allure报告
  • allure_path:指定allure报告的路径
  • 其它在代码中写的.....

2.2 保存到配置文件

为了不再生成更多文件导致管理混乱,我们可以在pytest.ini文件中新增一个条目用来保存我们的配置

其中,pytest条目下是pytest框架的配置,uitest下是我们ui自动化测试的配置

2.3 从配置文件中加载配置项

在core目录下创建settings.py

python 复制代码
from configparser import SafeConfigParser

from iniconfig import IniConfig


BOOLEAN_STATES = SafeConfigParser.BOOLEAN_STATES


def load_uitest_ini(file):
    ini = IniConfig(file)  # 加载文件内容
    ui_ini = ini['uitest']
    d = {
        "driver_type": ui_ini.get("driver_type", "chrome"),
        "wait_max": float(ui_ini.get("wait_max", "10")),
        "wait_poo": float(ui_ini.get("wait_poo", "0.5")),
        "allure_gen": BOOLEAN_STATES[ui_ini.get("allure_gen", "true")],
        "allure_show": BOOLEAN_STATES[ui_ini.get("allure_show", "true")],
        "allure_path": ui_ini.get("allure_show", "report"),
    }
    return ui_ini


settings = load_uitest_ini(r'D:\pythonProject2\pytest.ini')  # 配置项目设置为全局变量

2.4 使用配置

首先from core.settings import settings去导入配置,然后使用,举例我们的main.py可以修改为:

python 复制代码
import os

import pytest
from core.settings import settings

if __name__ == '__main__':
    os.environ['NO_COLOR'] = '1'
    pytest.main()
    report=settings["allure_path"]
    if settings["allure_gen"]:
        os.system(f"allure generate ./temp/allure_results -o {report} --clean")  # 生成报告
    if settings["allure_show"]:
        os.system(f"allure open {report}")  # 展示报告

举例:使用配置------浏览器驱动,修改conftest.py中的driver

python 复制代码
@pytest.fixture(scope='module')  # 这里设置scope=module是因为如果为函数级别的话,我们在test_user中第1个用例如果关闭了浏览器第二个用例就需要重新登录
def driver():
    driver = get_webdriver(settings["driver_type"])
    driver.implicitly_wait(5)
    driver.maximize_window()
    yield driver
    driver.quit()

其它想要配置的选项可以根据以上示例进行添加即可。

3. selenium Grid

Grid组件让selenium支持分布式,用于分布式自动化测试,通过控制多台机器、多个浏览器并行执行测试用例,在测试用例比较多的情况下比较实用。

3.1 本地搭建Grid

配置JDK运行环境(自行百度吧,最好装高版本的,防止和selenium-server不兼容,安装好后在命令行使用Java -version验证下);

需要安装 Selenium Server 的 Jar 文件,下载地址:https://www.selenium.dev/downloads/

最后,在放置selenium-server的位置打开终端,通过命令行启动 Selenium Grid Server

python 复制代码
java -jar selenium-server-4.16.1.jar standalone

其中selenium-server-4.16.1.jar是下载的selenium-server的文件名,启动后显示如下:

会有一个链接,点击后在浏览器会显示selenium-grid

图上sessins表示现在的任务数。

3.2 使用Grid中的浏览器

在项目新建a.py

python 复制代码
from selenium.webdriver import Chrome, Remote
from selenium.webdriver.chrome.options import Options as ChromeOptions

driver = Remote(command_executor='http://192.168.3.16:4444/wd/hub',
                options=ChromeOptions())
driver.get("https://baidu.com")
input()

运行后会看到selenium-grid中session变成1

相关推荐
VinciYan几秒前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
开源优测8 分钟前
深度解析 Pytest 中的 conftest.py
pytest
测试老哥22 分钟前
外包干了两年,技术退步明显。。。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
終不似少年遊*24 分钟前
美国加州房价数据分析01
人工智能·python·机器学习·数据挖掘·数据分析·回归算法
如若1231 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
西猫雷婶1 小时前
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
开发语言·python·opencv
初晴~1 小时前
【Redis分布式锁】高并发场景下秒杀业务的实现思路(集群模式)
java·数据库·redis·分布式·后端·spring·
有一个好名字2 小时前
zookeeper分布式锁模拟12306买票
分布式·zookeeper·云原生
一条测试老狗2 小时前
【UI自动化】从WebDriver看Selenium与Appium的底层关联
selenium·appium·自动化
老刘莱国瑞2 小时前
STM32 与 AS608 指纹模块的调试与应用
python·物联网·阿里云