繁体   English   中英

如何使用 Robot Framework 比较两个 csv 文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM