Para executar testes automáticos no EVE, é necessário instalar o Katalon Studio V 6.3.2, configurar o projeto onde os testes, mais os seus artefatos, são guardados e criar a pasta de onde os testes são executados. É importante referir que serão necessários privilégios sudo para efetuar os seguintes passos.
Criação das pastas necessárias
Para criar as pastas necessárias para a execução dos testes, devem ser executados os seguintes comandos:
cd /www/htdocs
# Pasta principal
sudo mkdir Eve_testSystem
cd Eve_testSystem
# Pasta de ficheiros temporários
sudo mkdir execute
Download Projeto
Para transferir o projeto, já com as parametrizações corretas para a melhor execução possível, devem ser executados os seguintes comandos:
O Katalon Studio V.6.3.2 é o software onde os testes são criados e executados. Para instalar o Katalon Studio V.6.3.2, devem ser executados os seguintes comandos:
O Katalon Studio utiliza o “Java Virtual Machine” para executar os testes nele criados. Para verificar se o OpenJDK 8 já se encontra instalado na maquina atual, deve ser executado o seguinte comando:
java -version
Se o output do comando anterior for igual a:
openjdk version "1.8.0_362"
OpenJDK Runtime Environment (build 1.8.0_275-b01)
OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)
não será necessário efetuar mais qualquer passo. Atenção, que qualquer outra versão do OpenJDK, que não seja a 1.8.0, não será compatível.
Caso contrário, devem ser executados os seguintes comandos:
# Para distribuições baseadas em Debian / Ubuntu
sudo apt update
# Para distribuições baseadas em Red Hat
sudo yum update
# Para distribuições baseadas em Debian / Ubuntu
sudo apt-get install openjdk-8-jre
# Para distribuições baseadas em Red Hat
sudo yum install java-1.8.0-openjdk
# Para selecionar a versão correta, no caso de haver mais que uma
sudo update-alternatives --config java
O comando anterior vai solicitar ao utilizador que escolha entre as versões de Java disponíveis. O utilizador deve digitar o número na lista que pertence á instalação correta (1.8.0), e premir Enter para a selecionar.
There is 1 program that provides 'java'.
Selection Command
-----------------------------------------------
*+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.275.b01-0.el7_9.x86_64/jre/bin/java)
Enter to keep the current selection[+], or type selection number: 1
Instalação Google Chrome
Os testes automáticos são executados utilizando o Google Chrome. Para verificar se o Google Chrome se encontra instalado, deve ser executado o seguinte comando:
google-chrome --version
Se o output anterior for igual a:
Google Chrome 76.0.3809.132
não será necessário efetuar mais nenhum passo e o Katalon Studio está pronto para ser utilizado.
Caso contrário, devem ser executados os seguintes comandos:
# Para distribuições baseadas em Debian / Ubuntu
sudo apt install google-chrome-stable-76.0.3809.132-1.x86_64.rpm
# Para distribuições baseadas em Red Hat
sudo yum install google-chrome-stable-76.0.3809.132-1.x86_64.rpm
Deve-se verificar se o utilizador (dados que se pode ver no AG001 – Empresas no contactos) que está a registar as series tem autorização no portal das finanças para tal.
No portal das finanças o utilizador tem de ter essas opções ativadas
Esta situação é feita pelo cliente que nos dá os dados do utilizador.
Mensagens DOC da AT com o seguinte erro: 9990 The requested URL returned error: 500 Internal Server Error def:15 elapsed:0.067561149597168
verificar se os códigos postais tem a o seguinte formato xxxx-xxx
verificar se a data/hora do servidor está alinhado com a data/hora real
verificar se a descrição dos artigos tem algum caracter “estranho” (p.e ???) ou mesmo vazio. Isto pode acontecer em ambientes que recebem informação de ISO-8859-15 para UTF8 e por alguma razão não é possivel converter correctamente todos os caracteres, ou ambientes que tenham sido convertidos para UTF8
verificar se o certificado para a ligação se encontra válido
Para a realização de testes de automação é necessária a ferramenta Katalon Studio. Os testes têm de ser realizados em PC e é necessário o browser Chrome ou Firefox.
Uma vez que a execução em browser headless é mais rápida por vezes os elementos ainda não estão visíveis, nesses casos aconselha-se a usar o seguinte comando:
WebUI.delay(1)
Não esquecer de alterar a data nos campos, obtendo a data atual.
Caso o comando WebUI.setText(…) não estiver a funcionar existe a seguinte alternativa de comandos:
Como já devem calcular o Eve respeita mais as definições que o Wpms, o que peço que quando estão a criar reports novos, tomem mais atenção à definição das colunas.
Vou deixar aqui alguns exemplos do que é necessário começar a fazer para que o report funcione corretamente no Eve:
Novos campos de quantidade
Para o controlo que vemos na imagem abaixo é necessário fazer:
No método de leitura do report em questão e na coluna em questão:
Solução 1:
$outData[$lin]['Quantita_stock_UMS2C'] = array(
'Control' => 'Q',
'Description' => $outData[$lin]['Unita_misura_stock2'],
'DescriptionSize' => 20
);
$outData[$lin]['Unita_misura_stock2H'] = true;
-----------
Solução 2:
$outData[$lin]['Unita_misura_stock1H'] = true;
$outData[$lin]['Quantita_stock_UMS1L'] = $outData[$lin]['Unita_misura_stock1'];
$outData[$lin]['Quantita_stock_UMS1C'] = array(
'Control' => 'Q',
'Description' => '',
'DescriptionSize' => 0
);
Novos campos de Sim/Não
Para o controlo que vemos na imagem abaixo é necessário fazer:
Isto é necessário fazer no método de leitura, porque no PDT não existe tipos de elementos, então ao passar assim o construtor do Eve irá reconhecer isto para fazer um controlo diferente.
O que aconteceu aqui é que não olharam para a definição da linha na coluna, porque no antigo pdt não era necessário porque ele metia os campos de input (que começam no nivel L06) automaticamente, o que agora é necessário definir o numero seguinte (no limite o mesmo numero que o registo anterior, porque o código tem uma validação para incrementar a partir do deste nível).
Para preencher o Text1 seguinte:
Com artigo + descrição de artigo + fator de conversão
// get some article data
$parD0080 = array();
$parD0080["ARTC"][0]["val1"] = $rec["310"];
$datD0080 = exec_sql("D0080", "read_D0080V01", $parD0080);
$outData[$line]["Text1"] = get_msg($rec["100"], $rec["110"], $rec["120"], array("p1"=>((getG("rfDescAndCode"))? $datD0080[0]["010"]." - ": false).$datD0080[0]["020"]." ".$rec["320"]));
Utilizar campos de artigo e código de barras no mesmo ecrã
Quando temos que utilizar o campo artigo ou código de barras no mesmo ecrã, devemos fazer o seguinte código, pois assim garantimos que o código de barras respeita as regras do PLU:
if($recPar["ARTC"][0]["val1"]) $article = $recPar["ARTC"][0]["val1"];
else if($recPar["BRCD"][0]["val1"]) {
/*function that returns the barcode according to the PLU radical definitions defined in the system parameters*/
if(substr($recPar["BRCD"][0]["val1"], -1) == "#") {
$post2Send = $arrayBatch = array();
$post2Send["estab"] = $rec["230"];
$post2Send["cb"] = $recPar["BRCD"][0]["val1"];
$post2Send["rec"] = $rec;
if ($data128UCC = exec_sql("FAPLOG102", "callAnalize128UCC", $post2Send)) {
$array128UCC = $data128UCC["128UCC"];
$arrayAI = $data128UCC["AI"];
// $rightRoot = $data128UCC["rightRoot"];
} else {
send_msg("AP", "RFS", "75");
return FALSE;
}
// decode
if ($array128UCC) foreach ($array128UCC as $ai => $value) if ($arrayAI[$ai]) foreach ($arrayAI[$ai] as $seq => $elements) {
$valueX = $value;
if ($elements["start"] || $elements["end"]) {
$start = $delta = 0;
if ($elements["start"]) $start = $elements["start"] - 1;
if ($elements["end"]) $delta = $elements["end"] - $start;
if ($delta) $valueX = substr($value, $start, $delta);
else $valueX = substr($value, $start);
}
switch ($elements["elem"]) {
case "GTIN":
$barcode = $valueX;
break;
}
}
}
elseif($recPar["BRCD"][0]["val1"]){
$postCheck=array();
$postCheck["barcode"] = $recPar["BRCD"][0]["val1"];
if($barcode = exec_sql("FAPLOG102","getBarcodeEAN",$postCheck)) $check = TRUE;
else{
$barcode = $recPar["BRCD"][0]["val1"];
$check = FALSE;
}
}
}
}
if($article || $barcode){
if($article) {
$parD0080 = array();
$parD0080["ARTC"][0]["val1"] = $article;
if($datD0080 = exec_sql("D0080", "read", $parD0080)) $art = $datD0080[0]["Articolo"];
else {
send_msg("AP", "RFS", "180");
return false;
}
} else {
// if we have barcode, we must look for assigned article to him
$parD0081 = array();
$parD0081["BRCD"][0]["val1"] = $barcode."%";
$parD0081["BRCD"][0]["sig1"] = "L";
if(!$datD0081 = exec_sql("D0081", "read", $parD0081)) {
send_msg("AP", "RFS", "180");
return false;
}
if(!$datD0081[1]) $art = $datD0081[0]["Articolo"];
else {
send_msg("AP", "RFS", "673", array("p1"=>$recPar["ARTC"][0]["val1"])); // there are more than one article linked to the supplied code
return false;
}
}
Abaixamento: Tarefa de colocar um contentor de uma zona alta de buffer para o mesmo espaço mas para o piso zero, zona de picking.
Tipos de Abaixamento:
Totalidade Contentor: O abaixamento é feito com todo o contentor. Se o contentor tiver 10 UM, baixa as 10, se tiver 100 baixa 100. Não é possível baixar parte do contentor.
Só Quant. Reservada: O abaixamento é feito com a quantidade que foi reservada no contentor durante o processamento, se sobrar quantidades no contentor, este volta para o lugar inicial..
Só Quant. Específica: Só será baixada a quantidade definida no AL077->Espaços Atribuidos Permanentemente->Quant. a Baixar
Quant. a Pedido: Durante a unidade de trabalho, o operador indica quais as quantidades a baixar.
Quantidade Sugerida – O sistema calcula a quantidade máxima definida no AL077->Espaços Atribuidos Permanentemente->”Quant. a Baixar”, UM para Calc. Sugere essa quantidade a baixar, no entanto o utilizador poderá definir a quantidade.
Quantidade Obrigatória – O sistema calcula a quantidade máxima definida no AL077->Espaços Atribuidos Permanentemente->”Quant. a Baixar”, UM para Calc. Desde que exista no contentor e obriga a baixar forçosamente essa quantidade.
Ação: Interação no sistema. Normalmente associada a um botão e um report.
Agendamento: Execução de um processo recursivamente com período definido.
Alocação: É a indicação por parte do sistema do sítio onde se pode arrumar a mercadoria. O sistema faz uma proposta de alocação.
Armazém: Armazém é uma instalação física onde se efetuam as diversas operações de gestão de stock.
O armazém divide-se por x zonas principais:
Cais
Zona de receção
Zona de armazenamento
Zona tratamento de pedidos
Zona de execução
Arrumação: É a operação de arrumar a palete no rack fisicamente. Baseia-se na proposta de alocação mas o sítio onde se coloca pode não ser o mesmo.
AT: Acessório de transporte.
ASN: Advanced Shipment Notification é uma etiqueta com os dados do artigo referentes à sua origem e seu transporte
B
Bloqueio: Um bloqueio impede que 2 utilizadores possam editar dados ao mesmo tempo. Isto previne alterações na base de dados mal formatadas.
Batch: Fila de processos que ocorrem sem que o utilizador perceba.
C
Cais: Zona onde estão os pontos de acesso ao armazém.
Carga: Processo de colocação de mercadoria no veiculo de transporte.
Carga Controlada: O sistema indica que carga e por que ordem são carregados.
Carga Não Controlada : É o operador que se encarrega de gerir quais as cargas a carregar e por que ordem são carregados.
Centro de Distribuição: Espaço físico que engloba um ou mais armazéns.
Código de Barras: Associado a um artigo e uma unidade de medida.
Condomínio: Agrupamento de contentores. Dividem-se em:
Condomínio Pai: Pode conter um ou mais filhos.
Condomínio Filho: Pertence a um único pai.
Consolidação: Consiste em criar grandes carregamentos a partir de vários outros pequenos. Resulta em economia de escala no custo da logística.
Contentor: É um conjunto de artigos agrupados numa AT.
Contentor Completo: Considera-se um contentor completo quando as quantidades estão colocadas na AT, de acordo com as definições dos níveis, lastro e excedente. O calculo do volume é N*L+E (Nível*Lastro+Excedente).
Cycle Counting: Inventário a um determinado espaço, sem necessidade de paragem do armazém.
D
Dados Mestre: Todos os dados necessários para os documentos externos.
Dados Logísticos: Dados de definição de um artigo para um determinado armazém.
Documento interno: É um documento que é gerado internamente sempre que se faz um movimento.
Documento externo: É um documento que é gerado por um terceiro como as faturas ou guias de transporte.
E
Espaço: É um espaço físico onde são coladas a mercadoria, normalmente em cada espaço pode conter até três paletes EUR.
Eventos: Lançados pelos trabalhos. Responsáveis pela implementação do programa associado.
Execução: É a operação que executa os pedidos, ou seja, organiza os produtos pedidos num contentor. Operação dentro do armazém.
Excedente: Quantidade extra que se pode colocar acima do último nível.
Expedição: É a operação que trata do envio dos pedidos para as respectivas lojas/clientes. Operação na zona do cais.
F
FAQ(Frequent Asked Questions): Perguntas frequentes. Contem a descrição da pergunta e possível solução.
Ficha Lote: Dados de rastreabilidade do artigo.
Fluxo: Definição do sistema para as operações do armazém. As suas definições fazem com que o comportamento do sistema variar de artigo para artigo consoante o fluxo.
Fornecedor: Entidade externa que fornece produto ao armazém.
G
Galera: Componente de um camião, parte que transporta a mercadoria.
Glossário: Conjunto de termos do sistema.
H
I
Inventário: Processo de contagem de todos, ou parte, dos artigos do armazém.
Artigo:
Operação parada.
Operação em curso.
Cycle Counting
Buffer/Picking
Intervalo Numerador: Define o intervalo de números sequenciais que um numerador pode ter.
J
JIT(Just-in-Time): Tipo de armazenamento. Este é um processo onde um contentor é dividido pelas lojas/clientes.
K
KPI: Key Performance Indicator, Indicador-chave de desempenho é uma ferramenta de gestão para realizar a medição e consequente nível de desempenho de um determinado processo.
L
Lastro: Camada de artigo, define a quantidade de UN que cabem nessa camada.
Layout: Disposição das diferentes componentes/zonas do armazém.
Lead Time: Período entre o momento em que um pedido é feito e o horário em que ele é recebido no armazém. Também chamado de tempo de reabastecimento.
Local Source: Trecho de código que está implementado diretamente no sistema do cliente.
M
Mensagens Interface: São mensagens que o sistema troca com sistemas externos para trocar informações entre os diversos sistemas. As mensagens são trocadas através de:
Protocolos IDOC ou HTTP-XML, usado com os sistemas SAP;
Ficheiros CSV;
Protocolo SOAP, por Web Service;
Por SQL;
Modificações: Uma modificação consiste num objeto que vai conter todas as instruções de código e alterações a tabelas efetuadas para um determinado pedido.
Método: Uma função do sistema que permite a escrita ou leitura dos dados.
N
Nível: Quantidade de lastros possíveis.
Numerador: Um numerador é usado para numerar dados com grandes volumes. Normalmente a numeração é sequencial.
O
Objeto: Conjunto de métodos/funções do sistema.
Onda: Conjunto de voltas planeadas organizadas por dia/mês.
Operação: Processo que o armazém realiza. Contêm as definições de como o processo é gerido.
Operação JIT: Operação do armazém onde os pedidos são executados ao contentor. O operador inicia com o contentor completo e vai executar os mesmos por loja/cliente.
Operação Stock: O operador inicia a operação com um contentor vazio e vai ao armazém executar os artigos para completar o contentor.
Ordem Compra: É um pedido ao fornecedor de um ou mais artigos.
P
Parâmetros: Parâmetros são campos que servem de passagem de dados entre os vários objetos. Como exemplo, podemos passar dados entre um relatório e o seu método, e para o fazer, usamos parâmetros. Um parâmetro é criado com base num elemento, ou num elemento calculado, que contêm as características do campo.
Patches: Conjunto de código com as novas alterações agrupadas.
PDT: Máquina com ecrã para operadores executarem as suas operações
Pedido: Conjunto de artigos e respetivas quantidades que um cliente solicitou.
PLU: PLU é um código de barras identificador da origem do produto, normalmente para artigos exportados
Picking: Operação de retirar um artigo da zona de picking para o contentor que o operador está a executar.
PID: Número identificador único de cada serviço.
Proposta de Alocação: É a indicação por parte do sistema de um lugar (Buffer ou Picking) para a alocação do artigo. O que pode falhar?
Não existir espaço definido para o artigo.
Não existir espaço para o tipo de artigo (isto é, num armazém de secos tentar se colocar um artigo de frio).
Q
Quarentena: Tipo de stock.
R
Rateio: Rateio é a distribuição de stock pelos diferentes pedidos quando o mesmo não satisfaz totalmente as necessidades dos clientes. Estão definidas regras de rateio. Podem se consultar em [SAM21].
Receção: É a operação que faz a ordem de compra, receção da mercadoria, descarrega, coloca-a no cais e procede à verificação de quantidades, artigos e estado.
RegrasDe Alocação: São regras definidas para a alocação dos artigos. Podem ser consultadas no menu: [AD031]
Regras de Extração: São regras definidas para a extração dos artigos no seu processamento. Podem ser consultadas no menu [AD032]
Validade e FIFO: Extrai-se os artigos com menor validade, se tiverem mesma validade extraem-se os que chegaram em primeiro.
FIFO: O primeiro a entrar é o primeiro a sair.
Extração Ganchos: Esta regra foi definida para a execução de carne. A carne é pendurada em ganchos e percorre o sistema de ganchos até ao fim. O primeiro a entrar é o primeiro a sair.
FEFO com Ficha Lote: Os primeiros a expirarem a data de validade são os primeiros a sair.
LIFO: O último a entrar é o primeiro a sair.
Palotes: Por contentor Palote (Um tipo de contentor).
Primeiro Chao Depois Rack: Primeiro executa-se o que se encontra no picking e depois o que está no rack.
Progressiva: Extrai-se da palete “aos poucos” os artigos, ao invés de se extrair a palete completa.
Só Palete Cheia e por Excesso ao Pedido: Ordena contentores por data de validade e FIFO mas para contentores completos.
Relação Variável: Artigos cuja a sua unidade de medida pode variar, normalmente a UN, em quilogramas. Por exemplo, o bacalhau varia muito de peso consoante a humidade existente.
Reorganização: Apagar dados das tabelas do ambiente de modo a evitar perdas de performance do sistema.
Reports: Reports são todos os ecrãs que existem na aplicação (tanto no WPMS como EVE) e no PDT.
Reserva de Receção: Agrupamento de um conjunto de ordens de compra organizados por fornecedor, normalmente.
Reserva de Expedição: Agrupamento de um conjunto de pedidos organizados por volta.
RF: Radiofrequência.
Rota: Um percurso definido para um dia, contém os pontos de paragem (Lojas) para cada dia da semana. É um planeamento e não é definitivo. Pode ser gerido ao dia, semana, mês ou até ao ano.
S
Serviço: É um conjunto de trabalhos.
Serviço Master/Pai: Serviço responsável pela gestão de todos os serviços filho. Se este não estiver iniciado não pode haver mais serviços iniciados naquele servidor.
Serviço Slave/Filho: Serviço responsável por qualquer trabalho a si designado.
Spool: Lista de ficheiros gerados para impressão. Só os ficheiros configurados com spool são guardados nesta lista.
Stock: Artigos, produtos ou mercadorias guardadas ou preservadas num armazém.
Stock Físico: Quantidade de produto que existe fisicamente.
Disponível: Produto físico que se encontra disponível. Por exemplo, aumenta quando o operador conclui a receção.
Existente: Produto físico que realmente existe. Por exemplo, aumenta à medida que o operador recebe os contentores.
Stock Teórico: Quantidade de produto que existe em teoria no sistema.
Disponível: Produto disponível. Por exemplo, quando se cria um pedido esta quantidade reduz, deste modo reserva-se a quantidade pedida.
Existente: Produto que existe no sistema. Por exemplo, quando o operador conclui a receção, este valor aumenta com as quantidades recebidas.
Supply Chain: Cadeia de abastecimento. Envolve toda a logística desde o seu fabrico ao consumidor final.
T
Terceiros: Qualquer entidade que se relacione com o sistema ou armazém, como por exemplo fornecedores, clientes, entre outros.
Ticket: Um Ticket é caracterizado por conter toda a informação relativa aos tipos de ticket, responsáveis, tempos, clientes, prioridades e ao estados das diversas modificações que lhe possam estar atribuídas. Na sua criação, o sistema atribui-lhe automaticamente um código que identifica o ticket.
Trabalho: Todas as interações do utilizador, através de um processo não-interativo.
Transbordo: Transferir mercadorias/produtos de um para outro meio de transporte ou veículo, no decorrer do percurso da operação de entrega.
U
Unidade de Medida:A unidade de medida é a representação da grandeza fisica para quantificar um artigo.
Unidade de Medida de Stock: É a unidade de medida que um artigo é gerido no stock, normalmente nas unidades mais pequenas, Unidade ou Caixa
Unidade de Movimentação de Armazém: Unidade de medida com que o artigo é gerido no armazém.
V
Vasilhame: Agrupamento de contentores.
Variável
Fixo
Volta: Uma volta é a concretização de uma rota. É criado quando chega um, ou mais, pedidos. Ao chegar o pedido procura-se a rota mais adequada, podendo-se alterar ou acrescentar pontos de paragem.
Com planeamento: Quando existe planeamento o sistema atribui uma rota a cada pedido, antes do pedido ser processado.
Sem planeamento: Quando não existe planeamento o sistema só atribui uma rota a ao pedido depois do mesmo ser processado.
Volume: É uma unidade de transporte. Pode conter um ou mais contentores.
Volume Externo: É o volume de um contentor criado fora do armazém, por uma entidade externa. Os únicos dados que o armazém tem desse volume é o peso e as suas dimensões físicas.
W
Workflow: Fluxo de um processo.
WPMS: Warehouse Process Management System. Sistema desenvolvido para gestão do armazém.
X
X-Docking(Cross-Docking): Tipo/processo de armazém, onde os contentores não são arrumados. Vão diretamente dos fornecedores para os clientes.
Y
Z
Zero: Linhas de mercadoria não executadas, totalmente ou parcialmente. Existem diversas razões para a não execução das linhas e os tipos de zeros dividem-se nas seguintes categorias:
Zero Anagráfico: É um tipo de zero cuja razão é a falta de dados Anagráficos(Dados mestre).
Reserva Stock Físico:
Palete existe mas não está arrumada.
Palete existe mas fora de validade.
Palete existe mas não está no espaço de picking do artigo.
Palete existe mas está bloqueada.
Existe stock teórico mas não existe stock físico.
Reserva Stock Teórico: Não existe stock disponível do artigo.
Zeros rateio – Não existe stock disponível do artigo.
Zero Parcial: Caixeiro não executou toda a mercadoria do documento de execução.
Anulação linha contentor: Caixeiro não executou nada da mercadoria do documento de execução.