摘要: 国外有机构展望了2022年值得测试和开发同学关注的技术趋势,我在这里简单的给大家介绍一下,路漫漫其修远兮,大家一起求索吧。 混合组织成为常态 2022年很明显,有些人不会返回办公室,至少不会一直返回办公室。病毒大流行开始时最大的挑战之一就是远程工作的弱点和新机遇。 人们远程工作面临的最大困难是深陷工 阅读全文
posted @ 2022-01-24 11:23 乙醇 阅读(814) 评论(0) 推荐(1) 编辑
摘要: 当今接口测试越来越重要,一般情况下我们总是会对接口的返回的json字符串进行验证,看返回是否跟我们的预期相符。不过很多情况下我们会遇到下面的问题 响应结果在测试中不停的发生变动,比如昨天还是3个字段,今天可能返回值里只有2个字段了,测试这边没有比较好的方式感受到后端的变化 我们需要对json的返回值 阅读全文
posted @ 2022-01-24 11:18 乙醇 阅读(464) 评论(0) 推荐(0) 编辑

如何加速执行集成测试

今天我看到了一个有趣的UI集成测试加速方法,该方法与我想的底层优化、分布式运行或多线程运行方式不同。该作者重新编排了测试用例的执行顺序,删除了一些代码,并从执行流程上进行了优化。这确实很有趣。在本文中,我将简单介绍他的原文,希望对大家有所帮助。

我们将展示如何加速一个客户的构建过程,这样他们可以在相同的预算下多运行40%的构建。

我必须承认,我是单元测试的超级粉丝。我早期的一些博客文章就是关于单元测试的。

单元测试是快速的、可预测的、而且隔离的。它们被很好地隔离在一个沙盒中,这就是它们的可预测性和快速性。

我们推出了一个版本,用户无法进入登录页面,但这是另一个故事了。我把它命名为“一个没有集成测试和几十个单元测试的项目”。

并不是说我完全停止写单元测试,而是我很少使用它们。大部分是用于可以安全地进行隔离测试的功能,例如一个接受各种输入并返回各种输出的函数。用集成测试来测试可能的值矩阵是不值得的。

想象一下,有一个日历组件,用户可以输入一个日期,从一个下拉日历中选择数据,然后点击一个按钮来获得一个建议的日期。所有的日期都可以是不同的格式,这取决于用户如何输入它们。是否值得为每种可能的日期格式进行集成测试?也许不值得!

然而,我们把输入的日期发送到一个负责解释许多不同格式的输入日期的实用函数,但它总是返回一个Date对象。为这个实用函数写一个单元测试将是一个很好的主意!对于整个应用来说,就不是那么回事了。

假设你正在建立一个问题跟踪器。你有一个集成测试,打开一个对话框,试图保存一个里程碑而不指定名称。这将导致一个错误。你的另一个测试试图创建一个里程碑,但现在指定了一个名称。这不会导致错误,并显示消息“新的里程碑已保存”。

beforeEach(async () => {
  await createNewProject();
});

it('cannot create milestone without a name', () => {
  clickNewMilestoneButton();
  newMilestoneDialog.clickSave();
  newMilestoneDialog.should('have.text', 'Milestone name is required');
});

it('creates a milestone', () => {
  clickNewMilestoneButton();
  newMilestonDialog.getNameField().type('February Milestone');
  newMilestoneDialog.clickSave();
  newMilestoneDialog.should('have.text', 'New milestone saved');
});

乍一看,上面的测试没有问题。然而,从零开始创建一个新项目涉及设置名称,填写一些起始/结束日期,键入描述,从下拉列表中选择项目所有者,为项目提供相同的标签,填写其他几个字段。我们的测试运行器(我现在使用Cypress)必须单击所有这些字段,键入一些内容,等待一些建议出现,然后单击,再等待。

或者,将运行时间放在注释里,像这样想象:

beforeEach(async () => {
  // 运行10秒
  await createNewProject();
});

it('cannot create milestone without a name', () => {
  // 运行2秒
  clickNewMilestoneButton();
  newMilestoneDialog.clickSave();
  newMilestoneDialog.should('have.text', 'Milestone name is required');
});

it('creates a milestone', () => {
  // 运行3秒
  clickNewMilestoneButton();
  newMilestonDialog.getNameField().type('February Milestone');
  newMilestoneDialog.clickSave();
  newMilestoneDialog.should('have.text', 'New milestone saved');
});

整个测试套件运行25秒(2x10 + 2 +3),但我们感兴趣的事情只占了其中的5秒(2 + 3)。

那么我们能做得更好吗?因为这两个操作都发生在同一个newMilestonDialog中,我们可以认为在填写名称之前,应该首先尝试不带名称的保存。

我们的测试将如下所示:

it('creates a milestone', () => {
  // 运行10秒
  await createNewProject();

  // 运行2秒
  clickNewMilestoneButton();
  newMilestoneDialog.clickSave();
  newMilestoneDialog.should('have.text', 'Milestone name is required');

  // 运行3秒
  clickNewMilestoneButton();
  newMilestonDialog.getNameField().type('February Milestone');
  newMilestoneDialog.clickSave();
  newMilestoneDialog.should('have.text', 'New milestone saved');
});

现在,整个测试套件只需要15秒就能完成。这意味着速度提高了40%!

我还去掉了 beforeEach。当你在一个 describe 块内只有一个 it 时,它是不必要的心理负担。

