软件测试为什么要看日志,为什么要进行日志测试和如何进行日志测试?

关键点

1.在分布式的、可扩展的系统(通常包含不稳定的基础设施)中排除故障的效率通常取决于是否有充分的日志记录和搜索设备。

2.唯一事件ID、事务追踪技术和结构化的日志输出等技术,让我们得以透彻地了解应用程序的行为,以及应用程序是否在正常运作。

3.日志记录不再会“拖慢”系统性能,相反地,它在系统故障恢复中有重要的速度增益,尤其是在使用了日志聚合的情况下。

4.我们需要测试核心操作需求,如日志记录。

5.我们可以采用类似功能性需求的方式来测试日志,比如用户故事和BDD场景等。

现代日志聚合和搜索工具为团队的建立、测试和运行软件系统提供了重要的新功能。通过把日志作为一个核心系统组件,并使用如唯一事件ID、事务追踪技术和结构化的日志输出等技术,我们可以获得对应用程序的行为和正常运作的丰富的见解,尤其是跨组件的视图。这篇文章解释了为什么测试日志是有价值的和如何用现代日志聚合工具做日志测试。这种方法使日志成为了一种渠道,使分布式系统更具可测试性。

日志在整体上会为各方面提速

按一直以来的观点,许多人认为,日志会“拖慢”软件。如果使用的是同步文件I / O、慢速磁盘存储、甚至更慢的网络速度,从这些方面来看这种观点有一定的道理。因此,我们往往对在现场环境中运行的软件中记录下来的日志,抱着审慎的态度。然而,异步文件I/O和SSD存储正在成为常态,1GB、10GB,甚至100Gb以太网也越来越普遍,日志的性能特性现在已经变得不同。

现在,除了时间关键型的应用程序,如金融交易和其他复杂算法的情况下,在软件系统中我们已经很少单纯地优化软件的运行速度了。特别是在分布式系统、云和物联网(IoT)的背景下,我们需要考虑的是在发生错误后,恢复服务的时间(通常被称为“平均恢复时间”,Mean Time to Recovery,MTTR)。同时,我们也要考虑在上游(测试)环境里,确定问题原因所需要的时间。

现代日志聚合和搜索工具——比如ElasticSearch、Logstash、Kibana、LogEntries、Loggly、Sematext等等——给我们提供了丰富的方法与我们的软件的进行交互,它提供了丰富的用户接口去判断应用程序的行为,也提供了可编程的REST API来在多台服务器之间搜索和关联事件。

535f4087eb460bcc3545e543d99a86fc.png

在跟踪一个包裹时,我们可以看到这些状态,比如“到达仓库”、“运输中”和“已送达”等等;这些都代表了特定的状态或事件,并且每一个都有一个系统内的内部标识符(ID)——事件ID。

800409f779ebc66b34e107e20d1f3cd9.png

如果我们想把一个关于发生在日志流中预期或意外事件的测试用例自动化,我们可以通过curl做一个简单的API调用来进行查询。

例如,我们可能想检查发生了一次数据库查询(预期发生事件DatabasePreQuery 和DatabasePostQuery)并且没有出现连接问题(突发事件DatabaseConnectionFailed)。

这里是为DatabasePreQuery事件(你也可以在GitHub找到它)查询Elasticsearch API (在本地运行)的curl命令:

$ curl -XGET ‘http://localhost:9200/_search=message:DatabasePreQuery&pretty’

这个查询的结果可能是,例如(为了清晰度重新格式化过,并添加了行数以供参考):

{

2    “took” : 19,

3    “timed_out” : false,

4    “_shards” : {

5      “total” : 20,

6      “successful” : 20,

7      “failed” : 0

8    },

9    “hits” : {

10     “total” : 1,

11     “max_score” : 11.516103,

12     “hits” : [ {

13       “_index” : “logstash-2016.05.06”,

14       “_type” : “logs”,

15       “_id” : “gHEKyHasRb6GaUhM1gywpg”,

16       “_score” : 11.516103,

17       “_source”:{“message”:

18                    “[2016-05-06 17:07:42] slim-skeleton.INFO: DatabasePreQuery [] []”,

19                    “@version”:”1″,

20                    “@timestamp”:”2016-05-06T16:07:42.749Z”,

21                    “host”:”vagrant-ubuntu-trusty-64″,

22                    “path”:”/var/www/wibble/logs/app.log”}

23    } ]

24  }

24

25 }

相关资源:fouro-application:iOSAndroid应用程序,用于发送虚拟拥抱并与朋友…

来源:复知

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月22日
下一篇 2021年6月22日

相关推荐