专注测试技术的课程订阅站点

postman替代工具:2024版

又又又看到有人发帖抱怨说 postman 太慢了,想找一款可以替代 postman 的工具。这个需求基本上每隔几个月都会被提出来一次。

这里顺手总结一下原帖中提到的解决方案,再加上自己的亲身体验,给大家推荐一些 postman 的替代工具。

反正我坚持认为,postman 只要不登录,速度快点,那么它还是用起来最顺手的 http 请求工具了。

RapidAPI

mac 用户强推了,当年的版本叫 paw,我是花了不少钱买的。现在完全免费了,妥妥的背刺。

https://paw.cloud/

Bruno

开源的轻量 API 测试工具,类似 Postman。

下载地址: https://www.usebruno.com/

主打一个开源以及个人用户不要钱。

Thunder Client

这个是 vscode 的扩展,很轻量,而且免费,用起来不如 postman 顺手。

Rest Client

同样也是 vscode 的扩展,用着还行。

Hoppscotch

今天才之前 Hoppscotch 的前身是之前我们关注过的 postwoman。

工具地址:https://hoppscotch.io/

建议直接用 chrome 的扩展,跟当年的 postman 一样。

Insomnia

另一个类似 Postman 的 API 工具。

我记得当年是完全开源免费的,现在要收钱了,不过免费的版本完全够用了。

https://insomnia.rest/

Yaak

这个似乎就是 Insomnia 的原作者新写的工具,目前免费。

https://yaak.app/

Jmeter

属于啥都能干,但是体验没有 postman 好了,完全免费,怎么都香。

测试人员需要成为devops工程师吗

这确实是个非常值得讨论的话题。

测试人员究竟是不是需要成为 devops 工程师,我的答案是不需要,但又需要。

测试有时候在开发团队会不被开发同事所重视,甚至有时候会背上效率低下的骂名,我认为其中一个很重要的原因是:测试的工程化程度不高。

想想开发的一些核心行为

  • 写设计文档和方案:这个工程化程度不算太高,但是如果是写接口文档,那么很多工具都支持从代码生成文档,这个是可以工程化的;
  • 搭建本地开发环境和测试环境:可以工程化。
  • 写代码:本身代码就是工程化的一环。
  • 构建发布产物:可以工程化。
  • 发布:可以工程化。
  • 监控和告警:可以工程化。

再看测试的核心行为

  • 用例编写:很难工程化;
  • 用例执行:手工执行用例很难工程化;
  • 测试数据准备和清理:可以工程化;
  • 提出 bug 并进行跟踪:很难工程化;

我们再看看 devops 的概念,DevOps 将软件开发(Dev)和 IT 运维(Ops)的工作进行整合和自动化,旨在提升并缩短系统开发生命周期。

自动化是 DevOps 中的重要部分。软件程序员和架构师应使用“适应性函数”(fitness functions)来确保他们的软件保持在预期状态。

简单来说 devops 就是运维工程化,而工程化最好的体现就是运维的自动化。

测试需要工程化

测试同学其实可以不用成为专职的 devops 工程师,毕竟这是另一个研发角色,负责的内容和范围也不太一样。

但是测试同学确实是可以借鉴 devops 文化中的工程化思想,让测试变得更具工程化一些。

然而我们看到,核心的一些测试行为确实很难进行工程化,这样一来,我们就需要扩大我们的工作半径,将一切可以提升质量的行为都纳入到我们的工作职责中来,而这一系列的行为里,有一部分是可以进行工程化的。

最典型的可以进行工程化质量实践就是构建 ci/cd 流水线。

测试同学可以通过构建 ci/cd 流水线进行自动化的准出测试,如果对代码库的 precommit hook 进行工程化定制的话,还可以对准入进行控制。

