【问题标题】:How to compare two csv files using Robot Framework如何使用 Robot Framework 比较两个 csv 文件
【发布时间】:2017-11-08 07:58:54
【问题描述】:

我想使用机器人框架比较两个 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

【问题讨论】:

    标签: python python-2.7 csv robotframework


    【解决方案1】:

    只使用 BuiltIn 的应该等于字符串怎么样?

    # 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 字符等)

    【讨论】:

    • 嗨 Lubos,感谢您的回复。即使行没有排序,它会给出相同的结果吗?
    • 不,因为整个文件将被视为单个字符串,并且行顺序的任何更改都会使其不相等。
    • 如果您不关心行顺序,只需执行以下操作: ${csvA} = 获取文件 ${filePathA} ${csvA} = 拆分为行 ${csvA} ${csvB} = 获取文件${filePathB} ${csvB} = 拆分为行 ${csvB} 排序列表 ${csvA} 排序列表 ${csvB} 应该等于字符串 ${csvA} ${csvB}
    【解决方案2】:

    这个答案对我有用,即使数据已排序。如果没有不匹配,它将给出结果,如果数据不匹配,它将失败。

    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'
    

    【讨论】:

      【解决方案3】:
      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
      

      【讨论】:

        猜你喜欢
        • 2017-02-22
        • 1970-01-01
        • 2020-03-24
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多