# 简单讨论ELK在测试中的使用场景




### 什么是ELK

在高复杂度的系统中，对于定位线上问题，日志非常重要。ELK(ElasticSearch+Logstash+Kibana)，可以使用说是目前最流行的日志平台构建方案，之所以深受开发者喜爱，主要是因为它解决了大规模系统的日志收集的各种痛点。

ELK(ElasticSearch+Logstash+Kibana)，主要包含三个组件：

* ElasticSearch
* Logstash
* Kibana


#### ElasticSearch

ElasticSearch是一个开源的分布式的搜索引擎，它主要基于Apache Lucene。在整个ELK Stack中，ElasticSearch是最核心的组件，它存储数据，并且提供了许多灵活而实用的Rest API，所以，上层应用可以根据需要去查询数据，使用数据，分析数据。在日志平台中，所有的日志数据都存储到ElasticSearch中，借助其强大的搜索能力，可以很灵活的查询日志。

#### Logstash

Logstash主要用于收集数据，并将数据保存到ElasticSearch中。

Logstash有丰富插件，并且易于扩展，所以，可以使用Logstash收集到数据后，可以做很多处理，最终再将数据输出到ElasticSearch中。在日志平台中，它主要复杂采集应用的日志。

#### Kibana

Kibana主要负责读取ElasticSearch中的数据，并进行可视化展示。并且，它还自带Tool，可以方便调用ElasticSearch的Rest API。在日志平台中，我们通过Kibana查看日志。

### 使用ELK存储测试报告

测试报告是自动化测试中非常重要的一环，测试结果的清晰展示以及归档是大家需要日常处理的问题。

既有的经验里，我们可以通过定制一些测试模版输出一些特定格式的测试报告，比如html格式，然后保存到测试报告平台或者直接邮件发送。

上面的做法其实没什么不好，不过可能需要一些开发工作量。另外归档和搜索之类的功能需要一定的二次开发能力，对于测试同学来说有一定的挑战。

如果用例运行的非常频繁，那么高频次的出报告持久化以及多维度的搜索也是一件非常麻烦的事情。

我们可以用ELK来简单粗暴的解决上面的问题。将每次的测试结果落地到日志文件里，然后使用Logstash处理并持久化到ES，最终使用Kibana来搜索，全程工作量很小，而且复杂的搜索功能开箱即用，成本低廉稳定性好，大家有兴趣可以不妨尝试一下。

### 使用ES管理测试用例

如果测试用例比较多的话，我们可能需要从很多的维度去搜索测试用例。假设我们开发测试用例管理系统的话，实现这些进阶搜索其实是比较大的工作量。

我们可以将ES当作是存储引擎，把测试用例保存在ES里，ES有非常有好的RESTFUL API，使用这些API去检索数据，然后对结果进行一些可视化，就可以实现一个功能较为完备的用例管理系统了。

如果不想二次开发就得到一个穷人版功能复杂的用例管理系统的话，可以将用例持久化成日志，然后用ELK工具链处理，最后使用kibana来查看用例，这也未尝不可。


总之用ELK来做日志的处理和搜索是非常方便的，我们在测试过程中如果遇到有大量数据需要灵活搜索的场景都可以尝试一下ELK。




原始封面

![课程图片](https://images.unsplash.com/photo-1413752362258-7af2a667b590?w=300)


