您当前的位置:首页 > 吉日 > 结婚吉日

测验(测验孕棒最佳时间)

时间:2024-01-24 21:34:20 作者:凉话刺骨 来源:用户分享

本文目录一览:

为 dbt 模型实施单元测试的简单(但有效)方法

单元测试 dbt 模型一直是 dbt 生态系统中最关键的缺失部分之一。本文提出了一种新的单元测试方法,该方法依赖于标准和 dbt 最佳实践

自从 dbt 将软件工程最佳实践引入数据工程领域以来,其功能和周围的生态系统一直在不断扩展,以涵盖数据转换空间的更多领域。

然而,“数据工程与软件工程最佳实践”难题的一个重要组成部分仍然难以捉摸且尚未解决:单元测试。

证明单元测试的重要性,为什么它们对于任何代码行在被称为“生产就绪”之前都至关重要,以及为什么它们与 dbt 测试或数据质量测试不同,这些问题已经得到了很好的解决,并且解释道。但如果我们想在一分钟的电梯演讲中总结它们的重要性,那就是:

在数据工程中,我们通常要测试两个不同的元素:数据和代码 - dbt 测试(和其他数据质量系统/工具)允许我们测试数据,而单元测试允许我们测试代码。

考虑到上述情况,社区自然而然地采取了多项举措来通过开源单元测试功能来增强 dbt(例如 Equal Experts 的dbt 单元测试包或 GoDataDriven 的专注于 dbt 的 Pytest 插件)。然而,这些软件包的功能仍然有限,并且学习曲线陡峭。

本文介绍了一种更简单但更优雅的不同方法,它依靠标准和 dbt 最佳实践来实现可扩展且可靠的单元测试流程。

单元测试模型与 CTE

在深入研究该方法之前,我们首先定义要运行单元测试的级别。这里要回答的问题与我们对 dbt 项目中“可测试单元”的定义有关。

我们的可测试单元是什么?

如果我们坚持软件工程最佳实践,可测试单元将是一小段具有清晰输入和输出的代码,并且不依赖于外部因素。根据 dbt 项目及其复杂性,此定义可以适用于 dbt 模型及其组成的公共表表达式 (CTE)。

如果我们有一个 dbt 项目,主要包含简短且相当简单的模型(每个模型少于 100 行代码),那么在模型级别定义单元测试可能是合适的。然而,如果我们的 dbt 项目包含又长又复杂的模型,那么在 CTE 级别定义单元测试将是更有效的方法。

这是一个视角问题

dbt Labs(dbt Core 背后的公司)更倾向于第一种方法。因此,毫不奇怪,他们的单元测试提案侧重于模型级测试,并将 CTE 级测试视为反目标。对于小型或新建 DBT 项目,这可能是一个非常合理的设计决策。然而,如果您有一个成熟或大型的 dbt 项目,那么仅仅为了避免复杂的模型而添加不必要的临时模型层可能不是一个好主意。

对于大多数 dbt 项目,在 dbt 模型中对同一实体执行多个操作(转换、聚合等)是完全可以接受的:我们可以首先转换给定列,然后使用它聚合数据,或者我们可以创建一个新标志然后依靠它来应用一些业务逻辑或过滤数据。这些操作可以发生在同一模型内的不同 CTE 中,使 CTE 成为自然的可测试单元。

本文介绍的方法将重点关注单元测试 CTE,而不是整个模型,尽管可以调整相同的原则以在模型级别执行单元测试。

秘密武器:缩小宇宙

为 dbt 模型实现单元测试系统时的主要复杂性源于“dbt 模型”可以是很多很多东西这一事实。从1000行的海量select语句到一长串的CTE和子查询,如果我们想构建一个可以在任何dbt项目中使用的通用单元测试系统,所有这些场景都需要考虑。

然而,我们可以通过限制问题的范围来完全避免这种复杂性。我们不需要构建一个适用于任何 dbt 项目的单元测试系统,而只需为我们的dbt 项目构建一个。正如唐·德雷珀 (Don Draper) 告诉你的那样,我们总是可以“改变对话”:

我们不是为 dbt 模型(我们无法控制的宇宙)构建单元测试系统,而是为我们的 dbt 模型(我们可以控制的小得多的宇宙)构建一个系统。

改变我们的目标宇宙极大地简化了问题,因为我们知道我们的 dbt 模型及其怪癖。更重要的是,我们可以为其结构和内容定义标准和指南。

上述原则也可以应用于我们想要构建与 dbt 相关的定制和功能的其他领域。当我们谈论“dbt 模型”时,设定标准并限制我们的期望可以简化问题,并为简单的解决方案打开大门。

