AI人工智能与软件测试

每个项目都能用上吧:使用Playwright进行图片比较测试

Playwright 做为新一代的浏览器 ui 自动化测试工具,有很多有意思的功能,其中截图对比就是其中一个。

本质上讲 playwright 的图片对比测试其实就是基准测试,其流程大致如下:

  • 先运行一遍测试用例,把代码里定义的需要截图的地方都截图,这些截图就是以后测试的基准了,后面所有的比较都是针对于这次截图进行的
  • 第一遍运行测试用例时候用例会报错,因为之前没有任何截图,不过没关系,再运行一次就可以了
  • 任何时候都可以再次运行用例,此时会拿本次运行时的截图跟第一次保存的截图做像素级的比较,一旦像素有差异用例就会失败,否则用例通过

下面简单介绍一下如何从零开始使用 playwright 进行截图对比测试。

安装 playwright

安装 playwright 之前,大家需要安装 nodejs,这一步可以自行搜索。

这里推荐大家使用Typescript进行代码的编写。主要是因为在入门阶段我们基本上不会接触到复杂的 typescript 语法结构,难度其实跟写 javascript 差不多,心智上的压力其实不算大。最重要的一点是,使用 typescript+vscode+playwright 这套微软组合(三者都是微软出品的),可以在编辑器里非常容易的得到稳定的代码提示,毕竟 ts 可以算得上是静态语言,对于初学者来说代码提示有时候是非常重要的。

因为国内的网络问题,整个安装过程需要用到淘宝 npm 源

打开命令行,敲入下面的命令。不知道怎么使用命令行的同学可以自行搜索弄清楚命令行是怎么回事。

npm install -D @playwright/test  --registry=https://registry.npmmirror.com
npm install -D typescript  --registry=https://registry.npmmirror.com
npx playwright install

mkdir -p tests
touch tests/itest.info.spec.ts

第 1 行是安装 playwright 及测试套件;第 2 行是安装 typescript,第 3 行是安装 playwright 需要调用的浏览器。最后两行则创建了 tests 文件夹并创建了名为itest.info.spec.ts的文件。

第一个用例

itest.info.spec.ts中输入下面的内容。

import { test, expect } from "@playwright/test";

test("Itest.info homepage", async ({ page }) => {
  await page.goto("http://www.itest.info");
  await expect(page).toHaveScreenshot();
});

上面代码的意思是跳转到重定向学院的首页www.itest.info,然后截图,如果截图跟之前保存的像素级别一致,那么用例通过,否则用例失败。

我克隆了自己的声音:人人都能训练模型的时代到了

之前就看到有人推荐GPT-SoVITS项目,据说只要提供很少的声音素材就可以克隆一个人的声音,不仅训练时间短,而且中文的效果非常好,最近正好有点时间,稍微弄了一下,大家可以听一下效果。

只能说是神似,毕竟准备的训练数据比较一般,加上是 mac 上做的训练,据说本身效果就会差点,buff 叠满了,效果一般般也正常,下次准备在一台有显卡的机器上再试一次。

通过克隆自己声音来体验训练模型的过程

不过尽管结果不太尽如人意,我还是推荐大家有时间也去训练个模型,把自己的声音克隆一下。因为这样可以简简单单的了解一下模型训练的过程,比如 GPT-SoVITS 从训练模型到推理 tts 的过程大致可以分为

  • 数据集处理:准备足够的训练数据,首先需要提取人声,然后去除混响,获得比较纯净的高质量人声;接下来还要切分音频并给音频降噪,然后再是给音频打标并校对标注,这一步实际上就是把人声对应的文本给记录下来,因为用了声音转文字的引擎,所以工作量其实还好;
  • 训练过程:这一步先输出 logs,我也不知道有啥用;然后开始微调训练,可以自定义训练的轮数和其他一些参数,终于感受到什么叫做训练时的调参了;
  • 推理过程:这一步需要先给出一个 5 秒左右的参考音频,然后把你要合成的文本输入进去,推理一段时间之后就可以生成音频了;

自己体验训练的过程还是非常有意思的,毕竟隔行如隔山,如果大家想往 ai 行业发展的话,有训练模型的经历应该是对求职有帮助的。

