Django 使用 selenium 进行测试,未加载固定装置

2024-01-27

我正在使用 Selenium 为 Django 网站设置功能测试。我有一个固定文件(users/fixtures/users.json)并在另一个应用程序的功能测试中使用它(accounts)。运行测试时,我还运行我的开发服务器来接受来自 Selenium 浏览器自动化的请求;我跑./manage.py test and ./manage.py runserver在同一设置模块上,以便两者都具有同一数据库的凭据。

My accounts测试无法加载users夹具:

from django.test import TestCase


class AccountCreationTestCase(TestCase):
    fixtures = ['users']

    # Tests depending on user login follow.
    # These tests are run via Selenium for browser automation.

当我通过命令行手动将夹具加载到测试数据库中时,这些测试会成功,但否则会失败,所以我知道它们正在使用数据库中存在的夹具数据,而且我也知道它们会失败加载测试夹具。

回顾一下:我正在跑步./manage.py test and ./manage.py runserver在定义测试数据库访问凭据的同一设置模块上。如果将装置加载到测试数据库中,则当测试通过 Selenium 运行时,该数据应该可供测试使用。

我缺少什么?

编辑 1:对于上下文,我使用的是 Django 1.8。另外,我使用 Selenium 来自动化 PhantomJS,以便测试可以运行得更快。

编辑 2:我刚刚更彻底地阅读了 Django 文档,发现了我遇到的两个问题。

第一期:Django 测试自动前缀 https://docs.djangoproject.com/en/1.9/ref/settings/#test数据库名称与test_,因此您必须确保您的测试服务器和 Django 测试按名称使用相同的数据库,如下所示:

DATABASES = {
    'NAME': "test_db_name",
    'TEST': {
        'NAME': "test_db_name"
    }
}

第二期:Django 文档 https://docs.djangoproject.com/en/1.9/topics/testing/overview/#the-test-database解释 Django 在测试运行之间破坏测试数据库。这将导致开发服务器失败,因为它需要数据库的存在。 Django 1.8 引入了--keepdb测试运行程序的选项将在测试之间保持数据库实例。虽然此标志确实允许服务器在测试数据库上运行,但我似乎仍然无法将装置加载到该数据库中。这可能是由于使用新标志造成的,该标志确实显着修改了测试在加载测试数据库的方式方面的行为。


使用 Selenium 进行 Django 测试可能会很棘手。回顾一下,要让这样的测试发挥作用,您必须处理三个主要问题:

1) Selenium 需要一个正在运行的 Django 服务器来反弹请求。

2) 您正在运行的 Django 服务器应该连接到测试数据库。

