TestNg DataBinding: настройка расположения свойств при запуске теста

Для оптимальной производительности лучше избегать использования иерархических запросов (CONNECT BY) в функции сплиттера.

Следующая функция сплиттера значительно улучшает работу с большими объемами данных

CREATE OR REPLACE FUNCTION row2col(p_clob_text IN VARCHAR2) 
   RETURN sys.dbms_debug_vc2coll PIPELINED 
IS
     next_new_line_indx PLS_INTEGER;
     remaining_text VARCHAR2(20000);
     next_piece_for_piping VARCHAR2(20000);
  BEGIN

    remaining_text := p_clob_text;
    LOOP
       next_new_line_indx := instr(remaining_text, ','); 
       next_piece_for_piping :=
          CASE
             WHEN next_new_line_indx <> 0 THEN
                TRIM(SUBSTR(remaining_text, 1, next_new_line_indx-1))
             ELSE
                TRIM(SUBSTR(remaining_text, 1))
          END;

       remaining_text := SUBSTR(remaining_text, next_new_line_indx+1 );
       PIPE ROW(next_piece_for_piping);
       EXIT WHEN next_new_line_indx = 0 OR remaining_text IS NULL;
    END LOOP;
    RETURN;
  END row2col;
/

Эта разница в производительности может наблюдаться ниже (я использовал сплиттер функции, как было указано ранее в этом обсуждении).

SQL> SET TIMING ON
SQL>
SQL> WITH SRC AS (
  2  SELECT rownum||',a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z'||rownum txt
  3  FROM DUAL
  4  CONNECT BY LEVEL <=10000
  5  )
  6  SELECT  NULL
  7  FROM SRC, TABLE(SYSTEM.row2col(txt)) t
  8  HAVING MAX(t.column_value) > 'zzz'
  9  ;

no rows selected

Elapsed: 00:00:00.93
SQL>
SQL> WITH SRC AS (
  2  SELECT rownum||',a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z'||rownum txt
  3  FROM DUAL
  4  CONNECT BY LEVEL <=10000
  5  )
  6  SELECT  NULL
  7  FROM SRC, TABLE(splitter(txt)) t
  8  HAVING MAX(t.column_value) > 'zzz'
  9  ;

no rows selected

Elapsed: 00:00:14.90
SQL>
SQL> SET TIMING OFF
SQL>
2
задан user861594 20 March 2019 в 18:15
поделиться

1 ответ

В качестве альтернативы вы можете использовать расширение TestAG QAF , которое предоставляет различные встроенных поставщиков данных , а также управление ресурсами и средой . С QAF, если ваш тестовый пример управляется данными и имеет разные данные для разных сред, это может выглядеть следующим образом:

    @QAFDataProvider(dataFile = "resources/${env}/data/tc_01.json")
    @Test
    public void tc_01(Map<String, Object>){
    }

Значение ${env} в пути к файлу данных может быть предоставлено во время выполнения в [ 115] разными способами . Это просто в качестве примера. Могут быть и другие альтернативные способы использования различных функций qaf в зависимости от необходимости.

0
ответ дан user861594 20 March 2019 в 18:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: