问题标签 [end-to-end]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
10428 浏览

database - 您使用哪些最佳实践来测试数据库查询?

我目前正在测试我们的解决方案,该解决方案具有整个“范围”层:UI、Middle 和无所不在的数据库。

在我加入我现在的团队之前,查询测试是由测试人员手动制作的查询完成的,理论上这些查询会返回一个结果集,存储过程应该根据各种相关性规则、排序、你有什么来返回。

这会产生副作用,即针对测试人员的查询提交的错误比针对有问题的实际查询更频繁。

我建议实际使用已知结果集,您可以推断它应该如何返回,因为您控制存在的数据 - 以前,数据是从生产中提取、清理,然后填充到我们的测试数据库中。

人们仍然坚持创建自己的查询来测试开发人员创建的内容。我怀疑很多人仍然是。我认为这根本不理想,只会不必要地增加我们的测试足迹。

所以,我很好奇,您使用哪些实践来测试这样的场景,以及在不引入混乱数据的情况下,什么是您可以获得的最佳端到端覆盖的理想选择?

我遇到的问题是在哪里进行测试的最佳地点。我是否只是直接戳服务,并将该数据集与我可以从存储过程中提取的数据集进行比较?我有一个粗略的想法,并且到目前为止已经足够成功,但我觉得我们在这里仍然缺少一些重要的东西,所以我正在寻找社区,看看他们是否有任何有价值的见解可能有助于制定我的测试方法更好的。

0 投票
3 回答
1334 浏览

integration-testing - 如何管理端到端测试的测试夹具?

刚刚为一个新的 Web 应用程序设置了一个测试框架,我意识到我错过了一个大问题:“我如何使测试彼此独立?”

几年前,我设置了一些复杂的 Ant 脚本来执行删除所有数据库表、再次创建模式、添加测试数据、启动应用程序、运行一个测试然后停止应用程序的完整周期。由于运行整个套件需要时间,因此维护起来很痛苦,并且限制了我们进行夜间测试。它仍然值得,但我想知道是否有更简单的方法。

这种方法有替代方案吗?主要标准是每个测试都不应受到套件中任何其他测试的影响,无论它是失败还是成功。

0 投票
3 回答
1156 浏览

python - 用于测试输入文件及其输出的 Python 测试“框架”

我正在为我的工具编写端到端测试,该工具是用 Python 编写的。该工具读取文件作为输入。我想测试它的退出代码和它的输出。

这是一个相当普遍的习语,我已经看到它以多种方式完成。在 PHP 项目中,每个测试都是一个文件,其中包含:、、、等行INPUT:EXPECTED:EXPECTED_REGEX:我自己的phc项目中,每个文件都是一个普通的源文件,但在顶部添加了注释,其中包含诸如EXPECTED. 我想我已经从gcc复制了它,它使用了一个用 tcl 编写的更复杂的工具。

是否有在 Python 中执行此操作的框架、库等?它应该:

  • 读取源文件
  • 解析对应于预期输出的特殊关键字(或类似关键字)、退出代码、预期找到或未找到的单词/正则表达式,
  • 检查输出是否正确。

虽然这在理论上似乎并不难,但我记得在之前实现这个时有很多边缘情况(尤其是涉及转义),并且宁愿不重新发明轮子。

0 投票
1 回答
1875 浏览

google-app-engine - Secure XMPP on Google app engine

Does anyone know if its possible to have end-to-end encryption on xmpp messages from the google app engine, like you can with google talk?

0 投票
1 回答
233 浏览

security - 在使用 SSL 的端到端请求中使用 IP 地址与主机名

因此,请注意,这与浏览器-服务器通信无关。在服务器到服务器的通信中,使用其他服务器的 IP 地址而不是使用其主机名来发出请求会降低 MITM 攻击的可能性吗?

0 投票
2 回答
410 浏览

asp.net-mvc - BDD 和 ASP.NET MVC - 寻找高速公路

大约半年前,我开始深入研究单元测试。我进入了 TDD(或我认为的),现在我想开发一个 MVC 应用程序行为驱动。验收测试(真正的端到端)的概念对我来说是新的,因为我的上一个项目没有在验收测试环境中运行。

我从阅读一些好文章开始,尤其是 Sanderson 的http://blog.stevensanderson.com/2010/03/03/behavior-driven-development-bdd-with-specflow-and-aspnet-mvc/并且正在备份我的通过阅读他关于该主题的书来掌握 MVC 技能。

我正在使用 SpecFlow 和 SimpleBrowser 进行端到端测试。通过导航栏驾驶导航是小菜一碟,但我现在被困住了。我的目标是实现用户帐户以进一步创建文章和评论。推动注册过程让我很头疼。鉴于此功能文件:

我真的不知道如何提供必要的测试环境(本例中的邮件服务器)并使测试不那么脆弱(考虑将“创建”按钮重新标记为“提交”)。更不用说在捕获生成器中编织以防止以后自动创建用户(哦,具有讽刺意味)。也许我只是想太多了,实际上你不应该在 TDD 中,但有时我只是盯着屏幕思考我的下一个测试。


