Jump to content

Recommended Posts

  • Administradores

Você certamente ficará surpreso com o poder que essa ferramenta possuí mas também irá entender que ele exige muito trabalho pra que tudo fique bem no fim do dia.

Bem, Protractor nada mais é que - em tradução livre - um framework de teste end-to-end para aplicações AngularJS . Ele executa testes contra seu aplicativo em execução em um navegador real, interagindo com ele como um usuário faria ( http://angular.github.io/protractor/#/ 1 ). Em suma ele substitui aquele bom e velho checklist que alguém da sua equipe gasta um tempo pra fazer, ou seja, significa redução de custos e de tempo pra sua empresa, ainda mais se você utilizar ele em conjunto com um servidor de integração contínua, como o Jenkins por exemplo ( mas isso é pra um outro post).

O Protractor usa algumas tecnologias pra fazer a sua mágica, são elas:

  • Jasmine : ferramenta de testes de comportamento para javascript, é com ele que você irá escrever seus testes ( http://jasmine.github.io/ );
  • Webdriver : basicamente automatiza processos em navegadores, é ele quem obedece o Jasmine e clica, preenche e interage com a sua aplicação como se fosse um usuário ( https://github.com/angular/protractor ).
  • NodeJS : uma linguagem baseada no V8 JavaScript Engine , orientada a eventos e feita para ser facilmente escalável, é a tecnologia em que o Protractor foi escrito ( https://nodejs.org/ ).

Agora, antes que fique chato demais, vamos a prática…

PARTE 1 - Criar a aplicação a ser testada

  • Vamos pegar uma aplicação de exemplo do AngularJS mesmo, o mais simples, segue:

<!doctype html>

Name:


Hello {{yourName}} !

  • Crie uma pasta no lugar de sua preferência com o nome de protractortest e salve esse arquivo com o nome index.html .
  • Abra index.html no navegador pra garantir que a aplicação funciona.

PARTE 2 - Definindo e baixando as dependências

  • Crie um arquivo chamado package.json na raiz da aplicação com o seguinte conteúdo:

{

“name” : “protractortest”,

“version” : “0.0.1”,

“private” : true,

“scripts” : {

“start” : “cls & http-server -p 8888 -c-1”,

“update-webdriver” : “webdriver-manager update”,

“test” : “protractor protractor.conf.js”

},

“dependencies” : {

“protractor” : “^1.6.1”,

“http-server” : “^0.8.0”

}

}

  • Caso não tenha o NodeJS instalado, faça isso agora https://nodejs.org/download/
  • E instale o protractor globalmente: via linha de comando, execute ‘npm install -g protractor’
  • Para, enfim, baixar as dependências da aplicação execute via linha de comando na pasta da aplicação o comando ‘npm install’ , caso dê algum erro tente executar como sudo (Linux) ou Administrador (Windows).

PARTE 3 - Configurando tudo

  • Crie o arquivo de configuração do protractor (protractor.conf.js) na raiz da sua aplicação, conforme exemplo abaixo:

exports . config = {

specs : [

‘./tests/test.js’,

],

capabilities : {

‘browserName’ : ‘chrome’

},

baseUrl : ‘http://localhost:8888/’,

framework : ‘jasmine’,

jasmineNodeOpts : {

showColors : false,

isVerbose: true,

includeStackTrace: true

},

directConnect : true,

onPrepare : function () {

browser . manage (). window (). maximize ();

}

};

  • Via linha de comando, na pasta raiz da aplicação, digite ‘npm run update-webdriver’ , isso irá instalar o Webdriver e o driver para o navegador escolhido e assim estaremos prontos para rodar os testes, mas calma, ainda precisamos escrever um…

PARTE 4 - Escrevendo testes

  • Crie uma pasta chamada tests e crie nela um arquivo chamado test.js , nele adicione o seguinte conteúdo:

describe ( ‘Meu primeiro teste usando Protractor’ , function () {

it ( ‘Acessando aplicação’ , function () {

browser . get ( ‘http://localhost:8888/’ );

});

it ( ‘Escrevendo no input’ , function () {

var name = ‘o meu nome é Teste, obrigado por me usar…’;

var elementName = element ( by . model ( ‘yourName’ ));

var elementResponse = element ( by . css ( ‘h1’ ));

elementName . sendKeys ( name );

browser . sleep ( 2000 ); // essa linha não é necessária, serve apenas para que você veja a mágica acontecendo

expect ( elementResponse . getText ()). toEqual ( 'Hello ’ + name + ‘!’ );

});

});

FINAL - Rodando os testes

  • Novamente, via linha de comando e na pasta raiz da aplicação, digite ‘npm start’ para subir a aplicação no http://localhost:8888 , em seguida, em outro terminal, digite ‘npm test’ e espere a mágica acontecer…

    2 tests , 1 assertion , 0 failures

  • Deu certo? Ótimo! Nesse momento feche os olhos e imagine o quanto isso pode melhorar a sua vida e a qualidade dos seus produtos, agora abra-os, dê aquele sorriso, respire fundo e ao trabalho meu jovem!!

Obrigado por ter lido até aqui, compartilhe em tudo quanto é lugar, afinal, o mundo precisa saber disso…

Pronto :slight_smile:

p.s.: por favor, se não deu certo e você não teve sucesso, não desista… Deixe suas dúvidas (ou sugestões) nos comentários que eu terei o prazer de responder e ajudar se preciso.

https://tsdn.tecnospeed.com.br/files/render/a/rTxaDtkw3uI/m/2Aal0HUq8WcsUkGJHDOIuxVL8QzTBMkNxmuPYT_WmSuXEgQQRC-pbFfCjQ-w5CdWBzI2RQIb0hw 

https://tsdn.tecnospeed.com.br/files/render/a/rTxaDtkw3uI/m/2Aal0HUq8WedKCXJ1JSNv1OfknRZ-46y6wruSOGq_PabPw9DYhxqofc-LSRHEma7yUhKzgvtKY4

Link para postar
Compartilhe em outros sites
Visitante
Responder este tópico...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Você também pode se interessar por:

    • Por Karina Harumi
      Neste post vamos conhecer um pouco do setor de desenvolvimento da Tecnospeed. Este, que é o responsável por prover os produtos que a empresa disponibiliza ao mercado e que ajudaram a tornar esta empresa, referência no cenário nacional, quando o assunto é documentos fiscais eletrônicos.
      Processo bem definido e certificado
      Desde a sua fundação, o desenvolvimento da Tecnospeed utiliza a metodologia ágil Scrum, como um dos pilares fundamentais para sustentar a produção de software de forma rápida e incremental, sem comprometer a qualidade dos produtos. Qualidade aliás, que é um item não negociável dentro da empresa.
      Com o crescimento rápido da empresa, ficou evidente que, buscar a excelência nos processos de desenvolvimento traria sustentabilidade para a empresa no mercado, pois nosso diferencial seria preservado. Com isso, a empresa em meados de 2011 iniciou um processo de certificação internacional chamado CMMI, que foi conquistado no ano seguinte.

      "Mais software, menos esforço"
      De nada nos adiantaria ter um processo bem definido, se cada um aqui dentro remasse para um lado diferente. Por isso todos os nossos desenvolvedores tem como norte a missão.
      O resultado disso pode ser visto nos recursos dos produtos disponibilizados, como é o caso do Padrão Único para emissão da NFS-e (Nota Fiscal de Serviço Eletrônica), onde através de um único layout de arquivo é possível integrar-se as mais diversas prefeituras do país, evitando que o desenvolvedor, tenha mais essa preocupação.
      Sempre atualizados
      Além do mais, como nossas soluções atuam em um processo tão crítico das empresas que é o faturamento, nossa preocupação em manter os produtos sempre atualizados com a legislação é constante. Por este motivo, procuramos ser proativos analisando cada Nota Técnica liberada pelo governo e publicamos um Parecer Técnico avisando a nossa rede das mudanças que estão por vir e o mais rápido possível, disponibilizamos as versões dos nossos produtos compatibilizados com a regulamentação em questão.
      Também procuramos nos manter atualizados em relação as novas tecnologias, para que nossa rede tenha sempre a disposição um produto capaz de acompanhar a evolução tecnológica que o setor exige. Uma prova disso é a nova versão do gerenciador de documentos eletrônicos lançada recentemente.
      Essa evolução tecnológica só é possível, pois a Tecnospeed conta com uma equipe altamente qualificada, que se capacita constantemente, tanto através de treinamentos externos, quanto, através do programa de capacitação interno.
      Todos os documentos eletrônicos
      Pensando em proporcionar uma maior comodidade para o desenvolvedor de software, a Tecnospeed, possui várias formas de integração para todos os documentos fiscais eletrônicos. Por isso conseguimos atender a mais de 900 software houses em todos o país, que utilizam as mais diversas linguagens de programação e dos mais diversos portes.
    • Por Karina Harumi
      Esse artigo tem como objetivo explicar o que é o modelo de padrão único de nota fiscal de serviços (NFS-e) oferecido pelo Componente NFSe da Tecnospeed, e quais são as vantagens em usá-lo.
      Cenário atual da NFS-e
      Para se entender o problema abordado pelo Padrão Único, primeiramente é necessário se explicar como está o cenário de NFS-e atualmente.
      Existem no momento inúmeros sistemas de NFS-e empregados pelos munícipios, cada um com seu modelo de comunicação de dados. Nós da Tecnospeed costumamos nomeá-los de acordo com seu fabricante ou, no caso dos padrões desenvolvidos pela própria prefeitura do município, o próprio nome do município ou órgão municipal que o desenvolveu. Alguns dos mais conhecidos são Ginfes, Betha, Ábaco, IssNetOnline, SIGISS, Simpliss, GovBR, dentre outros.
      Existe também um padrão criado pelo próprio governo federal, mais precisamente pela Associação Brasileira das Secretarias de Finanças das Capitais (ABRASF), que desenvolveu um padrão que tinha como objetivo servir de base para todos os sistemas de NFS-e. Naturalmente nós o chamamos de padrão ABRASF. Não vou me alongar nos detalhes desse padrão, mas vale citar que esse modelo especificava o esquema dos XMLs usados em toda a comunicação entre os ERPs e o sistema de NFS-e da prefeitura.
      De fato, muitos dos padrões de NFS-e são baseados no padrão ABRASF, porém, pelo fato de o padrão ABRASF não ser mandatório, mas sim apenas um modelo conceitual, existem os que são bastante diferentes, tanto na estrutura dos XMLs usados para envio dos lotes de notas quanto no modelo de comunicação. Ao passo que o padrão ABRASF estabeleceu um modelo assíncrono (o lote não é processado imediatamente) alguns padrões são síncronos (os lotes são processados no momento do envio). Alguns possuem serviços a mais além dos estabelecidos pelo padrão ABRASF, outros a menos, ou com parâmetros diferentes, outros com comportamentos diferentes. Mesmo os que seguiram o padrão ABRASF, cada um seguiu à sua maneira, fazendo adaptações conforme suas necessidades. A verdade é que cada padrão tem sua própria maneira de trabalhar, suas peculiaridades, etc.
      Vários padrões, vários layouts de integração diferentes
      O Componente NFSe, em relação aos serviços de NFSe especificados pelo padrão ABRASF (envio de lotes, consulta de situação do lote, consulta do lote, consulta de nota por NFSe, consulta de nota por RPS e cancelamento) consegue estabelecer uma interface razoavelmente comum entre os diversos padrões. Uma consulta de nota por NFSe, por exemplo, para dois padrões com funcionamento bastante diferente, vai ser chamada pelo ERP ao componente de uma única maneira.
      Porém, para o layout do envio dos lotes de notas não havia um “denominador comum”. Cada padrão exige um conjunto diferente de dados, com campos com nomes diferentes e até mesmo formatos de dados diferentes, e cabia ao desenvolvedor que se utilizava do Componente NFSe estudar os campos dos inúmeros padrões existentes, e saber quais dados usar em quais campos desses padrões. Isso aumentava muito a complexidade do uso do Componente NFSe.
      Padrão Único: vários padrões, um único layout de integração
      Foi pensando em diminuir esse problema de “Torre de Babel” que a Tecnospeed criou o Padrão Único NFSe. Ele funciona como um “esperanto”, ou seja, uma “linguagem universal”, que será traduzida para os diferentes layouts exigidos pelos padrões.
      O objetivo do Padrão Único é possibilitar a emissão de NFS-es para todos os padrões através de um único layout, e ainda ser flexível o suficiente para permitir se trabalhar com as particularidades de cada padrão. Ou seja, um ERP se utilizando do Padrão Único irá especificar sempre os mesmos campos com os mesmos formatos de dados independente do município para o qual ele estará emitindo notas, e deixar ao Componente NFSe a tarefa de saber que campos do Padrão Único correspondem a que campos do padrão do município, e que formato de dados ele usa.
      O Padrão Único estabelece um “denominador comum” entre os padrões, e com ele é possível se emitir NFS-e para para a grande maioria dos casos de emissão de notas de serviço. Em um cenário típico, o Padrão Único oferece tudo o que é necessário para se emitir NFS-es para os municípios homologados no Componente NFSe. Porém é importante ressaltar que ele não cobre todos os campos particulares de todos os padrões, apenas os essenciais e que tem funcionalidade em comum. Pode eventualmente surgir a necessidade de se informar dados particulares ao um padrão que não são cobertos pelo Padrão Único. Nesses casos, o Padrão Único oferece uma maneira de se especificar esses dados especiais, informando no arquivo de integração o nome do campo do padrão do município com um “@” (arroba) no início. Vale lembrar que esses casos são bastante raros de se acontecer.
      Raros também são os padrões que não são cobertos pelo Padrão Único, devido a um grau de diferença tamanho entre esse padrão e o padrão ABRASF que impossibilitou traçar qualquer paralelo entre os campos dos dois padrões. Até o momento nos deparamos com apenas um padrão assim, usado por poucos municípios, para o qual deve ainda ser usado o layout próprio do padrão.
      No final, o Padrão Único vem se mostrando uma poderosa ferramenta capaz de reduzir imensamente o esforço dos desenvolvedores na implementação da emissão de NFS-e pelos seus produtos.
      Tópico originalmente criado por: @Jonathan Santos
    • Por Karina Harumi
      Você certamente ficará surpreso com o poder que essa ferramenta possuí mas também irá entender que ele exige muito trabalho pra que tudo fique bem no fim do dia.
      Bem, Protractor nada mais é que - em tradução livre - um framework de teste end-to-end para aplicações AngularJS . Ele executa testes contra seu aplicativo em execução em um navegador real, interagindo com ele como um usuário faria ( http://angular.github.io/protractor/#/ 1 ). Em suma ele substitui aquele bom e velho checklist que alguém da sua equipe gasta um tempo pra fazer, ou seja, significa redução de custos e de tempo pra sua empresa, ainda mais se você utilizar ele em conjunto com um servidor de integração contínua, como o Jenkins por exemplo ( mas isso é pra um outro post).
      O Protractor usa algumas tecnologias pra fazer a sua mágica, são elas:
      Jasmine : ferramenta de testes de comportamento para javascript, é com ele que você irá escrever seus testes ( http://jasmine.github.io/ ); Webdriver : basicamente automatiza processos em navegadores, é ele quem obedece o Jasmine e clica, preenche e interage com a sua aplicação como se fosse um usuário ( https://github.com/angular/protractor ). NodeJS : uma linguagem baseada no V8 JavaScript Engine , orientada a eventos e feita para ser facilmente escalável, é a tecnologia em que o Protractor foi escrito ( https://nodejs.org/ ).
      Agora, antes que fique chato demais, vamos a prática…
      PARTE 1 - Criar a aplicação a ser testada
      Vamos pegar uma aplicação de exemplo do AngularJS mesmo, o mais simples, segue: <!doctype html>
      Name:
      Hello {{yourName}} !
      Crie uma pasta no lugar de sua preferência com o nome de protractortest e salve esse arquivo com o nome index.html . Abra index.html no navegador pra garantir que a aplicação funciona. PARTE 2 - Definindo e baixando as dependências
      Crie um arquivo chamado package.json na raiz da aplicação com o seguinte conteúdo:
      {
      “name” : “protractortest”,
      “version” : “0.0.1”,
      “private” : true,
      “scripts” : {
      “start” : “cls & http-server -p 8888 -c-1”,
      “update-webdriver” : “webdriver-manager update”,
      “test” : “protractor protractor.conf.js”
      },
      “dependencies” : {
      “protractor” : “^1.6.1”,
      “http-server” : “^0.8.0”
      }
      }
      Caso não tenha o NodeJS instalado, faça isso agora https://nodejs.org/download/ E instale o protractor globalmente: via linha de comando, execute ‘npm install -g protractor’ Para, enfim, baixar as dependências da aplicação execute via linha de comando na pasta da aplicação o comando ‘npm install’ , caso dê algum erro tente executar como sudo (Linux) ou Administrador (Windows). PARTE 3 - Configurando tudo
      Crie o arquivo de configuração do protractor (protractor.conf.js) na raiz da sua aplicação, conforme exemplo abaixo: exports . config = {
      specs : [
      ‘./tests/test.js’,
      ],
      capabilities : {
      ‘browserName’ : ‘chrome’
      },
      baseUrl : ‘http://localhost:8888/’,
      framework : ‘jasmine’,
      jasmineNodeOpts : {
      showColors : false,
      isVerbose: true,
      includeStackTrace: true
      },
      directConnect : true,
      onPrepare : function () {
      browser . manage (). window (). maximize ();
      }
      };
      Via linha de comando, na pasta raiz da aplicação, digite ‘npm run update-webdriver’ , isso irá instalar o Webdriver e o driver para o navegador escolhido e assim estaremos prontos para rodar os testes, mas calma, ainda precisamos escrever um… PARTE 4 - Escrevendo testes
      Crie uma pasta chamada tests e crie nela um arquivo chamado test.js , nele adicione o seguinte conteúdo: describe ( ‘Meu primeiro teste usando Protractor’ , function () {
      it ( ‘Acessando aplicação’ , function () {
      browser . get ( ‘http://localhost:8888/’ );
      });
      it ( ‘Escrevendo no input’ , function () {
      var name = ‘o meu nome é Teste, obrigado por me usar…’;
      var elementName = element ( by . model ( ‘yourName’ ));
      var elementResponse = element ( by . css ( ‘h1’ ));
      elementName . sendKeys ( name );
      browser . sleep ( 2000 ); // essa linha não é necessária, serve apenas para que você veja a mágica acontecendo
      expect ( elementResponse . getText ()). toEqual ( 'Hello ’ + name + ‘!’ );
      });
      });
      FINAL - Rodando os testes
      Novamente, via linha de comando e na pasta raiz da aplicação, digite ‘npm start’ para subir a aplicação no http://localhost:8888 , em seguida, em outro terminal, digite ‘npm test’ e espere a mágica acontecer…
      2 tests , 1 assertion , 0 failures
      Deu certo? Ótimo! Nesse momento feche os olhos e imagine o quanto isso pode melhorar a sua vida e a qualidade dos seus produtos, agora abra-os, dê aquele sorriso, respire fundo e ao trabalho meu jovem!!
      Obrigado por ter lido até aqui, compartilhe em tudo quanto é lugar, afinal, o mundo precisa saber disso…
      Pronto 
      p.s.: por favor, se não deu certo e você não teve sucesso, não desista… Deixe suas dúvidas (ou sugestões) nos comentários que eu terei o prazer de responder e ajudar se preciso.
      https://tsdn.tecnospeed.com.br/files/render/a/rTxaDtkw3uI/m/2Aal0HUq8WcsUkGJHDOIuxVL8QzTBMkNxmuPYT_WmSuXEgQQRC-pbFfCjQ-w5CdWBzI2RQIb0hw 
      https://tsdn.tecnospeed.com.br/files/render/a/rTxaDtkw3uI/m/2Aal0HUq8WedKCXJ1JSNv1OfknRZ-46y6wruSOGq_PabPw9DYhxqofc-LSRHEma7yUhKzgvtKY4
      Tópico originalmente criado por: @Jonathan Santos
    • Por Karina Harumi
      Emitentes de MDF-e muitas vezes têm a necessidade de referenciar uma NF-e emitida em contingência FS/FSDA, e para isso é necessário se usar o segundo código de barras da impressão de FS/FSDA. Porém esse código não está diretamente no XML da nota, ele é gerado a partir de determinados dados que constam na nota. Nesse artigo vamos demonstrar como gerar esse código.
      Está em anexo um projeto em Delphi que, a partir do XML de uma NF-e, busca todos os dados necessários e realiza a geração do código de barras FSDA. Para poder usá-lo, é necessário ter instalado no sistema algum produto da Tecnospeed que use a OCX GovX (componentes, Manager eDoc, etc).
      Tópico originalmente criado por: @Jonathan Santos
    • Por Karina Harumi
      Quando trabalhamos com aplicações comuns criadas em C#, não precisamos nos preocupar em destruir objetos criados em memória, pois o Garbage Collector nativo do C# faz este trabalho automaticamente.
      Porém, quando trabalhamos com objetos COM (Objetos não nativos do C#) o funcionamento é diferente, pois o C# não sabe gerenciar este tipo de objeto. Logo, é necessário encerrá-los de uma forma “não convencional”, utilizando a classe Marshal.
      A Classe Marshal nos traz todos os métodos necessários, para que consigamos fazer com que o C# consiga gerenciar os COM Objects. A Microsoft define a classe Marshal como:
      Fornece um conjunto de métodos para a alocação de memória não gerenciado, a cópia de blocos de memória não gerenciados, e convertendo conseguiu tipos não gerenciados, bem como outros métodos usados variado ao interagir com código não gerenciado. (Microsoft 31-03-2015)
      É simples utilizar a classe Marshal para liberar objetos COM. Abaixo temos um exemplo utilizando o componente spdNFeX:
      { Instanciando COM Object }
      spdNFeX _spdNFeX = new spdNFeX();
      try {
      _spdNFeX.DiretorioLog = “C:\nfeConfig” ;
      } finally {
      { Informando ao Garbage Collector que esse objeto deve ser gerenciado }
      Marshal.FinalReleaseComObject(_spdNFeX);
      { Passando null ao Objeto para que o Garbage Collector saiba que deve ser recolhido da memória }
      _spdNFeX = null;
      }
      Note que para trabalhar com os objetos COM é necessário que se informe ao Garbage Collector o objeto a se gerenciar, uma vez que ele não o entende como um objeto nativo.
      Por fim, deixamos em anexo a este post um projeto de demonstração, que mostra como trabalhar com objeto COM Object e a Classe Marshal.
      Interessado em mais post’s C#, não deixa de verificar os Seguintes Post’s:
      https://ciranda.me/tsdn/blog-da-tecnospeed/post/perdeu-o-webinar-implementando-solucoes-fiscais-com-vb-e-c-assista-a-gravacao Referencias:
      Microsoft 31-03-2015:
      https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal(v=vs.100).aspx
      https://tsdn.tecnospeed.com.br/files/render/a/GKy6V-_IwiY/m/2Aal0HUq8We8BPmCKaB7-cF1R1geE75l39lGwou-6qFHxXKvOSRNxiBn7DybBIrW5jj0I5cepQg
       
      Tópico originalmente criado por: @Jonathan Santos

Sobre o HUB

Ih... bugou! #ajudabrasil 

Você como dev já passou por uma situação onde aconteceu algum bug ou problema, você olhou para os lados e não tinha ninguém para te ajudar? Seus problemas acabaram! 😎

Bem-vindo(a) ao HUB Comunidade, aqui você tira suas dúvidas, compartilha novidades e conhecimento, ajuda o amigo e até pode rolar uns memes de programador que só a gente entende! 🤪

Crie sua conta e bora trocar umas ideias! 

×
×
  • Create New...