探索熟悉的宇宙:标准化 dbt 模型的结构

现在我们已经将工作范围限制在 dbt 模型中,我们可以通过定义强制模型结构来澄清我们的输入,我们可以通过 CI 操作等自动化来强制执行该模型结构。如果您已经维护的 dbt 项目没有推荐的模型结构,那么您始终可以在更新现有模型时开始逐步实施它。

理想的结构取决于您的用例,但dbt Labs 推荐的导入-中间-最终方法在大多数情况下是一个安全的选择。它将 dbt 模型基本上分为三种类型的 CTE:

导入 CTE:它们构成模型的第一部分,仅包含从其他模型读取数据。我们可以执行列重命名和过滤,但我们不应该在这个阶段转换数据。理想情况下,他们的名字以import_前缀开头。中级 CTE:这是大部分工作发生的地方。我们可以使用这些 CTE 来转换、连接和聚合数据,应用业务逻辑以及所有其他操作来生成模型所需的输出 - 使这些成为我们想要进行单元测试的 CTE。理想情况下,他们的名字以intermediate_前缀开头。最终 CTE:在此 CTE 中,我们加入不同的导入和中间 CTE 来定义模型的输出 - 无需应用任何额外的转换。该 CTE 应命名为final.

然后,作为模型的最后一部分,select * from final语句将生成其输出。

现在我们有了一个可以设计的模型结构,定义单元测试系统变得更加容易。

然而,值得注意的是,理想情况下,我们应该在开始使用 dbt 之前定义模型结构 - 以及 dbt 使用的其他基础。这是我和 Zendesk 团队决定实施基于 dbt 的数据转换框架时关注的关键领域之一,我们在Zendesk 工程博客上发布的这篇文章中详细介绍了我们在标准方面的工作。

基于标准:简单的单元测试系统

根据我们上面讨论的结构,为了确保 dbt 模型的有效单元测试代码覆盖率,我们可以依靠测试中间 CTE 和最终 CTE - 因为导入 CTE 不包含我们想要测试的任何代码。

现在我们可以定义单元测试系统的不同组件以及它们如何根据上述标准进行交互。

模拟输入:导入 CTE 的输出

我们系统的第一个组件是模拟输入(基本上,我们想要用来测试不同执行场景的示例数据)。就结构而言,这应该与导入 CTE 的输出类似 - 因此,如果我们从名为 的模型中读取两列customers,则模拟输入应该包含相同的结构。

这些输入应该定义为dbt 种子(因此我们提供包含模拟数据的 CSV 文件),最好在单独的testsdbt 项目中(以避免单元测试种子弄乱我们的主项目)。

期望:中间 CTE 的期望输出

现在我们已经定义了输入,我们可以使用相同的过程(dbt 种子)来定义所需的输出。这些输出对应于执行每个中间 CTE 后数据的预期状态。

对于每个中间 CTE,我们可以有与我们想要测试的场景相对应的多个输出,以最大限度地提高代码覆盖率并确保我们测试边缘情况。(可以在同一个 CSV 中使用一test_id列来分隔不同的测试,也可以提供多个 CSV。)

运行测试:奢侈的选择

系统的最后一个架构组件是为我们执行断言的过程(将 CTE 的实际输出与预期输出进行比较)。

从技术上讲,我们只想比较数据仓库中的两个表:

根据我们的预期 dbt 种子生成的表(我们在 CSV 文件中提供的预期输出)通过运行我们正在测试的 CTE 生成的表(使用模拟数据作为其输入)

然后可以使用现有的软件包(如dbt 审核助手)或数据质量系统(如Soda Core ) (使用SodaCL 的内置比较检查)来实现比较。

连接点

最后,现在所有组件都已定义,我们只需要通过执行以下操作的模块(我们可以用 Python 或任何其他语言编写)将各个点连接起来:

编译我们想要测试的 dbt 模型(用实际值替换变量和宏)。解析编译的模型并检索中间 CTE 列表(理想情况下我们依赖前缀,intermediate_但这可以通过多种方式实现)和最终 CTE(使用其名称)。对于每个 CTE,将导入 CTE 和其他中间 CTE 的引用替换为对相应模拟数据的引用(因此我们不引用 CTE,而是引用 dbt 种子)。同样,我们可以依靠前缀( 和import_)intermediate_来查找需要替换的 CTE 名称。对于每个 CTE,将其新主体(替换引用后)编写为我们的测试 dbt 项目中的 dbt 模型。在我们的测试项目中运行dbt seed命令(以重新创建模拟数据表和预期输出表),最好使用仅刷新与我们当前正在测试的模型相关的表的标签。使用我们选择的工具(dbt 包或 Soda 等工具)执行断言,并打印输出或基于它执行操作。

