viernes, 28 de diciembre de 2018

Oracle JOB

Los JOB en oracle se pueden crear por script de base de datos

SYS.DBMS_JOB.SUBMIT
( job => X
,what => ''DECLARE
P_ANNYO NUMBER;
RETURN_VALUE NUMBER;

BEGIN
P_valor:= 0;
RETURN_VALUE := NULL;

XXXX.P_TUProdecmiento( P_valor, RETURN_VALUE );
dbms_output.put_line(RETURN_VALUE );

COMMIT;
END; ''
,next_date => to_date(''13/01/2019 09:00:00'',''dd/mm/yyyy hh24:mi:ss'')
,interval => ''TRUNC(SYSDATE+365)''
,no_parse => TRUE
);
SYS.DBMS_OUTPUT.PUT_LINE(''Job Number is: '' || to_char(x));



Si se ejecuta desde el esquema del SYSTEM. Si quieres que se ejecute con el usuario del esquema hay que añadir

select NLS_ENV into NLS from dba_jobs where job=x;
sys.DBMS_IJOB.change_env(x,''XXXX',''XXXX','XXXX' ,NLS);

viernes, 21 de diciembre de 2018

Pruebas unitarias Selenium

Para hacer pruebas unitarias de una aplicación de web, he usado el componente de Selenium.  Lo bueno es que son pruebas que se se pueden ejecutar una otra vez y que puedes hacer una traducción casi automática a cualquier lenguaje.

Pero yo quería código C# y que la traducción fuera lo más rápida posible. Desde el complemento del FireFox ( desde Chrome no me da esa opción).  Hay que ir a opciones y activar la carteristas experimental

Y cuando lo tienes ya puedes ver el código generado para para prueba 




El código es automático y funciona bastante bien pero no hay que retocar algunas cosas

- Si tienes un combo  (lista deplegable) . El generador de código pone  SelectElement. Para que compile hay que añadir el paquete del Selenium.Support

- Opciones invisibles. Yo tenia el típico menú que cuando el ratón se posiciona sobre la opción principal se se despliega las  sub opciones. Parece que cuando no esta visible no funciona el evento click.  

Actions builder = new Actions(driver);
builder.MoveToElement(driver.FindElement(By.LinkText("menu1"))).Build().Perform();
driver.FindElement(By.LinkText("subMenu1.1")).Click();

- Tiempos de espera. Mi aplicación, como casi todas de la actualidad, tiene llamadas asíncronas.  El código para aplicar un tiempo de espera hay que codificarlo  

WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0, 0, 5));
wait.Until(w => driver.FindElements(By.CssSelector("[type='submit']")).ToList().Any(o => o.Displayed));


- Ventanas/pestañas emergentes . En mi caso los informes salen todos en pestañas nuevas. Por supuesto no es posible saber si el informe sale correctamente. 

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
ReadOnlyCollection<String> handles = null;
wait.Until((d) => (handles = driver.WindowHandles).Count > 1);
driver.SwitchTo().Window(handles[handles.IndexOf(driver.CurrentWindowHandle) ^ 1]);


Los paquetes necesarios para mi aplicación de test fueron 



Todo esto era cierto en las otras versiones del Selenimu. Pero ya no están disponibles

Opciones :
- https://www.seleniumhq.org/docs/05_selenium_rc.jsp
- https://www.katalon.com/download/

Y la mejor opción :
https://a9t9.com/howto/getseleniumide

Ojo desactiva la opciones de actualizar automáticamente o usa la versión portable