有一个名为summary_table的表,该表比较两个表并检查这两个表的列,约束和数据是否相同。被检查的表(table1)是第一个版本,另一个(table2)是第二个版本。摘要表具有以下列:column_status(检查两个表的列是否相同),data_status(检查两个表中的数据是否相同)和constraints_status(检查两个表的约束是否相同)显示“通过”或“失败”。 summary_table中有多个表(1000多个)。我该如何测试它们中的每一个?
summary_table的外观如下:
TABLE1 TABLE1 COLUMN_STATUS DATA_STATUS CONSTRAINTS_STATUS
--------------------------------------------------------------------------
CUST1 CUST1 PASS PASS PASS
SUPP1 SUPP1 PASS FAIL PASS
编辑:我有一个包含多行的表。每行有两个表名,这些表名已经与状态列进行比较,以显示其通过还是失败。我想使用状态列测试每一行。
答案 0 :(得分:0)
可以检查特定的游标数据,也可以简单地查询包含失败的行数。这样,您的检查就非常简单,但是不会报告非常具体的输出。
如果我理解正确,那么您基本上是想检查另一个测试套件的结果,因此,我认为最好将此测试保持其通用设置(例如,没有硬编码的表列表),但是同时让它报告特定问题。
执行此操作的一种可能方法是查询表中的所有行,并检查三列中的每一列。您可以在自定义消息中使用表名,因此测试结果将包含有关哪个表未通过测试的特定信息。因此,对于您的测试数据,测试可能如下所示:
-- %test(All bladiebla checks in summary table should be passed)
procedure Check_Summary_Status;
procedure Check_Summary_Status is
begin
for r in (select * from Summary_Status t) loop
ut.expect(r.COLUMN_STATUS, 'Column status for table ' || r.Table1).to_equal('PASS');
ut.expect(r.DATA_STATUS, 'Data status for table ' || r.Table1).to_equal('PASS');
ut.expect(r.CONSTRAINTS_STATUS, 'Constraint status for table ' || r.Table1).to_equal('PASS');
end loop;
end;
输出看起来像这样,清楚地说明了哪些检查失败以及针对哪个表。
1) check_summary_status
"Data status for table SUPP1"
Actual: 'FAIL' (varchar2) was expected to equal: 'PASS' (varchar2)
at "MYSCHEMA.TST_MY_DEMO", line 10 ut.expect(r.DATA_STATUS, 'Data status for table ' || r.Table1).to_equal('PASS');