Soo ..在那堵文字墙之后,实际问题是:我应该如何实施这种行为?

  • 坚持 UI 级别测试并根据需要进行重构以实现捕获逻辑
  • 回退到控制器级别测试
  • 你以任何其他方式启发我
0 投票
1 回答
749 浏览

unit-testing - 端对端测试太多?

我对整个情况感到非常沮丧,原因如下:

我继承了一个完全未经测试的遗留系统,用于保持许多不同的客户端数据库和一个主数据库(具有不同的模式)同步。该系统在交给我时只是部分完成,有许多缺陷使其无法正常工作约 90% 的时间。

该系统还允许六种不同类型的同步,每种同步不同的(有时是重叠的)表,因为数据库可能相当大,因此客户端可以根据它们的状态优先考虑最重要的表。

我从一些端到端测试开始,使用某些数据在本地设置一个主数据库和几个客户端数据库,然后调用不同的同步方法并验证正确的数据以正确的格式显示在正确的数据库中。

我时间紧迫,由于这个系统至少有一百种不同的方式可以将数据从一个数据库移动到另一个数据库,而且只有几千行代码,我只是不断地进行越来越多的端到端测试,当我接手项目时,基本上每个缺陷存在 1-2 个。我完成了 16 个单元测试(TDD 来自我添加的代码)和 113 个端到端测试,其中许多直接基于先前的缺陷。

我完成了系统,它已经生产了几个月,没有发生任何事故。

最近,我们决定将客户端数据库转换为新数据库,当我使用新数据库运行我的测试(一直在 CI 服务器中每晚运行)时,113 个中的大约 100 个失败。(当然,单元测试都通过了)。

我一直在修复失败的端到端测试,坦率地说,大多数失败是因为一两个简单的原因(比如新的数据库舍入日期不同),但我对我的测试如此脆弱这一事实感到沮丧。虽然他们正确地失败了,但我只需要一两个来告诉我,而不是 100。问题是,没有那么多代码可以进行单元测试,因为大部分只是根据日期从一个表中选择数据,然后从另一个数据库中选择相同的数据,合并两者,然后适当地插入/更新。

如果没有这些测试,我不可能完成这个系统,但维护它们的痛苦基本上是导致我提出这个问题的原因:有什么建议我应该如何进行/或我可以做得更好吗?我第一次编写这些端到端测试是否浪费了太多时间?我读过有效地使用遗留代码工作,但我觉得对于我所感受到的那种痛苦并没有一个很好的答案,除了:“只是重构并编写更多的单元测试”,我觉得这并不是很重要该系统的独特性是很少的代码和大量的数据库转换。

0 投票
2 回答
2030 浏览

tdd - 端到端测试整个系统的最佳实践

端到端测试意味着从外部边界运行应用程序以验证其行为。到目前为止,我只对单个可执行工件进行了书面测试。我应该如何测试由部署在不同主机上的多个工件组成的系统?

我看到了两种选择。

  • 测试设置了整个系统,并从最外边缘进行了锻炼。
  • 每个工件都经过独立的端到端测试,依靠测试内容来执行它们之间的协议。

是否有明确的理由只遵守其中之一,或者是首选其中之一,还是可以互换?如果可以互换,那么它们之间有哪些优缺点?

0 投票
1 回答
85 浏览

c# - 无法将 namespaceA.objectA 转换为 namespaceA.objectA

我的应用程序的 EndToEnd 测试包括手动加载已发布的文件。

在测试期间,我总是加载以下内容: - n 个调试程序集的 NUnit shadowcopy - n 个发布程序集的 Postbuildeventcopy

即使我确定这两个副本来自同一个构建生成(版本),我的反射加载也失败了。

在这里给出一点上下文是一些伪代码:

我有一个帮助类,它使用 Loadfrom 在程序集中获取静态。在我调用任何东西之前,我必须注入一个模拟。

这个模拟是使用调试版本中工具库的影子副本创建的,因为 nunit 创建了它。

加载的库是发布版本,这对我很重要,因为我想尽可能接近真实环境进行测试。

当我尝试使用反射注入时,我必须使用FieldInfo SetValue(...)调用看起来像这样:

有时反射有效,有时我的类型不能相互转换。

该错误是由 生成的 ArgumentException FieldInfo SetValue(...)

当我接受异常并调查field.FieldType != typeof(T)只有 GetHashCode() 调用之间的区别时,会给出不同的值。

我认为这涉及到一点随机性。

我可以强制 Typecast 吗?这甚至是明智的吗?

在构建我缺少的项目时,我需要做些什么吗?

0 投票
1 回答
1016 浏览

c# - 使用反射创建在构建时未知的接口的模拟

为了结束测试,重要的是我的测试程序集不会预加载依赖程序集的影子副本。

程序集 T 是加载和测试程序集 A 的测试框架。程序集 A 依赖于 B 中定义的接口。

出于测试目的,我必须替换 A 中的一些静态成员,而在构建时它们不可用。

这是一些伪代码,说明了我所处的困境:

  1. 我可以通过访问该类型,semiknown.FieldType但这对我有什么好处?我可以以某种方式使用该信息来创建模拟并用它替换静态成员吗​​?
  2. 假设我得到了类型并且能够替换静态成员 - 我如何在模拟中建立我的期望?