流水线的输入是代码,输出也是代码,其中执行的各种任务也都是代码实现的,所以如果测试同学想要构建一条对质量有所裨益的流水线,那么下面的一些技能还是需要具备的。

  • 一定的代码能力
  • 一定的工具整合能力,ci/cd 的工具很多,有时候我们不需要开发,只需要接入和定制就好
  • 一定的质量规划能力,加什么准入和准出?如何保证各种检查不会拖慢流水线的执行?

小结

简单来说,会代码,有工程化思想,有构建高质量产出物的工具和思路,这类的测试同学应该还是会受欢迎的。

但不要忘了,测试同学的核心任务还是质量保障,ci/cd 只是质量保障的一种实践,而不是质量管理的全部。

其他人的观点

最近看到了一篇文章对测试人员要不要成为 devops 人员进行了讨论,这里顺便放上来,供大家参考。

原文地址: https://visible-quality.blogspot.com/2024/09/do-testers-need-to-be-devops-engineers.html

在我职业生涯的某个阶段,我逐渐专注于理解测试环境。这一切始于观察子系统之间的关联,以及识别哪些数据可以兼容。在保险行业,进行有效测试没有其他选择,尤其是当时一个新的 IBM 大型机测试环境的搭建就耗费了 100 万和一年的时间(我也经历过)。我已经不太记得那时用的货币是芬兰马克还是欧元了,只记得那种对项目的巨大责任感,因为我需要确保这个耗资百万的项目能够顺利进行。那段经历让我从此更加重视测试环境,不仅对工作站、服务器和版本有了更清晰的分类,处理这些事情也变成了日常工作的一部分。

关于生成式AI在测试行为中的思考

看到了一篇讨论测试和 AI 的文章,有些观点确实是非常正确的,顺手翻译了一下,供大家参考。

我自己读了两遍,发现翻译的版本措辞不够通顺,还是直接给个省流版本好了。

省流

  • AI 生成的代码开发可能不理解其中的原理,这就为代码变更埋下了隐患,毕竟代码等于是抄的,改抄过来的东西往往不容易
  • AI 每次生成的代码可能风格都不一样,这样用的越多,代码风格百花齐放的可能性就越大,这样在团队协同的时候会带来麻烦
  • AI 生成的代码不好维护,集成进现有代码的难度其实很大
  • AI 写用例很菜,一些异常情况可能考虑不到
  • AI 生成的测试用例是没有测试模型指导的,所以随机性很大,这就导致了用例对功能的覆盖率可能不会很高
  • AI 生成的代码可能引入过时的依赖库和解决方案,从而让团队背上了技术债
  • 泛化型的 AI 在代码和测试用例生成时可能不会给出最正确的决策,这很好理解,毕竟有些训练数据本身可能质量不高,这就造成了生成的内容质量低下
  • 招聘问题。是招会写代码的人还是招会用 ai 的人?

随着生成式 AI 及其对各行各业的影响成为热门话题,我想探讨一下它将如何影响软件测试,主要基于使用这类 AI 可能带来的风险。了解这些新工具的潜在风险,有助于我们获得相关信息,并思考将其融入团队时需要采取的测试策略。

代码质量不如亲自编写

生成式 AI 通过分析互联网上的内容来根据提示创建代码,这意味着你会继承其他开发者的编码风格和特点。这可能导致我们难以理解为我们生成的代码,从而增加维护和继承的难度。另一个风险是我们可能会想当然地认为 AI 按照我们的要求执行,而不去验证(因为代码难以理解)。

这不仅影响产品代码,也会影响测试代码的生成。为应对这个问题,我们可以对代码进行全面的静态分析和重构,以提高其可读性。

编码习惯和风格不一致

与上述情况类似,AI 会采用各种程序员的风格和习惯。这意味着每次要求生成代码时,可能会得到不同的实现方式或编码风格。这同样会影响代码的可维护性和可继承性,缺乏一致性也使问题更难被发现。代码所有权也可能成为问题,因为难以确定是团队中谁的代码。在代码集成方面,不同的编码风格可能难以协调,函数行为可能相互矛盾。

