OSC2010 抢先看 – Bernhard Wiedemann:自动化测试

2010年9月22日 | Henne Vogelsang | 无许可

> > >
[![](/wp-content/uploads/2010/09/sneakpeek-logo2.png)](//news.opensuse.net.cn/category/sneak-peeks/) >openSUSE 大会将于10月20日至23日在德国纽伦堡举行,汇集了 openSUSE 项目的用户、贡献者和朋友。为期四天,超过七十场演讲和研讨会探讨了自由和开源软件社区、管理和开发中“**跨越边界的协作**”这一主题。大会是 openSUSE 项目每年一次的聚会,旨在为项目成员提供面对面交流、相互启发的机会。大会将在 [纽伦堡职业培训中心](//www.bfw-nuernberg.de/) 举行,周围环境优美,位于 [法兰肯大都会](//www.nuernberg.de/internet/portal_e/index.html)。欢迎所有感兴趣的人士加入并享受从每天上午9点开始的 [节目](//conference.opensuse.org/indico/event/osc2010),入场免费。>[![](//counter.opensuse.org/conf/2010/small.png)](//conference.opensuse.org/indico/event/osc2010) >
openSUSE 大会 2010 抢先预览将向您介绍一些演讲者和演讲。这次我们将与 Bernhard Wiedemann 一起探索我们测试团队内部的自动化。

Bernhard!你今天启动了多少个 ISO 镜像?:-)

嗨 Henne!今天没有,因为 factory 提供新镜像的速度很慢。但我昨天运行了三个 ISO 镜像,发现了一个新的段错误。

**哎呀,我还以为你会说出一个有趣的数字呢!**

但从我开始统计的四月份以来,总的运行次数已经相当令人印象深刻了! ` wc -l video/runlog.txt 1525 video/runlog.txt `

所以这就是你所做的事情,也是你演讲的内容,对吗?你提出了一种巧妙的方法来测试我们的发行版。但在我们探讨之前,你能不能先简单地介绍一下你自己?

我就是我。一个极客,一个程序员,一个父亲,一个丈夫……有时甚至是诗人兼哲学家。思考是很难的事情之一,这可能是为什么很少有人做到的原因。

你来自哪里,又是如何加入 openSUSE 测试团队的?

Ich bin ein Berliner” 引用 一句名言。我偶然加入了测试团队,就像生活中许多美好的事情一样。我在 论坛上看到了 Holgi(测试团队的创始人)寻找成员的消息。

你能向我们解释一下测试到底意味着什么吗?

当我们启动 测试核心团队(“核心”旨在让人们知道其他人也可以并且应该进行测试)时,我对测试到底是什么一无所知。一部分是系统性测试。例如,Larry Finger 尝试了无线局域网的所有加密模式,以及静态和动态地址分配的组合……但还有另一种测试,就是简单地“使用”beta 版本并报告问题,因为有些问题只有在你真正尝试使用软件时才能发现。

我想大多数人都忘记了方法论的部分,而这恰恰是你的专长,对吗?

我是在实践中积累经验的。正如经常发生的那样,巨大的动力来自于巨大的情感。最初我只是对里程碑版本进行手动安装测试,但发现其中许多无法正常工作,导致其他测试人员等待下一个里程碑。这让我非常恼火。所以当我有一些空闲时间时,我尝试使用 内核虚拟机 (KVM) 来自动化一些事情。

**自动化意味着什么?**

这意味着,我遵循程序员的原则。懒惰是第一美德(我不需要做任何事情就能让计算机为我测试)。不耐烦是第二美德(当我起床时,结果已经在我的收件箱里了)。现在代码已经发展,我有一个 cron 作业,可以自动下载新的 ISO 镜像并进行测试。所以下载发生后,我的 perl 脚本会启动一个虚拟机(使用 KVM),该虚拟机具有一个 *monitor* 接口,可以接受诸如“sendkey ctrl-alt-delete”和“screendump foobar.ppm”之类的命令。该脚本每秒捕获两个屏幕截图,最后将所有图像编码成一个漂亮的 ogg/theora 视频,可以在 firefox 中方便地查看。困难的部分在于,要在正确的时间发送正确的按键。这涉及到检查屏幕截图中的已知图像,或者等待 VM 进程使用的 CPU 减少到 18% 以下(这意味着被测试的操作系统完成了处理)。其中一些仍然是一种有效运作的技巧。

自动屏幕截图,我需要查看它们才能进行测试吗?比如,找到默认壁纸是红帽而不是漂亮的 Gecko?

有些结果可以自动检查。例如,如果它看到仍然是相同的 Gecko,它将通过“OK”测试,如果另一个测试仍然产生已知的段错误图像,它将被检测为“失败”,但仍然有许多情况会产生“未知”结果,这意味着人类必须决定结果是否符合预期。即使我也不知道艺术团队是否想出了新的壁纸创意。所以电脑怎么知道呢。