可以克隆其他人的声音

一些公共人物或者虚拟人物的声音其实想对来说比自己的声音更好克隆,因为他们的声音素材相对较多,而且声音质量比自己录制的要高不少。我们可以克隆一些声音来自娱自乐,比如有时间的话我可以克隆一下虫师的声音,然后跟我的声音剪辑在一起来做一个播客。大家也可以天马行空,关公战秦琼式的混搭,不过要注意一些法律上的风险。

人人都能训练自己的模型

这个项目最大的意义我觉得是它大大拉低了个人训练模型的门槛,原则上只要提供十几秒的声音就可以进行训练和克隆,而且训练过程非常迅速(至少在我的 macbook pro 上如此),让小白可以非常低成本的训练模型,因为之前的各种模型要么是对数据要求非常苛刻(海量数据),要么是对训练的机器要求很高(比如 A100 显卡),普通人很难触及到训练这一层面。不过有理由相信,随着科学炼丹的发展,后面将会有越来越多的项目提供更多模态的低门槛模型训练能力吧。

AI码农来了,AI会让程序员和测试人员都失业吗

前几天初创公司 Cognition AI ,2 个月前才刚成立一夜之间在 X 卷起了风暴,就因为他们一条浏览量上千万的推文:

今天,我们很高兴地向大家介绍,第一位 AI 软件工程师 Devin。

我们来看看这位 AI 程序员能做什么吧。

  • 自主查阅 api 文档,学习新技术,自主写代码
  • 面对一个需要不时维护的包含不同算法的开源存储库,Devin 拔剑四顾,帮忙查找和修复错误,也就是会改 bug
  • 去自由职业者网站上接私活,并顺利完成任务

看上去这位程序员可以完成普通开发者的工作任务,是不是有这样一种可能:让 AI 诞生的职业,会因为 AI 而失业,典型的教会徒弟,饿死师傅?

目前已经有人在惊呼:ai 已经可以替代程序员了,结合之前英伟达 ceo 黄仁勋的学代码无用论的观点,看来业界颠覆程序员的野心真是昭然若揭。

不过事实真的是这样吗?至少在目前这个阶段,我觉得我们大可不必过分担心ai 取代程序员和测试人员的事情,理由有如下几点

一切都只是 demo

目前 Cognition AI 只是放出了 demo 而已,距离真正的生产环境级别的应用,目前应该还是有一定的距离的。还记得之前 google 放出的多模态人工智能模型演示吗,全程充满了科幻感和不真实感,让人觉得未来已来。然后后续的事实是 google 承认演示 demo 有剪辑的成分,声誉一落千丈。

另外 Cognition AI 正处在融资的关键阶段,这时候放出 demo,我只能说是懂的都懂。

在经历了之前超导的全民沸腾和迅速反转之后,没有实锤的结论我们可以先观望一段时间再说。

ai 还不能从事特别复杂的工作

Devin 应该是可以替代程序员和测试人员完成一些创造力有限的重复性工作,对于需要深度思考的工作,ai 的表现只是一般,比如 Devin 在改 github issue 方面可以达到惊人的 13.86%,在一众 ai 竞品中瑶瑶领先,然而还有 86.14%左右的 bug 是 Devin 所不能解决的,换句话说,Devin 目前解决不了大部分的有深度的问题。

我希望在职业生涯开始时就知道的关于软件测试和成长的事情

翻译了一篇文章,原文是https://automationhacks.io/2024-02-25-what-i-wish-i-knew-about-software-testing-and-growth,感觉还是很有道理的。

大家好

我一直在反思一些与社区中一些同行和新兴测试人员和工程师进行的有关测试发展的对话。虽然要解开这些话题需要许多博客文章和演讲,但我想列出一个无序的技能、方法、习惯和成长想法随机清单,这些都是我希望在测试职业生涯开始时就知道的,以求成熟。

我现在如何看待测试?🤔

测试是一个深层次和多方面的学科,有很多东西要学习,并且有令人难以置信的力量为客户带来愉悦的成果。如果做得好,它可以使整个公司快速行动并自信地交付产品。测试的最终目标是有助于构建令人满意的优质产品和服务。