通过上述过程,我们可以在一次执行期间测试每个中间 CTE(以及最终 CTE),而不会让一个 CTE 的实际输出干扰下一个 CTE。这意味着对于给定的 CTE,dbt 在运行时只会使用模拟输入(因为它引用我们提供的 dbt 种子)——输入是 import CTE 的输出以及我们引用的其他中间 CTE 的预期输出。

结论

在本文中,我们提出了一种用于 dbt 模型(在 CTE 级别)的可扩展且灵活的单元测试方法,该方法需要相对少量的工程工作并专注于执行标准。尽管该方法不能解决每个 dbt 项目的单元测试,但我相信许多团队可以在他们的项目中利用它(或其变体)来添加一个重要的安全层:测试代码。

该方法可以根据 dbt 项目的具体情况进行调整和增强,并且可能并不适合所有场景(例如,如果大部分代码驻留在宏中),但标准化仍然是一个强大的盟友,可以简化通往目标的道路。加强不同领域的 DBT。

第三软件测评中心 软件性能测试的用途

第三方软件测评报告

一、性能测试是重要的软件测试类型之一,有助于确定应用程序在工作负载下的性能,比如响应能力、可扩展性、可靠性、速度和稳定性等。性能测试对发现错误毫无帮助,但可以消除性能瓶颈,并改善整个应用程序的性能。

二、第三软件测评中心

不是每一家第三软件测评中心都能够做性能测试,也不是每一家第三软件测评中心都能够出具性能测试报告,能够出具第三方软件性能测试报告的检测机构(如,柯信优创)一般都是获得行业检测认证的,所以在找第三方做软件测试报告时要选择像这类具备CMA或者CNAS的独立第三方机构。

三、第三方软件性能测试中常见的质量性能指标包括下列8项:

1、功能性

2、易用性

3、可靠性

4、可移植性

5、维护性

6、兼容性

7、信息安全性

8、性能效率

四、软件性能测试的用途:

1、评价系统当前性能,判断系统是否满足预期的性能需求。

2、寻找软件系统可能存在的性能问题,定位性能瓶颈并解决问题。

3、判定软件系统的性能表现,预见系统负载压力承受力,在应用部署之前,评估系统性能。

五、第三方性能测试的优势:

找靠谱的第三方软件测试机构(柯信优创)出具测试报告,除了能有效的避免压力测试的困难点,还能公正、科学的对软件性能和压力进行测试,并出具软件检测报告,这样的报告能得到企业、事业单位、组织机构的认可。

文章来源于:第三软件测评中心-软件性能测试的用途 - 成都柯信优创信息技术服务有限公司

​软件测评报告请联系王经理18684048962,更多资讯请关注公众号:软件测评闲聊站

标签:第三方性能测试、性能测试报告

验孕棒使用注意事项

一般来说,在同房后的7—10天即可自行进行检测,可以通过早孕试纸或验孕棒检测晨尿来验孕,房事后时间越长越准确。总之在同房之后,最早的一个星期,最晚的大约3个星期,便能测出来是否怀孕。

验孕棒怎么使用?

1、验孕棒的使用对象多是有性生活,并且月经基本规律,当月经期延后十日左右的育龄女性。

2、测量结果最准确的标本是早晨起来第一次排出的尿液,假如真的怀孕了,那么这晨尿中的HCG含量最高,所以结果最可靠。

3、尿液应当用清洁、干燥的容器收集,以免对测量结果造成影响。

4、使用时,要先看清楚验孕棒上所标示的记号、箭头,以及包装上的使用说明,不要把错误的一端浸入尿液中,这样是没有办法得到结果的。此外还要注意时间,过期的验孕棒也是没有办法测试出结果的。小编推荐去正规的药店进行购买。

5、在验孕棒上会标注有最高浸泡线,不要超过这个范围,否则测量结果无效。

6、验孕棒浸足包装上说明的时间后取出,在结果有效时间内观察棒上出现的红道道。没有任何红道道就是测验结果无效,一道杠是没有怀孕,两道杠的话,就证明是怀孕了。

看完别忘记点赞和收藏啊,可以动动您的小手指来转发,让更多的准妈妈知道这方面的信息。感谢您的分享与理解!最后祝好孕!

热门推荐