首页 > 其他分享 >在 Kubernetes 中运行 Locust 与 Selenium:安装 Chrome 和 ChromeDriver

在 Kubernetes 中运行 Locust 与 Selenium:安装 Chrome 和 ChromeDriver

时间:2024-10-27 09:58:53浏览次数:6  
标签:Kubernetes Chrome Locust chrome linux64 && options

在现代软件开发中,性能和用户体验是至关重要的,而负载测试和自动化测试可以帮助我们实现这一目标。在本文中,我们将讨论如何在 Kubernetes 环境中运行 Locust 和 Selenium,并详细介绍如何安装 Chrome 和 ChromeDriver。

1. Dockerfile 配置

首先,我们需要创建一个 Dockerfile,以构建一个包含 Locust 和 Selenium 的 Docker 镜像。以下是 Dockerfile 的内容:

FROM locustio/locust:2.31.3

# 设置 Chrome 的版本
ENV CHROME_VERSION 130.0.6723.69

USER root 
RUN apt-get update -qq -y && \
    apt-get install -y wget unzip && \
    apt-get install -y \
        libasound2 \
        libatk-bridge2.0-0 \
        libgtk-4-1 \
        libnss3 \
        xdg-utils && \
    wget -q -O chrome-linux64.zip https://storage.googleapis.com/chrome-for-testing-public/$CHROME_VERSION/linux64/chrome-linux64.zip && \
    unzip chrome-linux64.zip && \
    rm chrome-linux64.zip && \
    mv chrome-linux64 /opt/chrome/ && \
    ln -s /opt/chrome/chrome /usr/local/bin/ && \
    wget -q -O chromedriver-linux64.zip https://storage.googleapis.com/chrome-for-testing-public/$CHROME_VERSION/linux64/chromedriver-linux64.zip && \
    unzip -j chromedriver-linux64.zip chromedriver-linux64/chromedriver && \
    rm chromedriver-linux64.zip && \
    mv chromedriver /usr/local/bin/

# 设置 Chrome 的配置和缓存目录
ENV XDG_CONFIG_HOME=/tmp/.chromium
ENV XDG_CACHE_HOME=/tmp/.chromium

COPY . .
RUN pip install -r requirements.txt

解释

  1. 基础镜像:使用 locustio/locust 作为基础镜像。
  2. 安装依赖:更新包管理器并安装必要的库,以确保 Chrome 和 ChromeDriver 正常运行。
  3. 下载和安装 Chrome 和 ChromeDriver:从 Google 的存储库下载 Chrome 和 ChromeDriver。
  4. 配置目录:通过环境变量设置 Chrome 的配置和缓存目录,这一步非常重要。若未设置正确,可能会在 Kubernetes 中出现权限问题,具体参考 puppeteer-sharp

requirements.txt 示例

locust=2.31.3
selenium==4.21.0

2. Chrome 选项配置

在使用 Selenium 时,我们需要为 Chrome 配置一些选项,以确保它能够在无头模式下正常工作。以下是获取 Chrome 选项的代码示例:

import platform
from selenium import webdriver

def is_running_in_linux():
    return platform.system() == 'Linux'

def get_chrome_options():
    is_in_linux = is_running_in_linux()
    options_custom = webdriver.ChromeOptions()

    # Linux 下的 Chrome 选项
    if is_in_linux:
        options_custom.add_argument("--headless")  # 无头模式
        options_custom.add_argument('--disable-gpu')  # 禁用 GPU 加速
        options_custom.add_argument("--no-sandbox")  # 禁用沙箱模式
    else:
        options_custom.add_argument("--start-maximized")  # 启动时最大化窗口

    # 其他通用选项
    options_custom.add_argument("--disable-dev-shm-usage")  # 解决资源限制问题
    options_custom.add_argument("--ignore-ssl-errors=yes")  # 忽略 SSL 错误
    options_custom.add_argument("--disable-cache")  # 禁用缓存 

    return options_custom

解释

  • 操作系统检测:根据当前操作系统选择适当的 Chrome 选项。
  • 无头模式:在 Linux 环境中使用无头模式,以便在没有图形界面的情况下运行 Chrome。
  • 禁用沙箱:在 Kubernetes 环境中,禁用沙箱模式可以避免潜在的权限问题。

3. Locust 用户定义

下面是一个简单的 Locust 用户示例,使用 Selenium 控制 Chrome 访问特定页面:

from locust import User, task

class GetUrl(User):    
    customdriver = None  

    def on_start(self):               
        self.customdriver = webdriver.Chrome(options=get_chrome_options())

    @task
    def load_page(self):
        self.customdriver.get("http://example.com")  # 根据需要替换为实际 URL

解释

  • 用户定义:创建一个继承自 User 的类,使用 Selenium 控制 Chrome。
  • 启动时操作:在用户启动时初始化 customdriver
  • 任务定义:在 load_page 方法中执行实际的页面加载操作。

4. Kubernetes 部署

完成 Dockerfile 和代码后,可以将其构建为 Docker 镜像,并在 Kubernetes 中部署。以下是一个基本的 Kubernetes YAML 配置示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: locust
spec:
  replicas: 1
  selector:
    matchLabels:
      app: locust
  template:
    metadata:
      labels:
        app: locust
    spec:
      containers:
        - name: locust
          image: your-docker-image:latest
          ports:
            - containerPort: 8089
          env:
            - name: XDG_CONFIG_HOME
              value: /tmp/.chromium  # 设置 Chrome 的配置目录
            - name: XDG_CACHE_HOME
              value: /tmp/.chromium  # 设置 Chrome 的缓存目录