所以你将自动生成的屏幕截图与已知的良好/不良屏幕截图进行比较。你的脚本是如何做到的?

目前,我的脚本使用图像矩形区域的像素数据的 MD5 哈希值,并在表中查找。如果 MD5 值不在表中,结果是“未知”。这种方法的缺点是像素中的单个随机位(在某些情况下会发生)会导致问题,所以我正在考虑更改为将整个图像作为参考存储并与之进行比较。当前方法具有速度非常快的优点,虽然。28 毫秒计算所有 MD5 :)

哦,这太棒了,是你自己想到的吗?

我读到 perl 的 OCR::PerfectCR 模块也使用哈希值来查找字符。不幸的是,我不记得我是在编写代码之前还是之后看到过它 - 毕竟,伟大的头脑有相似的想法。顺便说一下:我还会对一些安装部分进行可选的 OCR,以便我可以在日志文件中看到它完成了多少,而无需传输图像。

所以对于安装测试来说,这是独一无二的,很好 Bernhard。我们都知道 OSC2010 的口号是“跨越边界的协作”。这是否可以用你的框架实现?它是否与发行版无关?

其中一些必须是 openSUSE 特定的(例如,YaST 测试代码),但我小心地将它们分成单独的文件,以便该框架可以用于测试任何在 qemu/kvm 中运行的操作系统。所以你甚至可以测试 BSD、Illumos 或 Redmond 操作系统 :) qemu 施加了一个限制,虽然。鼠标点击由于某种原因无法正常工作(可能是一个错误)。但现在几乎所有事情都可以用键盘完成,尤其是在 Linux 被设计为为残疾人服务的背景下。

所以它甚至与操作系统无关,跨越了边界!你有没有计划进一步开发它,朝这个方向发展?也许添加其他虚拟化技术,或者针对 debian/fedora 等发行版进行黑客攻击?

Debian 使用不同的开发模式,通常有六个月的冻结期,并且它们会跟踪每个软件包中的错误,因此它们似乎不需要这个。不过,我听说 Mark Shuttleworth 在 2010 年的 LinuxTag 上谈到了自动化测试的重要性,所以如果我找到时间,我可以尝试自动安装 Fedora 或 Ubuntu。只是为了确保操作系统相关和操作系统无关之间的划分是好的。我仍然想添加一个 CGI 前端,让人们(比如 Coolo 和我的其他测试人员)可以看到 Factory 的当前状态。就像“6/8 个 ISO 可安装,3/15 个应用程序测试失败”。

很好,我看到你在探索很多方向。这是你领导的第一个开源项目吗?

2002 年,我启动了 //translucency.sf.net 来帮助我构建一个不错的 SuSE 7.3 和 8.2 的 liveCD。从 2005 年开始,我编写了一个过滤的 Web 代理,在 GPL 下发布源代码,以增强一个基于浏览器的 MMORPG,其唯一的开发者似乎失去了兴趣 (astrowars.com)。这激励了许多其他人也这样做,并给我带来了无数的编码乐趣。

你的参与可以追溯到很久以前,我不知道。你认为为我们的项目做出贡献的好处是什么?有什么不好的地方?

可能有很多看似微小的因素会打击贡献者。去年冬天,我曾经非常沮丧,几乎要放弃测试,因为一位维护者反复关闭了一个关于一个完全可重现的错误的报告。事实证明,该错误在升级时使用 zypper dup 时不会发生,正如他所做的那样,但它发生在全新安装时。但看到我的工作受到重视,并使一切变得更好,这当然很好。除此之外,很难看到缺少的东西,以便使某件事变得更好。这让我想起我曾经拼过一个 1000 片的拼图,却没有图片……

是的,在开源项目上工作完全感觉是这样。但考虑到这么多人,我想是这样 :-) 谈到人,你对大会上有什么特别的演讲或研讨会感兴趣吗?

我期待着与有趣的人交流和交流想法!至于演讲,我还没有仔细看过日程安排,所以现在还说不准。我肯定会参加很多。

我确定会有很多东西与你的方向相关。你会在那里举行测试团队会议吗? 可能会有一些其他的测试人员,这会很好。但目前还没有计划。我们还有一个月的时间来安排事情。

听起来你应该开始行动了 :) 我期待在十月份见到你,Bernhard,感谢你的时间! 与你交谈很愉快。

十月见!

不要错过 Bernhard 的演讲

自动化测试如何帮助改进发行版

发行技术 轨道在

openSUSE 大会

周六上午 10:30 在 Sigena 房间。

类别: 活动

标签

分享此帖子