技能 🤹

  • 学习盲打
  • 学习思维导图
  • 学习如何评估风险并系统地增加不同层次的测试覆盖范围
  • 学习测试的基础知识,然后不要停止,继续前进。
  • 在会议和讨论中发言(不要害羞)
  • 提出那些"愚蠢"的问题,始终保持好奇心
  • 学习多种语言,包括静态和动态编程语言,以及更多语言
  • 学习编码和阅读大量代码
  • 学习设计高效的 CI/CD 流水线
  • 测试金字塔也表明你可以学习不同层次的测试
  • 不要只关注 UI 或后端。把系统视为一个整体。
  • 专注于客户及其 UI/UX 接触点。这些绝不能中断
  • 学习工具或框架的基本 API,然后不断深入
  • 学习如何在 LeetCode 上解决问题,并了解数据结构和系统设计
  • 学会如何进行向上管理
  • 学习如何建立自己的人际网络

方法和态度 🙂

  • 从任何地方开始
  • 做一个喜欢探索的人
  • 谦逊踏实。认识到总有成长的空间
  • 与新朋友交朋友,帮助他们成长,你也一起成长。
  • 在团队中鼓励心理安全感。
  • 寻找一位导师,让他们教授你一系列主题。然后再找另一位。不断成长。
  • 不要将自己局限于一个领域(Web、移动、后端、数据、性能、安全、CI) - 混合各种事物!
  • 质量是每个人的责任,但需要有人为之效力
  • 如果在某个环境中你没有在学习,要么改变自己,要么改变环境。
  • 利用互联网和广阔开放的测试社区的力量。你会学习得更好更快
  • 当你遇到问题时不要放弃;要舒服地说"我还不知道这个……"
  • 学习某些东西,教给其他人,然后专注于其他更好的事物。
  • 不要成为一个孤立的单点故障
  • 阅读文档是你最好的朋友
  • 你不需要等待一门课程或班级来教授你什么。尽可能自学
  • 清晰的写作即清晰的思维
  • 不要只关注头衔,而是要发展技能。你不等于你的头衔
  • 始终为团队做出正面贡献,专注于成果
  • 不要将自己局限于测试员的单一角色,而要成为一名通才软件工程师

习惯 ⌨️

  • 建立笔记系统。它会使你更快成长。
  • 安排一致和有目的的学习时间
  • 定期总结和叙述你的工作
  • 养成阅读书籍和总结的习惯
  • 在做日常杂务时听播客。让你的杂务变得有趣!
  • 阅读博客和时事通讯,向同行学习
  • 在会议上提议演讲,作为学习的一种方式
  • 采用开源,成为社区的一部分,尽自己所能贡献。

成长 🌱

  • 以上所有以及……
  • 尽可能在公开场合构建、学习和分享
  • 制定个人路线图和 OKR,并评估自己的进展
  • 维护个人技术品牌
  • 探索在不同的工作环境中工作,如服务、产品、初创公司、成长型公司和大型科技公司,以获得广阔的视野

我遗漏了什么吗?请在评论中告诉我

推荐1个很有用的测试wiki

https://ray.run/wiki

这个网站应该是我见过最全面的关于测试领域的知识整理了。稍微写代码数了一下,应该有 200 多个主要知识点,每个下面都有很多的常见问题。知识点的解释其实没啥突出的,不过常见问题对于面试来说就非常的顺手了。

稍微列举 1 个有意思的主题。

Definition of Acceptance Test Driven Development

什么是 ATDD?

说实话,这个概念我也是第一次见到。

What are the key steps involved in ATDD?

ATDD 的关键步骤有哪些?

The key steps involved in ATDD are:

  • Collaboration among developers, testers, and business stakeholders to define acceptance criteria.
  • Creation of acceptance tests before the development starts, based on the agreed-upon criteria.
  • Development of the feature or user story, guided by the acceptance tests.
  • Continuous Integration to ensure that code changes are automatically tested against the acceptance tests.
  • Refinement of the acceptance tests as necessary, to address changes in requirements or understanding.
  • Test Execution to validate that the software meets the agreed-upon acceptance criteria.
  • Review and Feedback from stakeholders to confirm that the acceptance tests cover the desired functionality and behavior.
  • Iteration through these steps as needed until the feature meets the acceptance criteria.

