【发布时间】:2021-10-21 09:29:13
【问题描述】:
我有一些日志需要分析,以检查日志是否没有异常并且可以说是不正确的形式。
我已经为它生成了一个 CSV 文件:
"timestamp","source","message
"2021-10-18T09:12:29.000Z","Storage","Storage apache: [18/Oct/2021:09:12:29 +0800] 10.102.141.82 - GET /deviceManager/rest/
"2021-10-18T09:12:29.000Z","Storage","Storage apache: [18/Oct/2021:09:12:29 +0800] 10.102.141.82 - GET /deviceManager/rest/
"2021-10-18T09:12:29.000Z","Storage","Storage apache: [18/Oct/2021:09:12:29 +0800] 10.102.141.82 - GET /deviceManager/rest/
"2021-10-18T09:12:29.000Z","Storage","Storage apache: [18/Oct/2021:09:12:29 +0800] 10.102.141.82 - GET /deviceManager/rest/
我使用 CSV gem 来解析/读取这个文件并使用 RSpec 测试来期望一些值/文本/时间格式等。我已经编写了下面的代码。例如,它需要从 8 到 12 的行,我希望在这些行中有一个名为“Huawei”f.e 的文本。
RSpec.describe "Log parsing" do
it 'returns the source' do
table = CSV.read("Messages_result.csv")
puts arr = table.values_at(8..12)
arr.each do |rows|
expect(rows).to include('Huawei')
end
end
end
我遇到的问题是它总是执行第一行的期望,但我想解析/迭代整个 CSV 文件,并且还应该为每一行显示一个结果。我的期望信息当然会改变,但我只想先检查一下像华为这样的基本文本。有人可以说明我做错了什么,因为理论上每一个都应该通过完整的行并为每行抛出一个期望?
【问题讨论】:
-
您的 CSV 文件被截断,请添加缺少的行尾
-
arr是否有可能为空?在expect(arr).not_to be_empty之前打勾 -
你只选择CSV文件的第8到12行(考虑到标题是第0行)有什么原因吗?此外,您将整个 CSV 文件加载到内存中,而您只是逐行检查它。
-
@Anthony 不是空的,我期待 ["2021-10-18T09:11:24.000Z", "Storage", "Storage apache: [18/Oct/2021:09:11: 24 +0800] 10.102.141.82 -.../license/feature HTTP/1.1 python-requests/2.21.0 - - application/json - / gzip, deflate 200 49 0"] 以包括"华为”,所以它肯定给了我第一个元素的错误
-
@Fravadona 只是为了在我浏览整个 csv 文件(大约 500 行)之前测试我的代码中的某些元素