|
| 1 | +/** |
| 2 | + This script is designed to allow invocation of UTPLSQL with multiple reporters. |
| 3 | + It allows saving of outcomes into multiple output files. |
| 4 | + It also facilitates displaying on screen unit test results while the execution is still ongoing. |
| 5 | + Current limit of script parameters is 39 |
| 6 | +
|
| 7 | +Scrip invocation: |
| 8 | + ut_run.sql user password database [ut_path|ut_paths] (-f=format [-o=output] [-s] ...) |
| 9 | +
|
| 10 | +Parameters: |
| 11 | + user - username to connect as |
| 12 | + password - password of the user |
| 13 | + database - database to connect to |
| 14 | + ut_path - a path(s) ot unit test(s) to be executed: user[.package[.procedure]] |
| 15 | + ut_paths - a comma separated list of ut_path (with no spaces in between) |
| 16 | + -f=format - reporter to be used for reporting |
| 17 | + -o=output - file name to save the output provided by the reporter. |
| 18 | + If defined, the output is not displayed on screen by default. This can be changed with the -s parameter. |
| 19 | + If not defined, then output will be displayed on screen, even if the parameter -s is not specified. |
| 20 | + If more than one -o parameter is specified for one -f parameter, the last one is taken into consideration. |
| 21 | + -s - Forces putting output to to screen for a given -f parameter. |
| 22 | +
|
| 23 | + Parameters -f, -o, -s are correlated. That is parameters -o and -s are defining outputs for -f. |
| 24 | + Examples of invocation using sqlplus from command line: |
| 25 | +
|
| 26 | + sqlplus /nolog @ut_run hr hr xe hr -f=ut_documentation_reporter -o=run.log -s -f=ut_teamcity_reporter -o=teamcity.xml |
| 27 | +
|
| 28 | + Unit tests will be be invoked with two reporters: |
| 29 | + - ut_documentation_reporter - this one will output to screen and into file "run.log" |
| 30 | + - ut_teamcity_reporter - this one will output to file "teamcity.xml" |
| 31 | +
|
| 32 | + sqlplus /nolog @ut_run hr hr xe hr -f=ut_documentation_reporter |
| 33 | +
|
| 34 | + Unit tests will be be invoked with ut_documentation_reporter as a format and the results will be printed to screen |
| 35 | +
|
| 36 | + */ |
| 37 | + |
| 38 | +whenever sqlerror exit failure |
| 39 | +whenever oserror exit failure |
| 40 | +conn &1/&2@&3 |
| 41 | +whenever sqlerror continue |
| 42 | +whenever oserror continue |
| 43 | + |
| 44 | +set serveroutput on size unlimited format truncated |
| 45 | +set trimspool on |
| 46 | +set echo off |
| 47 | +set termout off |
| 48 | +set feedback off |
| 49 | +set pagesize 0 |
| 50 | +set linesize 30000 |
| 51 | +set long 30000 |
| 52 | +set longchunksize 30000 |
| 53 | +set verify off |
| 54 | +set heading off |
| 55 | + |
| 56 | +set define off |
| 57 | +spool make_input_params_optional.sql.tmp |
| 58 | +declare |
| 59 | + l_sql_columns varchar2(4000); |
| 60 | +begin |
| 61 | + for i in 1 .. 100 loop |
| 62 | + dbms_output.put_line('column '||i||' new_value '||i); |
| 63 | + l_sql_columns := l_sql_columns ||'null as "'||i||'",'; |
| 64 | + end loop; |
| 65 | + dbms_output.put_line('select '||rtrim(l_sql_columns, ',') ||' from dual where rownum = 0;'); |
| 66 | +end; |
| 67 | +/ |
| 68 | +spool off |
| 69 | +set define & |
| 70 | + |
| 71 | +@@make_input_params_optional.sql.tmp |
| 72 | + |
| 73 | + |
| 74 | +--prepare executor scripts |
| 75 | + |
| 76 | +set define off |
| 77 | +spool set_run_params.sql.tmp |
| 78 | +declare |
| 79 | + l_params varchar2(4000); |
| 80 | +begin |
| 81 | + for i in 1 .. 100 loop |
| 82 | + l_params := l_params || '''&&'||i||''','; |
| 83 | + end loop; |
| 84 | + dbms_output.put_line('exec ut_runner.set_run_params(ut_varchar2_list('||rtrim(l_params, ',')||'));' ); |
| 85 | +end; |
| 86 | +/ |
| 87 | +spool off |
| 88 | +set define & |
| 89 | + |
| 90 | + |
| 91 | +@@set_run_params.sql.tmp |
| 92 | + |
| 93 | + |
| 94 | +spool run_in_backgroung.sql.tmp |
| 95 | +declare |
| 96 | + l_output_type varchar2(256) := ut_runner.get_streamed_output_type_name(); |
| 97 | + l_run_params ut_runner.t_run_params := ut_runner.get_run_params(); |
| 98 | + procedure p(a_text varchar2) is |
| 99 | + begin |
| 100 | + dbms_output.put_line(a_text); |
| 101 | + end; |
| 102 | +begin |
| 103 | + p( 'set serveroutput on size unlimited format truncated'); |
| 104 | + p( 'set trimspool on'); |
| 105 | + p( 'set pagesize 0'); |
| 106 | + p( 'set linesize 4000'); |
| 107 | + p( 'spool ut_run.dbms_output.log'); |
| 108 | + p( 'declare'); |
| 109 | + p( ' v_reporter ut_reporter;'); |
| 110 | + p( ' v_reporters_list ut_reporters_list := ut_reporters_list();'); |
| 111 | + p( 'begin'); |
| 112 | + for i in 1 .. cardinality(l_run_params.call_params) loop |
| 113 | + p(' v_reporter := '||l_run_params.call_params(i).ut_reporter_name||'('||l_output_type||'());'); |
| 114 | + p(' v_reporter.output.output_id := '''||l_run_params.call_params(i).output_id||''';'); |
| 115 | + p(' v_reporters_list.extend; v_reporters_list(v_reporters_list.last) := v_reporter;'); |
| 116 | + end loop; |
| 117 | + p( ' ut.run( ut_varchar2_list('||l_run_params.ut_paths||'), ut_composite_reporter( v_reporters_list ) );'); |
| 118 | + p( 'end;'); |
| 119 | + p( '/'); |
| 120 | + p( 'spool off'); |
| 121 | + p( 'exit'); |
| 122 | +end; |
| 123 | +/ |
| 124 | +spool off |
| 125 | + |
| 126 | +spool gather_data_from_outputs.sql.tmp |
| 127 | +declare |
| 128 | + l_output_type varchar2(256) := ut_runner.get_streamed_output_type_name(); |
| 129 | + l_run_params ut_runner.t_run_params := ut_runner.get_run_params(); |
| 130 | + l_need_spool boolean; |
| 131 | + procedure p(a_text varchar2) is |
| 132 | + begin |
| 133 | + dbms_output.put_line(a_text); |
| 134 | + end; |
| 135 | +begin |
| 136 | + p('declare l_date date := sysdate; begin loop exit when l_date < sysdate; end loop; end;'); |
| 137 | + p('/'); |
| 138 | + for i in 1 .. cardinality(l_run_params.call_params) loop |
| 139 | + p('set termout '||l_run_params.call_params(i).output_to_screen); |
| 140 | + l_need_spool := (l_run_params.call_params(i).output_file_name is not null); |
| 141 | + p(case when l_need_spool then 'spool '||l_run_params.call_params(i).output_file_name||chr(10) end|| |
| 142 | + 'select * from table( '||l_output_type||'().get_lines('''||l_run_params.call_params(i).output_id||''') );'|| |
| 143 | + case when l_need_spool then chr(10)||'spool off' end); |
| 144 | + end loop; |
| 145 | +end; |
| 146 | +/ |
| 147 | + |
| 148 | +spool off |
| 149 | +set termout off |
| 150 | +set define # |
| 151 | +--try running on windows |
| 152 | +$ start sqlplus ##1/##2@##3 @run_in_backgroung.sql.tmp |
| 153 | +--try running on linus/unix |
| 154 | +! sqlplus ##1/##2@##3 @run_in_backgroung.sql.tmp & |
| 155 | +set define & |
| 156 | +set termout on |
| 157 | +--make sure we fetch row by row to indicate the progress |
| 158 | +set arraysize 1 |
| 159 | +@gather_data_from_outputs.sql.tmp |
| 160 | + |
| 161 | +set termout off |
| 162 | +--cleanup temporary sql files |
| 163 | +--try running on windows |
| 164 | +$ del *.sql.tmp |
| 165 | +--try running on linus/unix |
| 166 | +! rm *.sql.tmp |
| 167 | +set termout on |
| 168 | + |
| 169 | +exit |
0 commit comments