Acceptance tests are typically automated to facilitate frequent execution and regression testing. The tests are written in a language that is understandable by all parties involved, often using Behavior Driven Development (BDD) frameworks like Cucumber or SpecFlow. This ensures that the tests serve as both specification and validation.

使用openAI来分析自动化测试报告的错误信息

今天看到有人用 ai 去分析自动化测试报告里的错误,代码和概念都很简单,也很有意思,忍不住翻译了一下,供大家参考。

原文地址https://labs.pineview.io/using-openai-platform-to-analyse-automated-test-failures

引言

当涉及到人工智能,尤其是 OpenAI 平台时,关于它将如何影响一切的内容并不缺乏。因此乍一看,本文可能似乎是另一篇过于热情和乐观的标题党文章,告诉你应该加入人工智能的行列,否则就会被落下。

顺便说一下,本文并非由人工智能撰写。我只是使用我最喜欢的文本编辑器应用程序,它以西方文学中最令人激动的小说之一的名字命名——尤利西斯。除了一些基本的自动完成功能外,没有来自外部的干扰(或推理)。本文没有人工智能生成的废话,尽管我不能保证文章完全没有废话。

但无论你对人工智能生成内容持何种立场,作为软件专业人士,我认为我们都可以达成共识:在自动化软件测试方面,调试和调查测试失败总是很繁琐。因此,我认为这可能是一个可以引入一些人工智能辅助的好领域,因为我们只是在扩展机器已经完成的工作。在这里,不存在冒充人类或“让人们误以为他们正在与真人互动”的风险,这正如哲学家丹尼尔·丹尼特在他最近在《大西洋月刊》上发表的文章中所提到的一个真正的文明风险。

什么是端到端测试?

如果你对端到端测试还不熟悉,它是一种通过模拟真实用户的操作来测试整个应用程序的自动化软件测试类型。

Nightwatch.js 是一个开源库,用于编写和执行网站和 Web 应用程序的自动化端到端测试。它于 2014 年发布,2021 年被转移到 BrowserStack 的开源计划办公室,目前正在进行开发。Nightwatch.js 是用 Node.js 编写的,它支持所有主要的 Web 浏览器,并且还可以在移动设备上运行测试。

本教程将介绍如何开发一个 Nightwatch.js 插件,将测试失败和相关错误发送到与 OpenAI 平台集成的服务,以分析错误并获得一些可操作的反馈。默认情况下,Nightwatch 的最新版本已经对测试失败提供了相当好的反馈,并提供了一定程度的可操作反馈,因此我们将尝试使用 GPT-4 模型扩展其功能,以在输出消息中增加一些亮点,提供稍微更好的上下文,并学习如何开发结合人工智能辅助的服务。

为什么选择 Nightwatch?

诚然,目前市场上还有一些其他备受炒作和流行的测试工具,但实际上 Nightwatch 是我们在 2014 年在 Pineview 创建的项目,现在正在 BrowserStack 的开源计划办公室进行开发。我也是那个团队的一员,Nightwatch 仍然是我在所有其他项目中用于测试的最喜欢的工具,当然。

此外,Nightwatch 作为一个库已经存在了相当长的时间,在这些年里享有不同程度的受欢迎程度。有大量的可用于机器学习模型训练的数据,因此 GPT-4 在编写 Nightwatch 测试和解释结果方面具有相当好的能力,这意味着我们已经有了一个强大的基础,可以构建一个辅助人工智能来解释我们的测试失败,并可能与我们对抗。

步骤 1 - 创建错误分析服务

我们的小练习主要由两个部分组成,都相对简单:

构建调用 OpenAI 服务的后端服务 编写 Nightwatch.js 插件,接收实际的测试失败并将其发送到后端服务进行分析 我们将从第 1 部分开始 - 构建错误分析服务。在当今时代,构建与人工智能相关的任何东西可能听起来非常奢侈和光鲜,但实际上这只是一个非常基本的任务,并没有太多特别之处。