如何通过Robot框架比较两个psv文件;可能吗?

时间:2014-08-05 10:45:24

标签: python selenium automated-tests delimiter robotframework

我有两个psv(管道分隔)文件,我需要按列比较数据。

如何比较这两个文件,是否可以通过机器人比较两个psv文件?

1 个答案:

答案 0 :(得分:3)

专门针对psv文件的机器人框架没有任何内置功能。但是,假设它们是文本文件,您可以在python中编写一个比较两个文件的关键字。 Python有一个csv module,可以很容易地解析这些文件,假设你的数据格式正确。

例如,使用以下内容创建名为PsvLibrary.py的文件。请注意:这不是生产质量的代码。它假定数据格式正确,并且每个文件具有完全相同的行数,并且行数不是很多。关键是要显示一般的想法,而不是提供一个功能齐全的库:

import csv

class PsvLibrary(object):
    def compare_columns(self, column_number, filea, fileb):
        with open(filea, "rb") as f:
            reader = csv.reader(f, delimiter="|")
            filea_data = [line for line in reader]

        with open(fileb, "rb") as f:
            reader = csv.reader(f, delimiter="|")
            fileb_data = [line for line in reader]

        # for the given column, make sure the data in file a
        # matches the data in file b
        c = int(column_number)
        for n, (row_a, row_b) in enumerate(zip(filea_data, fileb_data)):
            if row_a[c] != row_b[c]:
                raise Exception("line %d: '%s' != '%s'" % (n+1, row_a[c], row_b[c]))

然后,您可以在这样的测试用例中使用此库:

*** Settings ***
| Library | PsvLibrary

*** Test Cases ***
| Example of comparing columns in pipe-separated files
| | compare columns | 1 | file1.psv | file2.psv

要进行测试,请使用以下数据创建名为file1.psv的文件:

apple|red
orange|orange
grape|green

使用以下数据创建名为file2.psv的第二个文件。请注意,第二列中的最后一行是不同的:

apple|red
orange|orange
grape|purple

如果您运行上述测试,您应该将其视为输出:

==============================================================================
Example                                                                       
==============================================================================
Example of reading a pipe-separated file                              | FAIL |
line 3: 'green' != 'purple'