2017-06-07 1 views
1

I Differenz zwischen zwei CSV-Dateien vergleichen möchte Roboter Rahmen .Test Fall mit fehlschlagen sollte, wenn es Unterschied ist und passieren, wenn es keine difference.I ist DiffLibrary in Robot Framework versucht hat, aber gibt den Pass-Status zurück, wenn die Datensätze nicht sortiert sind. Kann mir jemand zeigen, wie dies erreicht werden kann oder ob es einen alternativen Weg gibt, dies zu tun?Wie vergleichen zwei CSV-Dateien Robot Framework

Meine first.csv Datei mit Daten wie unter

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 

Und meine second.csv Datei wird wie Daten, die unter

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 

Robot-Code ist unter

*** 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 

Antwort

0

Diese Antwort funktionierte für mich, auch wenn die Daten sortiert sind. Es gibt das Ergebnis als bestanden, wenn es keine Nichtübereinstimmung gibt und scheitern, wenn die Daten nicht übereinstimmen.

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' 
0

Wie wäre es, BuiltIns als Strings gleich zu verwenden?

# 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} 

Ich benutze dieses Modell für Linien nur zu vergleichen, müssen Sie möglicherweise die Datei Zeichenfolge in Fall bearbeiten gibt es Unterschiede in der Datei-Codierung (BOM verläßt ein besonderes BOM Zeichen am Anfang der Datei, etc.)

+0

Hallo Lubos, Vielen Dank für Ihre Antwort. Wird es dasselbe Ergebnis geben, selbst wenn die Zeilen nicht sortiert sind? – Madhu

+0

Nein, weil die gesamte Datei als eine einzelne Zeichenfolge betrachtet werden würde und jede Änderung der Zeilenreihenfolge würde es ungleich machen. –

+0

Wenn Sie kümmern sich nicht um Linien folgenden nur bestelle: $ {CSVA} = Datei $ {filePathA} $ {CSVA} = Split Linien $ {CSVA} $ {csvB} = Get File $ Get {filePathB } $ {csvB} = Auf Zeilen aufteilen $ {csvB} Liste sortieren $ {csvA} Liste sortieren $ {csvB} sollte gleich sein wie Strings $ {csvA} $ {csvB} – Lubos

Verwandte Themen