上一篇文章大概讲了RobotFramework 构建测试套件部分。这篇文章讲一下如何从文本文件(.txt或者.robot文件)到Robot进行测试数据结构的转化。以下面的文件为例test.txt
1 *** Settings ***
2 Suite Setup Initialize
3 Suite Teardown Clear
4 Resource ../Test_Run_Call.txt
5
6 *** Test Cases ***
7 Init_Env
8 log Status is OK!
9
10 Scope_Test
11 log Status is OK!
1 def _parse(self, path):
2 try:
3 return TestData(source=abspath(path),
4 include_suites=self.include_suites,
5 warn_on_skipped=self.warn_on_skipped)
6 except DataError, err:
7 raise DataError("Parsing '%s' failed: %s" % (path, unicode(err)))
由文件到Robot数据结构主要是通过_parse这个函数来完成。也就是TestData这个函数来完成(虽然看着像一个类,但其不是哦~不要被它欺骗)
1 # robot/parsing/model.py
2 def TestData(parent=None, source=None, include_suites=None,
3 warn_on_skipped=False):
4 if os.path.isdir(source):
5 return TestDataDirectory(parent, source).populate(include_suites,
6 warn_on_skipped)
7 return TestCaseFile(parent, source).populate()
由上面的源码可以得知,此处根据传入的source类型不同,而调用不同的类。当source为文件时,调用TestCaseFile这个类进行构建,而当source为目录时,调用TestDataDirectory进行构建。这也说明,robot支持指定单独的文件(suite),也支持指定包含许多文件(Suite)目录。下面以TestCaseFile这个类进行分析。
1 class TestCaseFile(_TestData):
2
3 def __init__(self, parent=None, source=None):
4 self.directory = os.path.dirname(source) if source else None
5 self.setting_table = TestCaseFileSettingTable(self)
6 self.variable_table = VariableTable(self)
7 self.testcase_table = TestCaseTable(self)
8 self.keyword_table = KeywordTable(self)
9 _TestData.__init__(self, parent, source)
10
11 def populate(self):
12 FromFilePopulator(self).populate(self.source)
13 self._validate()
14 return self
15
16 def _validate(self):
17 if not self.testcase_table.is_started():
18 raise DataError('File has no test case table.')
19
20 def _table_is_allowed(self, table):
21 return True
22
23 def has_tests(self):
24 return True
25
26 def __iter__(self):
27 for table in [self.setting_table, self.variable_table,
28 self.testcase_table, sel