解决方案仍然是进行更多的静态分析和代码重构,以及对函数行为进行基于代码的测试,以确保代码的可理解性和正确性。

更高的维护成本

生成的代码可能难以与现有代码很好地融合,因此我们可能不得不替换而非添加代码。这可能导致现有的代码测试失效,增加代码行为偏离预期的风险。替换现有代码还意味着必须重新测试现有功能,特别是如果我们失去了贴近代码的测试,这将增加测试所需的时间。

对代码(或生成的测试)缺乏理解意味着每次修改代码库时都需要花更多时间进行静态分析。一种应对方法是为测试建立独立的代码库,这样对代码的修改就不会影响测试。测试人员还必须人工审查生成的测试,确保它们与当前的代码库相符。

生成的代码质量如同实习生水平

生成式 AI 创建的软件代码或自动化测试可能只达到实习生的水平。它会完成你明确要求的内容,但可能忽视细节或异常情况。这存在测试覆盖不全的风险,也可能无法发现更深层次的问题。任何不确定性都可能导致 AI 做出与你意图不符的假设,从而影响功能表现。

应对这种情况的方法是确保继续进行探索性测试和人工测试。测试人员不仅要审查生成的测试,还要继续测试 AI 已涉及功能的准确性。我们还必须善于减少不确定性,并以不留任何假设空间的方式记录所有要求,以便输入到 AI 中(不要认为它会有常识并知道失败应该导致错误)。

缺乏测试模型

由于你可能使用简短的提示而非详细的测试用例,你可能对测试覆盖率缺乏心理预期。如果过度依赖低代码或无代码测试工具,我们可能对代码/软件的行为缺乏深入理解。这可能影响软件的可维护性,并可能导致遗漏或错误测试边缘情况和功能。

为应对这些风险,我们需要制定计划来探索代码和功能,以了解其工作原理。这种理解可以用于改进生成的自动化测试,并指导我们知道应该测试什么以及如何测试。

引入不良依赖项导致技术债务

生成式 AI 可能会引入过时的库,这可能导致代码不受支持或无法正常工作。尝试更新生成的代码可能会失败,或者如果 AI 引入了我们不知道会发生变化的库,就存在代码突然停止工作而我们不知原因的风险。AI 使用的库可能存在安全漏洞,如后门或恶意代码,我们必须诊断和修复这些问题。

我们必须确保团队分析所使用的库,并在生成的代码中记录这些库,以便检查其有效性。还需要对所有生成的代码进行静态分析,以测试是否存在漏洞和安全缺陷(包括对 AI 创建的功能进行渗透测试)。

AI 可能做出不直观的决策

所使用的 AI 可能会在创建代码、测试内容或测试方法上做出糟糕的决定。如果代码不直观,我们可能无法从代码中推断 AI 所做的假设。这带来了无法理解或维护代码和测试的风险,以及得到无用的测试或遗漏关键内容的风险。

跟线上事故相关的几个指标

最近业界比较流行面向指标的开发,据我所知在一些大厂,所有的开发过程指标和结果指标都要被明确定义出来并进行统计。

这里无意去罗列各种过程指标和结果指标,只想稍微分享一下跟线上事故相关的几个指标。

事故量度指标

事故量度指标帮助我们评估整个系统的表现。它们通过事故数量和时间频率,反映了系统的可靠性。然而,事故量度指标并不能让我们知晓我们对事故预案的准备程度。

✅ 告警转化率(Alert-to-Incident Ratio)

这个指标也被称为告警转换率,它对团队的健康状况至关重要。虽然我们强调快速响应每一个告警的重要性,但过多的告警可能会适得其反。当告警数量过多时,团队成员可能会产生"告警疲劳",这不仅会影响团队的整体效率,还可能削弱我们的可靠性策略。