3) TestCase 测试在事务中运行。由于正在运行的 Django 服务器无法查看测试用例的事务,因此您加载的任何固定装置对于 Selenium 将完全不可见/无法访问(来源:Lara 的链接,qris 的回答 https://stackoverflow.com/questions/12041315/how-to-have-django-test-case-and-selenium-server-use-same-database).

解决方案: 要解决前两个问题,您需要一个特定于测试的设置文件。在其中,您需要定义一个指向测试数据库的默认数据库,并且需要提供测试数据库的设置以使名称匹配(请参阅我的问题中的示例)。当您计划运行测试时,您需要使用测试设置文件运行 Django 开发服务器和测试。

为了解决第三个问题,使用TransactionTestCase代替TestCase. TransactionTestCase旨在让开发人员在测试期间更好地控制事务行为,因此它不会自动运行事务内的所有内容(这反过来又使正在运行的服务器实例能够访问固定装置)。尽管这并不是我们在本例中尝试做的事情,但结果是测试会自动工作并自动清理。

注意:您可能应该考虑将黑盒测试和白盒测试彼此分开。这使您的 Django 测试保持“普通”状态,因此未来的开发人员不必浪费太多时间来弄清楚为什么 Django 文档似乎并不适用于所有情况。它还将功能测试与单元测试分离,这在团队中的开发人员无法在其计算机上访问 Selenium(或 Selenium 的兼容版本)的情况下,或者当您只想运行单元测试时非常有用或功能测试,但不能同时进行。您需要手动设置测试环境来满足您的需求,但我相信从长远来看这将使测试代码保持干净。

感谢劳拉在这方面为我指明了正确的方向。

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

Django 使用 selenium 进行测试,未加载固定装置 的相关文章

随机推荐

  • 如何在 Eclipse 中运行 Play 项目

    你好 我一直在尝试寻找如何在 Eclipse 中运行 Java Play 项目 但我找不到简单的方法 这是我所做的 创建一个项目 play new testApp 转到文件夹 cd testApp 使项目黯然失色 play eclipsif
  • 如何使用 xmlhttprequest 从 javascript 将字符串发送到 servlet [重复]

    这个问题在这里已经有答案了 客户端代码 function myReq try var myJSONObject main url http facebook1474159850 altervista org var toServer myJ
  • Mvc3 - 处理(几乎)所有请求所需的数据的最佳实践?

    我正在 mvc3 中创建一个应用程序 想知道如何处理所有应用程序请求所需的数据库数据 其中一些取决于会话 其中一些取决于 url 模式 基本上所有数据都在数据库中 喜欢了解最佳实践 我在应用程序中所做的并认为最佳实践是将通用数据加载到控制器
  • 如何获取 Mercurial 存储库中每个文件的最新版本号列表?

    我为我的 Web 应用程序创建了一个构建系统 该系统重写所有资源 url 以包含文件的修订号 以改进客户端缓存 截至今天 我正在为每个文件运行此命令以获取修订号 hg log template rev n path to file 对每个文
  • 基于 NSFetchedResultsController 的表视图在第二次插入实体时总是失败

    我正在使用 NSFetchedResultsController 来管理在具有一个部分的表视图中显示获取的托管对象 该表一开始是空的 用户可以使用 UI 向其中添加新实体 就目前情况而言 程序在添加第一个实体时始终有效 而在添加第二个实体时
  • C# 中的心电图数字信号处理

    我正在寻找用于数字滤波 低通 高通 陷波 的 C NET 库 以实时过滤心电图波形 有什么建议么 如果这是非商业用途 我听说过关于信号实验室库 http www mitov com html signallab html 非商业用途免费 商
  • MDX - TopCount 加“其他”或“其余”

    我创建了一个 MDX 查询 用于计算前 10 个邮政编码 根据我的患者住院测量 如下所示 WITH MEMBER Discharge Date Y M D Aggregation AS AGGREGATE EXISTING Current
  • 如何在 Github Actions 中查看已取消步骤的日志?

    我的工作流程中有一个步骤是运行命令 python 脚本 这个 python 脚本似乎挂在执行过程中的某个地方 GitHub 显示该步骤在运行时被卡住并且没有任何反应 为了调试这个 我想查看 python 脚本的日志输出 我怎样才能做到这一点
  • PHP 中的测试驱动开发

    我是一名使用 PHP 工作的 Web 开发人员 我在 C 桌面应用程序中使用测试驱动开发的经验有限 在这种情况下 我们使用 nUnit 作为单元测试框架 我想在新项目中开始使用 TDD 但我真的不知道从哪里开始 对于基于 PHP 的单元测试
  • 通知在 flutter 上显示两次

    我被困住了 我的后台通知显示两次 但前台只有一个通知 这是我的代码 Future
  • 谷歌数据存储中的节点分页

    我在使用 Google Datastore 进行分页时遇到问题 我有一个查询 没有限制 有几百个结果 我想检索 5 个 将它们发送回用户 如果用户想要更多 他们会检索下 5 个 根据文档 我创建了查询 var query datastore
  • div 相对于窗口的位置?

    尝试找到 div 相对于窗口的位置 我有一个水平 div 我想获取相对于窗口的左侧值 因此 如果我将第二个 div 滚动到窗口左侧 它将显示 0 不确定如果没有父 div 这是否可行 这是我的小提琴 http jsfiddle net FS
  • 如何在 Symfony2 配置中添加带有值的数组?

    我想在配置文件 config yml 中添加一个简单的值列表 例如 my bundle columns col1 col2 将节点添加到配置解析器时 它只是失败 rootNode treeBuilder gt root my bundle
  • NHibernate 测试,模拟 ISession

    我正在使用 NHibernate 和 Rhinomocks 但在测试我想要的东西时遇到了困难 我想在不访问数据库的情况下测试以下存储库方法 其中 session 作为 ISession 注入存储库 public class Reposito
  • SQL语句只删除一行重复项

    所以我正在使用 Ruby 工作 并假设我的两列表中有 6 行完全相同 就我而言 我的表 campaign items 有两列 campaign name 和 item 我想使用单个查询仅删除 6 个重复项中的一行 我是这样开始的 db ex
  • Flex 页脚在 Chrome 中不会停留在底部

    仅当内容短于视口时 我才使用 Flexbox 让页脚保持在底部 如果它较高 页脚应保持在内容下方 以便您必须滚动才能看到它 这在 Firefox 和 Edge 中可以正常工作 但在 Chrome 或 IE 中则不行 在 Chrome 中 正
  • WCF - 自定义凭据和安全令牌

    我对 WCF 开发相当陌生 在学习该框架时遇到了一些问题 我有一个必须支持 REST 和 SOAP 的服务 API 到目前为止 这很容易实现 尤其是使用 WCF4 和路由 我目前正在研究授权 并通过创建两个新的管理器类来扩展 Authori
  • 如何在Apache中设置mod_lua来访问第三方Lua模块?

    我正在尝试为 Apache 设置 mod lua 模块 但在访问第三方 Lua 模块时遇到了困难 假设我在 Apache 的 htdocs 文件夹中有一个 hello world lua 其中包含以下内容 require apache2 f
  • 尽管已传输,但仍出现错误“无法传输文件 *.jar,状态代码为 409”

    我正在尝试将项目发布到azure artefacts 项目pom是这样的
  • Django 使用 selenium 进行测试,未加载固定装置

    我正在使用 Selenium 为 Django 网站设置功能测试 我有一个固定文件 users fixtures users json 并在另一个应用程序的功能测试中使用它 accounts 运行测试时 我还运行我的开发服务器来接受来自 S