[英]How to compare two csv files using Robot Framework
我想使用机器人框架比较两个 csv 文件之间的差异。如果有差异,测试用例应该失败,如果没有差异,则通过。我在机器人框架中尝试了 DiffLibrary,但在记录未排序时返回通过状态。 有人可以指导我如何实现这一点,或者是否有其他方法可以做到这一点。
我的 first.csv 文件包含如下数据
Benchmark Name,Policy Name,No of Rules,Policy Measurement SLO,Policy Remediation SLO,No of Rules Compliant in MSLO,No of Rules Non-Compliant in RSLO,No of Rules Non-Compliant OUT RSLO
CIS Red Hat Enterprise Linux 6 Benchmark v1.0.0,PCI,281,1 MONTHS,1 MONTHS,150,130
CIS Red Hat Enterprise Linux 7 Benchmark v1.2.0,PCI,281,5 MONTHS,1 MONTHS,150,137
CIS Red Hat Enterprise Linux 7 Benchmark v1.5.0,PCI,281,1 MONTHS,1 MONTHS,150,135
而我的 second.csv 文件的数据如下
Benchmark Name,Policy Name,No of Rules,Policy Measurement SLO,Policy Remediation SLO,No of Rules Compliant in MSLO,No of Rules Non-Compliant in RSLO,No of Rules Non-Compliant OUT RSLO
CIS Red Hat Enterprise Linux 7 Benchmark v1.2.0,PCI,281,5 MONTHS,1 MONTHS,150,137
CIS Red Hat Enterprise Linux 6 Benchmark v1.0.0,PCI,281,1 MONTHS,1 MONTHS,150,130
CIS Red Hat Enterprise Linux 7 Benchmark v1.5.0,PCI,281,1 MONTHS,1 MONTHS,150,135
机器人代码如下
*** Settings ***
Library DiffLibrary
Library OperatingSystem
*** Test Cases ***
Diffing two files one being different
Run Keyword And Expect Error differences* Diff Files first.csv second.csv
只使用内置的应该等于字符串怎么样?
# Using Get File you easily get a file's content into a string variable
${csvA} = Get File ${filePathA}
${csvB} = Get File ${filePathB}
Should Be Equal As Strings ${csvA} ${csvB}
我使用该模型仅用于比较行,您可能需要编辑文件字符串以防文件编码存在差异(BOM 在文件开头留下一个特殊的 BOM 字符等)
这个答案对我有用,即使数据已排序。如果没有不匹配,它会将结果作为通过,如果数据不匹配则失败。
csv_difference.py
import sys
def csv_diff(file_f,file_g):
#file_f = sys.argv[1]
#file_g = sys.argv[2]
set_f = set()
set_g = set()
with open(file_f) as f:
line = f.readline().strip()
while line:
set_f.add(line)
line = f.readline().strip()
with open(file_g) as g:
line = g.readline().strip()
while line:
set_g.add(line)
line = g.readline().strip()
diff = set_f - set_g
# print set_f
# print set_g
# print diff
if diff:
#print "Data mismatch between the files"
return False
else:
#print " Data Matches "
return True
csv-difference.robot
*** Settings ***
Library OperatingSystem
Library csv_difference.py
*** Test Cases ***
CSV file comparison
${output}= Run keyword csv diff first.csv second.csv
Should Be True '${output}' == 'True'
def csv_diff(file_f,file_g):
with open(file_f) as f:
textf = f.readlines()
textf.pop(1)
set_f = set(textf)
with open(file_g) as g:
textg = g.readlines()
textg.pop(1)
set_g = set(textg)
if set_f == set_g:
return True
return False
基本上,我将 csv 转移到 dict 并使用 jsondeepcompare 库来比较 csv。 谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.