长期处于高压状态下的团队成员容易感到精疲力竭,当真正严重的事故发生时,他们可能无法以最佳状态应对。这就是为什么我们需要密切关注告警转换率的原因。

如果我们发现大量告警最终并未演变成实际事故,那就意味着我们需要重新审视告警机制了。找到合适的平衡点并非易事,这需要我们不断调整和优化可观测性工具链。正因如此,持续监控和分析告警转换率变得尤为重要,它能帮助我们及时发现问题,并做出必要的调整。

👻 单位时间事故数(Incidents Over Time)

这个指标简单地统计了特定时期内的事故发生次数。虽然看似直观,但单独使用时往往缺乏深度洞察。有趣的是,这个数据常常引起 SRE 团队之外人员的关注,但我们要警惕它可能变成一个华而不实的指标。

需要注意的是,某个月份或季度的事故数量并不能直接反映系统的可靠性。这些数字的波动可能与业务的季节性特点有关,或者受到一些我们无法掌控的外部因素影响。

不过,跟踪事故数量的变化趋势确实有其价值。它能帮助我们评估当前的值班安排是否合理,以及是否需要增加人手支持。为了保护团队不被过度劳累,很多公司都会设定每个值班轮次最多处理 2 起事故的上限。这种做法既能确保及时响应,又能避免团队成员疲惫不堪。

✅ 平均故障间隔时间(MTBF)

Mean Time Between Failures

MTBF(平均故障间隔时间)是一个重要的可靠性指标,它计算的是系统或某个组件在两次故障之间的平均时间。想象一下工厂里的安全记分牌,上面记录着"已安全运行天数",MTBF 的概念与之类似。这个指标之所以能够很好地反映系统可靠性,是因为它直观地展示了系统出现故障的频率。

MTBF 的应用非常广泛。通过分析这个指标,我们可以:

  1. 对系统未来的可靠性进行预测
  2. 制定更加合理的预防性维护计划
  3. 比较不同组件的可靠性表现

特别值得注意的是,当我们发现某些组件的 MTBF 明显低于其他部分时,这就为我们提供了强有力的数据支持。利用这些数据,我们可以说服相关方投入资源,对这些问题频发的组件进行深入分析和改进。这种数据驱动的决策方法,能够帮助我们更加精准地提升系统的整体可靠性。

事故响应指标

事故响应指标是衡量我们处理事故能力的重要标尺。通过这些指标,我们可以清晰地看到团队在应对事故时的表现,同时也能发现我们的工具链中可能存在的不足之处。这些洞察为我们持续改进事故响应流程提供了方向。

👻 平均确认时间(MTTA)

Mean Time To Acknowledge

想知道你的团队对告警的反应有多快吗?平均确认时间(MTTA)就是答案。这个指标精确地测量了从系统发出告警到团队成员确认接收之间的时间。

虽然 MTTA 是个重要指标,但它更多地反映了你的值班系统的设置是否合理。如果你发现 MTTA 高于预期,那可能就需要重新审视你的值班轮换安排和升级策略了。

不过,使用 MTTA 时要小心,因为它容易被值班工程师"钻空子"。如果你为 MTTA 设定了具体目标,工程师们可能会为了达标而快速确认告警,但这并不能保证他们会有效地处理整个事故直到解决。换句话说,快速确认不等于高效解决。

因此,在使用 MTTA 时,我们需要全面考虑,将其与其他指标结合使用,以获得更全面的事故响应效率评估。

✅ 平均解决时间(MTTR)

Mean Time To Resolve

在所有事故响应指标中,MTTR 无疑是当之无愧的明星。它代表平均解决、恢复或修复时间。几乎所有推销 SRE 相关工具的人都会强调 MTTR 的重要性,因为从一线事故指挥到高层管理,每个人都关心一个核心问题:我们能多快解决问题?

充分发挥 Selenium 4 的潜力

selenium 4 的新功能,不是非常惊喜,不过确实比较实用了。

