在 docker 中使用 selenium 运行 django 测试

2024-05-01

为了执行测试,我通常运行一个单独的容器:

docker-compose run --rm web /bin/bash

其中web是django的容器。我不时从 shell 执行 py.test 。

为了能够使用 django 从容器访问 selenium 并允许浏览器从 selenium 容器访问 django 的 liveserver,我决定使用“net”参数,该参数允许容器共享网络。所以我将它添加到 yml 中:

selenium:
    image: selenium/standalone-firefox
    net: "container:web"

不幸的是这不起作用。我在 django 容器中没有看到 4444 端口。

它只有在以下情况下才有效net:"container:web"我指定自动生成的容器的名称,例如net:"container:project_web_run_1".

我也尝试过docker-compose run --rm .... use docker-compose up --no-deps改变command参数为py.test functional_tests但这也不起作用。

这是在容器中使用 selenium 的权利吗?


我是这样做的。基本问题是 docker-compose run 将生成不同的主机名(project_container_run_x),其中 x 很难确定。我最终只是离开了IP地址。我还确保 DEBUG 为 False,否则我会收到错误的请求。

我正在使用 StaticLiveServerTestCase,如下所示:

import os
import socket

os.environ['DJANGO_LIVE_TEST_SERVER_ADDRESS'] = '0.0.0.0:8000'

class IntegrationTests(StaticLiveServerTestCase):
    live_server_url = 'http://{}:8000'.format(
        socket.gethostbyname(socket.gethostname())
    )

    def setUp(self):
        settings.DEBUG = True
        self.browser = webdriver.Remote(
            command_executor="http://selenium:4444/wd/hub",
            desired_capabilities=DesiredCapabilities.CHROME
        )

    def tearDown(self):
        self.browser.quit()
        super().tearDown()

    def test_home(self):
        self.browser.get(self.live_server_url)

我的 docker-compose 文件包含 selenium 的这个文件并扩展了 Web 容器(django 正在运行的地方)。端口 5900 对 VNC 开放。我喜欢将其隔离在 docker-compose.selenium.yml 之类的东西中

version: '2'
services:
  web:
    environment:
      SELENIUM_HOST: http://selenium:4444/wd/hub
      TEST_SELENIUM: 'yes'
    depends_on:
      - selenium

  selenium:
    image: selenium/standalone-chrome-debug
    ports:
      - "5900:5900"

我可以运行类似的测试

docker-compose run --rm web ./manage.py test

所以我的网络容器通过“selenium”主机访问selenium。然后,Selenium 通过动态确定的 IP 地址访问 Web 容器。

另一个问题是,人们很容易只使用“web”作为主机名。如果您的 docker-compose run 命令启动了一个单独的 Web 容器 - 这似乎可以工作。但是,它不会使用您的测试数据库,因此这不是一个很好的测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 docker 中使用 selenium 运行 django 测试 的相关文章