我们仍然在测试相同的功能,但我们承认了这样一个事实,即我们最初创建的隔离水平并不值得花费 CI 时间。我们可以用 60% 的 CI 时间来测试错误信息和成功保存,其信心与以前一样。

在我们的真实场景中,像这样的变化在整个应用中严重影响了我们的构建性能。

我们可以让 CI 时间从 11-17 分钟变成 9 分钟以下的构建时间。

我们在有限的 CI 时间内运行这个项目,所以 40% 的速度提升意味着我们可以在相同的预算下为客户多运行 40% 的构建。

写在最后

原文地址在这里:https://akoskm.com/how-to-speed-up-your-integration-tests

这篇文章除了开头部分是我写的之外,其他部分来自

  • 直接使用notion AI把英文翻译成中文
  • 使用DeepL把英文翻译成中文,再使用Notion AI进行改写
  • 翻译有些不着边际的地方,我会进行一点点修改

我发现AI翻译的效果以及改写的通顺度比我自己翻译的要好的多。

果然,未来已来。

posted @ 2023-04-04 16:45 乙醇 阅读(88) 评论(0) 推荐(0) 编辑
摘要: 如何实现线程安全的内存缓存 这两天正好看到一个用go实现的线程安全的内存缓存,实现代码非常简洁高效,不卖弄不烧脑,非常值得初学者拿来学习。 项目地址 项目地址在https://github.com/muesli/cache2go,目前已经有1.8k的star。 如何使用 package main i 阅读全文
posted @ 2023-04-04 16:45 乙醇 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 如何用指标去度量bug本身的质量情况 作为测试同学我们会经常苦恼如何使用一些指标来度量版本或产品的质量情况,近些年来比较主流的声音可能变成了如何使用指标来度量研发效率,以及如何在不影响线上质量的前提下提高研发效率,降低交付周期,不过今天我却听到了不同的声音,无意中浏览到一篇文章,讲的是如何去度量测试 阅读全文
posted @ 2023-04-04 16:45 乙醇 阅读(117) 评论(1) 推荐(0) 编辑
摘要: 如何编写测试计划 测试计划在国内其实不是很流行。之前在外企工作的时候,每一次的测试工作基本上都是以编写测试计划开始的。好的测试计划可以让团队成员对测试整体进行和测试策略以及方法有一个大体的认识,在一定程度上可以节约沟通成本。最近正好在github上看到一份测试计划文档,我们就一起来学习一下其中的精华 阅读全文
posted @ 2023-04-04 16:45 乙醇 阅读(150) 评论(1) 推荐(0) 编辑
摘要: 开发人员应该进行思路转变以提升软件质量 Mindset Shifts For Engineers to Achieve Higher Software Quality 看到个开发小哥写的关于测试的文章,挺有意思的,翻译了一下,观点虽不新颖,但能从开发角度去思考软件质量,格局上面是值得称赞的。原文地址 阅读全文
posted @ 2023-04-04 16:45 乙醇 阅读(52) 评论(0) 推荐(0) 编辑
摘要: 强行为新项目写接口测试是一种什么样的体验 继续上次的话题,为新项目写ui自动化测试是一件非常有挑战的事情,写接口测试会不会容易一点呢?这次我就尝试了一下。 现阶段我们的管理端接口其实不多,就8个左右,所以从工作量上评估其实还可以。 测试策略 讲策略之前我们先看一下项目的简单业务属性。该项目的管理后台 阅读全文
posted @ 2023-04-04 16:45 乙醇 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 情感驱动测试 看到一篇非常有意思的女性测试从业者的技术分享,忍不住翻译了一下,角度非常感性,引人深思,测试的世界其实特别多元,也希望以后有机会能遇到各种有意思的观点。 原文地址: https://fishouthebox.medium.com/the-power-of-emotion-driven- 阅读全文
posted @ 2023-04-04 16:45 乙醇 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 接口测试进阶:在接口测试中框架中使用json schema 当今接口测试越来越重要,一般情况下我们总是会对接口的返回的json字符串进行验证,看返回是否跟我们的预期相符。不过很多情况下我们会遇到下面的问题 响应结果在测试中不停的发生变动,比如昨天还是3个字段,今天可能返回值里只有2个字段了,测试这边 阅读全文
posted @ 2023-04-04 16:45 乙醇 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 没有QA就没有Bug 关于测试左移shift left的讨论已经持续了很长一段时间了,前几天刚好看到有外国友人亲身参与了这个过程,结果有点出人意料,所以翻译出来分享了一下。 在2017年,成为一名QA是一个有趣的时间。但不是搞笑哈哈,是有点点诡异了。每个人都想着测试左移(在合理范围内),但不是为了提 阅读全文
posted @ 2023-04-04 16:45 乙醇 阅读(70) 评论(0) 推荐(0) 编辑
摘要: 测试低下论或现代测试行业所遇到的问题 前几天看到一篇blog讨论现代测试行业中存在的一些问题,我愿称之为测试行业的劝学篇。有些观点还是非常中肯的,翻译了一下,希望对大家有所帮助,下面是正文。 在这篇博文中,我想强调我在测试行业看到的问题,以及我们都可以如何解决它。(你可能有不同的经历--所以让我们在 阅读全文
posted @ 2023-04-04 16:45 乙醇 阅读(80) 评论(0) 推荐(0) 编辑

友情链接 虫师的blog  测试教程网  重定向科技  省略

点击右上角即可分享
微信分享提示