在瞬息万变的网络自动化领域,Selenium 一直是主要参与者。随着 Selenium 4 的发布,其功能得到进一步增强,引入了前沿特性,简化了测试流程并提高了效率。Chrome DevTools 和 BiDi API 的集成不仅增强了 selenium 的技术能力,还为管理自动化项目的经理们带来了战略价值。

Chrome DevTools 协议:深入浏览器自动化

Selenium 4 与 Chrome DevTools 协议 (CDP) 的集成为自动化测试人员开启了无限可能。通过直接与浏览器底层协议交互,CDP 实现了全面的网络和性能监控、控制台日志访问以及高级调试能力。

想象一下,你需要测试应用在不同网络条件下的表现。利用 CDP,你可以模拟各种网络速度,分析应用如何处理缓慢或不稳定的连接。这一功能确保你的网络应用具有韧性,能够为各种网络条件下的用户提供最佳性能。

CDP 还支持以下强大功能:

  1. 模拟网络条件: 模拟离线模式、慢速网络等情况,测试应用的适应能力
  2. 访问控制台日志: 直接捕获和分析控制台日志,便于调试和验证 JavaScript 错误
  3. 性能指标: 收集详细的性能指标,识别瓶颈并优化加载时间
  4. 安全测试: 监控和操作 cookie,追踪混合内容等安全问题,验证 HTTPS 配置

启用网络拦截的示例代码:

public class ChromeDevToolsExample {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        ChromeOptions options = new ChromeOptions();
        ChromeDriver driver = new ChromeDriver(options);

        DevTools devTools = driver.getDevTools();
        devTools.createSession();

        // 启用网络
        devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));

        // 添加网络请求监听器
        devTools.addListener(Network.requestWillBeSent(), request -> {
            System.out.println("请求 URL: " + request.getRequest().getUrl());
        });

        driver.get("https://www.example.com");

        driver.quit();
    }
}

在这个例子中,我们启用了网络拦截来捕获浏览器发出的所有网络请求。这对于验证是否发出了正确的网络请求以及调试资源加载问题特别有用。

7大开源 CI/CD 工具 2024版本

现在很多测试岗位需要测试同学有 CI/CD 流水线的搭建经验,这里给大家推荐一下常用的 7 大 CI/CD 工具,覆盖了代码管理,ci/cd 集成,静态代码扫描,容器安全扫描,测试用例管理,性能测试等方向,值得收藏。

SonarQube: 代码质量的守护者

SonarQube 是一款卓越的代码质量和静态分析工具。

它通过发现 bug、漏洞和代码质量隐患,帮助开发者维护高水平的代码标准。SonarQube 凭借其直观的界面和全面的报告,确保您的代码库保持整洁和易于维护。

我采访过的许多专家都表示,我会喜欢上 SonarQube,因为它能帮助改进代码并推广良好的编码习惯。

SonarQube 的优点:

  • 静态代码分析
  • 检测 bug 和漏洞
  • 追踪代码质量隐患
  • 生成全面的质量报告

目前在 GitHub 上拥有 8.8k 星标。

GitLab: 一体化 DevOps 平台

GitLab 不仅仅是版本控制工具。

我交流过的专家认为,它是一个完整的 DevOps 平台,包含 CI/CD 流水线,为众多团队提供一站式解决方案。此外,GitLab 的集成方式简化了工作流程,增强了开发和运维团队之间的协作。

GitLab 的优点:

  • 集成版本控制
  • 内置 CI/CD 流水线
  • 协作开发环境
  • 精简的 DevOps 工作流程

目前在 GitHub 上拥有 5.1k 星标。

Gitleaks: 保护密码信息

在 DevOps 中,安全至关重要,Gitleaks 可以扫描和检测代码中的硬编码密码。这个工具有助于防止 API 密钥和密码等敏感信息意外泄露,提高整体安全水平。