随机推荐

  • java中如何将字符串日期转换为时间戳?

    我想在java中将字符串日期转换为时间戳 我编写了以下编码 我声明 date1 的日期是 7 11 11 12 13 14 SimpleDateFormat datetimeFormatter1 new SimpleDateFormat y
  • Android 动态删除按钮

    我有一个按钮 当我按下它时 我想将其删除 而不是使其不可见 我读到我可以使用layout removeView mybutton 但布局是什么 我怎样才能在我的活动中得到它 Button showQuestion private void
  • findPreference(java.lang.CharSequence) 已弃用

    它给我错误 findPreference java lang CharSequence 已被弃用 目前 我的应用程序的目标是 API 10 及更高版本 任何形式的帮助来解决这个问题将不胜感激 公共类 SettingsActivity 扩展
  • 带有 Form 和 $setPristine 的 Angular 1.5 组件

    我正在尝试在 Angular 1 5 的组件中使用表单 我的表单可以正常工作 因为我有模型绑定并且可以在提交时获取数据 所以我已经完成了 90 的目标 缺少的是能够使用 setPristine 正确重置表单 我尝试了几种方法 第一种方法是将
  • C++ 虚(密封)函数

    我在我的 C 项目中使用 dll 中的类 一切都工作正常 直到 当尝试调用某个方法 在对象浏览器中列出 时 我收到一条错误消息 指出该方法不是命名空间的成员 经过调查 我注意到该方法被列为 virtual void x seal 有没有办法
  • webpack - 如何将捆绑包提取到各个组件

    我想从bundle js 一个webpack文件 中解压 提取所有组件和js文件 我只留下这个文件 我已经用谷歌搜索并尝试了几种方法来解压捆绑js文件 但它没有成功 我也尝试过该解决方案 请查找参考 如何提取Webpack中的bundle
  • 从终端输入缓冲区加载到参数堆栈

    为什么这段代码不起作用 TIB 10 ACCEPT TIB SP 1 cells 10 cmove 在该代码中 我尝试输入一个字符串并将其存储在终端输入缓冲区中 然后将其存储在参数堆栈中 但对于 S 我发现这不起作用 参数堆栈向内存不足方向
  • 这是什么文本选择控件?

    我想在具有各种文本字段的活动上的文本选择上实现相同性质的控制类型 实现图片所示行为的任何想法 参考此来自安卓2 3 http developer android com sdk android 2 3 html文档 您可以使用此方法创建自己
  • 在 Pandas 中计算滚动回归并存储斜率

    我有一些时间序列数据 我想计算 Pandas 中最后 n 天的分组滚动回归 并将该回归的斜率存储在新列中 我搜索了较旧的问题 它们要么没有得到解答 要么使用了 Pandas OLS 我听说它已被弃用 我想我可能可以使用df rolling
  • Azure Web 应用程序中 Docker 中的 Laravel 无法从已安装的文件存储中提供图像

    我有一个 azure web 应用程序 带有一个运行 apache 的自定义容器 带有 laravel 的 php 7 4 和一个安装的 azure 文件存储 从已安装的存储提供 png 文件确实适用于我在 docker 桌面中的本地构建
  • 连接字符串列中的唯一字符

    我有一个 data frame 其中有一个字符串列 city 它由用 分隔的连接字母组成 dt data frame id letters 1 6 city c A B B D A D G A C F G C D dt id city 1
  • 如何在nextjs中安装tailwind元素?

    我正在 nextjs 中为滑块安装顺风元素 但它在 nextjs 中不起作用 有任何解决方案可以轻松安装它 我遵循这个方法 1 1 https tailwind elements com quick start 当我添加此导入 tw ele
  • Svelte:如何等待组件渲染

    我正在制作一个基于套接字连接的简单应用程序 基本上 一个用户决定其他用户可以看到什么 功能之一是为其他用户启动计时器 因此 有一个带有timerState变量和startTimer函数的Timer组件 当用户连接到套接字时 计时器组件与整个
  • Angular Material如何使按钮与输入高度相同

    我有这个小表单 其中包含两个字段 轮廓外观 和一个按钮
  • 如何将 HashMap> 存储在列表中?

    我的哈希图将字符串存储为键 将数组列表存储为值 现在 我需要将其嵌入到列表中 也就是说 它将采用以下形式 List
  • 通过NVM为特定项目(文件夹)设置不同的节点版本

    我知道我可以通过以下方式更改节点版本nvm useCLI 命令 但是 我想为某个项目 文件夹 设置不同的特定节点版本 它已更改为nvm use命令但它恢复为default version每当我重新启动terminal or webstorm
  • 当条件满足时如何进入调试模式?

    有没有办法在满足一定条件时进入调试模式 例如 假设我想在以下行进入调试模式i 1变为真 using System namespace ConditionalDebug public class Program public static v
  • CodeIgniter - 为什么使用 xss_clean

    如果我正在清理我的数据库插入 并且还转义我编写的 HTMLhtmlentities text ENT COMPAT UTF 8 是否还需要使用 xss clean 过滤输入 它还有什么其他好处 xss clean http docs gip
  • 编写大 JSON 文件避免内存不足问题的最佳方法

    首先 请注意今天是我第一天GSON 我正在尝试使用编写 Json 文件GSON图书馆 我有几千个JsonObjects里面一个ArrayList 当写入 Json 文件时 它应该看起来与此类似 hash index 00102x05h06l
  • 在 docker 中使用 selenium 运行 django 测试

    为了执行测试 我通常运行一个单独的容器 docker compose run rm web bin bash 其中web是django的容器 我不时从 shell 执行 py test 为了能够使用 django 从容器访问 seleniu