---
apiVersion: v1
kind: Service
metadata:
  name: locust-service
spec:
  type: NodePort
  ports:
    - port: 8089
      targetPort: 8089
  selector:
    app: locust

解释

  • Deployment:定义 Locust 的 Deployment,指定容器镜像和服务端口。
  • Service:创建一个 Service,使外部能够访问 Locust Web 界面。

结论

通过以上步骤,我们成功在 Kubernetes 中运行了 Locust 和 Selenium,并安装了 Chrome 和 ChromeDriver。确保配置正确的环境变量和 Chrome 选项,可以大大提高在 Kubernetes 环境中的稳定性。如果您有更多需求,可以根据项目的具体情况进行扩展和调整。

标签:Kubernetes,Chrome,Locust,chrome,linux64,&&,options
From: https://www.cnblogs.com/chenyishi/p/18507908

相关文章

  • kubernetes(k8s)简易学习
    容器与虚拟机容器为一种虚拟化技术,用来隔离运行在宿主机上的不同进程,使得进程之间、进程与操作者OS相互隔离、互不影响的技术。共享主机操作系统内核,无需虚拟化整个硬件。单个容器跑单个应用。优点:简易部署、启动快速、组合服务、易于迁移。虚拟机需要完整操作系统、虚拟化硬......
  • 【K8S系列】Kubernetes pod节点Unknown 问题及解决方案详解【已解决】
    在Kubernetes中,Pod的状态为Unknown表示无法获取Pod的当前状态。这通常意味着KubernetesAPI服务器无法与Pod所在的节点通信,或者Kubelet进程遇到问题。以下将详细介绍Unknown状态的原因、解决方案以及如何配置健康检查以提高系统的稳定性。一、Unknown状态......
  • 苹果的Safari浏览器和谷歌的Chrome浏览器哪个更优
    苹果的Safari浏览器和谷歌的Chrome浏览器在多个关键领域展现出显著的差异,包括:1.系统集成和优化;2.性能和速度;3.隐私保护措施;4.用户界面设计;5.扩展程序和插件支持。Safari作为苹果生态系统的一部分,提供了优化的系统集成和隐私保护,而Chrome则以其快速的性能和广泛的扩展支持在用户中......
  • Kubernetes的备份和恢复最佳实践是什么
    Kubernetes备份和恢复最佳实践包括:确保集群数据的完整性和一致性、定期执行备份和测试、利用自动化工具如Velero、备份集群元数据以及工作负载数据、考虑多地域灾备策略。在这些实践中,确保集群数据的完整性和一致性是极其重要的。这意味着在备份过程中,应当捕捉到Kubernetes集群的......
  • kubernetes【k8s介绍】【快速部署应用,管理容器】
    k8s提供:集中式管理集群的方法,也可快速部署应用1.关于部署方案2.什么时候需要k8s当你的应用只是跑在一台机器,直接一个docker+docker-compose就够了,方便轻松;当你的应用需要跑在3,4台机器上,你依旧可以使用每台机器单独配置运行环境+负载均衡器;当你的应用需要跑在10,20台机器......
  • chrome 控制台console 调用vue页面的方法--来自chatgpt的回答
    问题二:vue2的项目中chrome控制台输入$0.vue会输出什么在Vue2项目中,如果你在Chrome控制台中输入$0.__vue__,这个命令会返回$0当前选中的DOM元素对应的Vue实例。解释:$0:代表ChromeDevTools中当前选中的DOM元素。.vue:这是Vue2中的一个内部属性,它持有与该D......
  • Chrome浏览器跨越设置
    如何设置Chrome浏览器跨域AccesstoXMLHttpRequestat'xxxxxx'fromorigin'null'hasbeenblockedbyCORSpolicy:Crossoriginrequestsareonlysupportedforprotocolschemes:chrome,chrome-extension,chrome-untrusted,data,http,https,isol......
  • 从零开始实现WEB自动化 - Chrome Extention
    上篇我们说到用ChromeExtention的方式实现WEB自动化操作,我们以Chrome浏览器插件API为标准开发,后续在插件移植也非常的方便,可以把插件分发到各个浏览器市场,让其安装。准备复制第一篇初探的代码,在VisualStudioCode中打开,后续此代码作为我们第一阶段开发的基础功能清单首......
  • 通过DevTools逃离Chrome沙盒(CVE-2024-6778和CVE-2024-5836)
    介绍这篇博文详细介绍了如何发现CVE-2024-6778和CVE-2024-5836的,这是Chromiumweb浏览器中的漏洞,允许从浏览器扩展(带有一点点用户交互)中进行沙盒逃逸。简而言之,这些漏洞允许恶意的Chrome扩展在你的电脑上运行任何shell命令,然后可能被用来安装一些更糟糕的恶意软件。攻击者......
  • 修改chrome用户数据的路径
    ​1.打开chrome,地址栏输入:chrome://version,查看用户数据文件路径   2.运行CMD,删除原用户数据文件夹C:\Users\Administrator>rmdir/s "C:\Users\Administrator\AppData\Local\Google\Chrome\UserData\Default"C:\Users\Administrator\AppData\Local\Google\Chrom......