Testando o serviço Web

Com o serviço da Web criado e funcionando, você poderia ir em frente e iniciar a codificação do cliente. Mas essa seria a abordagem errada. Uma das coisas que mudou com a Web services e SOA é que o cliente eo servidor comunicam através de um contrato. Anteriormente, aplicações cliente / servidor comunicadas através de um protocolo que os desenvolvedores decidida. Se os desenvolvedores precisavam de um novo método ou peça de informação, que a alteração poderia ser feita. Não foi um grande negócio para fazer alterações na mosca. Com os serviços Web e SOA, que já não é o caso. Com o advento da Web services e SOA, temos a capacidade de definir um contrato que pode ser reutilizado e compartilhado por outros partidos. Se houver uma grande vantagem para a SOA, é sua capacidade de compartilhar dados transparentemente.

  

Vamos colocar isso em outro contexto. Imagine que você possui uma pizzaria, com aceitação de ordens, ordens de equipe em linha, e esperar para receber ordens de clientes no local. Assim, os clientes podem encomendar uma pizza em algumas maneiras diferentes, e cada curso, provavelmente tem um sistema completamente diferente ordenação. Na verdade, é questionável que você ainda precisa esperar o pessoal para tomar uma decisão em primeiro lugar. Neste dia e idade, você pode colocar uma tela sensível ao toque em cada mesa e deixar os clientes fazerem seus pedidos de pizza diretamente. Então, quando a ordem for cumprida, alguém traz para a mesa. Ou clientes como sobre a habilitação para encomendar uma pizza em linha, e em seguida indicar que eles querem comer no restaurante, em um determinado momento? O sistema pode reservar uma mesa para os clientes, tornando possível para eles ter um lugar à sua mesa reservada quando entram no restaurante e têm a sua refeição servida imediatamente. Mas que não iria arruinar a experiência de ir ao restaurante? Na minha opinião, ele não vai ao restaurante pode ser uma experiência bastante agitado. Pizzaria Este exemplo ilustra o cliente / servidor arquiteturas de últimos dias, com a equipe espera receber ordens dos clientes. SOA, por outro lado, representa uma pizza uniforme sistema de encomendas, independentemente do dispositivo de entrada a ser utilizado (em pessoa, online, por telefone celular, etc.) Afinal, é uma pizza encomendada através do pessoal esperar nada diferente de uma pizza encomendados on-line? A resposta é não.

Tendo o serviço Web utilizado em múltiplos contextos, representa um desafio em que o contrato deve ser amplamente testado. Se você não exaustivamente testar o serviço Web, você pode causar problemas. Por exemplo, imagine que você criou um blog para animais de serviço da Web que tinha um pequeno bug. Fim desenvolvedores que usam o seu feed encontrar o erro e ver que é menor. Para salvar trabalheira, eles fazem um pouco de solução rápida. Soluções alternativas são perigosos porque eles assumem as coisas vão acontecer de determinada maneira. Você dá a sua alimentação a outros terceiros que não encontro o erro menor para uma razão ou outra. Com o passar do tempo, um cliente recebe a alimentação, e que encontram o bug. Ao contrário de todos os outros, eles enviam um e-mail sobre o erro e pedir que ele seja corrigido. Então o que fazer quando receber a notificação de bug? Você corrigir o erro ou não? A resposta deve ser que você corrigir o erro, mas a realidade é que se o erro é menor, a correção de erros poderia causar o código de trabalho para parar de trabalhar. Esta é a razão de serviço aweb teste é tão importante: por meio de testes, você minimiza a chance de problemas futuros. Testes de serviço da Web tem de ser exaustiva e abrangente, não é empresa aminor. No caso do pedido do blog, um serviço de testes on-line pode tornar sua vida mais fácil.

O validador de alimentação garante que o Atom feed está correto, mas o validador de alimentos não valida se o conteúdo dos alimentos estão corretas. Esse é outro nível de teste e validação, que seria necessário. O validador alimentação torna possível dissociar o cliente do servidor. Tendo o cliente eo servidor dissociado torna mais simples a introdução de mudanças na arquitetura global, porque você pode fazer as mudanças gradualmente. Voltando à arquitetura original do blog de arquitetura, imagine mudar a estrutura do blog como as entradas são exibidas. Porque o cliente eo código do servidor estão interligados, o desenvolvedor pode ser tentado a fuçar o código do servidor. No entanto, o servidor gera três formatos diferentes, e você tem que saber se os ajustes terão de ser acrescentado aos outros dois formatos. Utilizando uma única alimentação que é validado, programadores cliente não tem escolha, mas de ajustar seu próprio código. Programadores cliente não podem tocar no código do servidor e, portanto, não pode introduzir erros involuntários. Mencionei que o teste de uma interface requer um conjunto exaustivo e extenso de testes do validador alimentação fornece apenas isso. Mas nem todos os serviços da Web se enquadram na categoria de um aplicativo de blog, e você tem que implementar a infra-estrutura próprios testes. Idealmente, você quer uma arquitetura como um validador de alimentos, porque faz um teste de pressão. Mas um validador de alimentação é uma grande aplicação, e você provavelmente não tem tempo suficiente para escrever uma peça tão complicada de código.

A experiência me ensinou que a maneira mais fácil de escrever testes de maneira rápida e limpa é usar uma linguagem de programação que tenha suporte para test-drive de técnicas de desenvolvimento (por exemplo, JUnit ou NUnit). Você também pode usar uma linguagem dinâmica como Python e Ruby. Algo mais experiência me ensinou é não reinventar a roda. Se um protocolo, a gramática XML, ou de execução já existe, então use isso. Não tente chegar a novas formas de fazer a mesma coisa você só vai complicar sua vida. Poderia ser um pouco mais complexo, inicialmente a aderir ao padrão, mas no longo prazo, você terá menos preocupações. Por exemplo, furando o feed Atom na arquitectura blog, você pode usar uma ferramenta à disposição do público para testar a aplicação. Não exige a escrever qualquer código de teste, você só tem que escrever um teste de alguns scripts para ligar para o Feed Validator site.

Aplicação do ClienteImplementação de um cliente em um contexto Ajax sempre envolve duas etapas: o carregamento do documento e executar o documento. No caso do pedido do blog, não há necessidade para o cliente para intervir, para que o documento deve ser executado uma vez que foi carregado. Em JavaScript, o evento body.onload é acionado quando o documento tiver sido completamente carregado. É muito importante que você use o evento body.onload e não algum script que é executado enquanto o documento está sendo carregado. Enquanto o documento está sendo carregado, ele é considerado incompleto, elementos de referência para HTML no documento pode ser bem sucedido, mas não pôde. Ao utilizar o evento body.onload, você pode ter certeza que o documento tenha sido completamente carregado e cada elemento de referência que precisa está disponível.

Quando o evento body.onload é acionado eo conteúdo é carregado, o conteúdo pode ser processado e injetado no documento HTML. Para o usuário, este processo de duas etapas parece carregar uma única página, em vez de um processo de duas etapas (se o cliente eo servidor têm largura de banda suficiente). Se o carregamento de dois passo não é executado rápido o suficiente, você vai notar uma ligeira oscilação, indicando que algum conteúdo foi carregado e arranjado. O resultado final é o mesmo, eo cliente é presenteado com um único documento que se apresenta como uma única aplicação. Em suma, este processo não é diferente de construir um tradicional cliente / servidor ou aplicativo de n camadas, com padrões abertos e um ambiente de linguagem de programação dinâmica são usados. Com o cliente global da arquitetura do lado abrangidos, vamos cavar um pouco mais profundo em cada uma das etapas.

O carregamento do documentoComo mencionado anteriormente, o primeiro passo é carregar o documento. Se compararmos o carregamento do documento com o carregamento de uma aplicação tradicional, o que está acontecendo é que o navegador é como um sistema operacional preparar a memória, módulos e bases para o programa a ser executado. Assim, por exemplo, se estamos a carregar o documento, o seguinte código irá criar o objeto XMLHttpRequest:

getTransport: function () (return Try.these função (() (return new ActiveXObject ( 'Msxml2.XMLHTTP')), function () (return new ActiveXObject ( 'Microsoft.XMLHTTP')), function () (return new XMLHttpRequest ())) | | false;)

A fonte do código não é importante porque muitas bibliotecas Ajax fazem a mesma coisa. Essencialmente, quando o código é executado, ele tenta descobrir qual o navegador é lidar com isso ele pode retornar em forma a tempo de execução correta para instanciar o objeto XMLHttpRequest. Defendo esta é a abordagem errada, e ele usa o tradicional carregamento executável e correr mentalidade. Quando um sistema operativo carrega um programa tradicional, as variáveis, módulos, e assim por diante são inicializados antes da execução do programa. Quando um navegador de código fonte de cargas, o browser tem a capacidade de executar código JavaScript. Com isto em mente, você poderia escrever o seguinte código:

if (window.ActiveXObject) (FactoryXMLHttpRequest = function () (return new ActiveXObject ( "Microsoft.XMLHTTP");)) else if (window.XMLHttpRequest) (FactoryXMLHttpRequest = function () (return new XMLHttpRequest ();))

No exemplo, não há nenhuma função, apenas uma decisão. A decisão é se o navegador carregar o documento é o Internet Explorer, em seguida, definir a função de instanciar FactoryXMLHttpRequest ActiveXObject. Se o navegador não é o Internet Explorer, em seguida, definir a função FactoryXMLHttpRequest para instanciar o objeto XMLHttpRequest diretamente. O segundo exemplo de inicialização do código fonte não é tão flexível durante o tempo de execução, porque a função definida FactoryXMLHttpRequest só pode instanciar o objeto XMLHttpRequest como foi definido quando o documento foi carregado. Mesmo que esta parece ser uma desvantagem, você tem que perguntar o que as chances são de que o documento carregado será movido byte a byte para outro tipo de navegador. A resposta é que não há chance de isso acontecer, pois não é possível.

A vantagem do segundo exemplo de código fonte é que a funcionalidade pode ser ajustado para o navegador é executado sobre enquanto o documento está sendo carregado. No exemplo, o ajuste foi baseado no browser. Há outras maneiras de afinar e as razões para ajustar sua aplicação, como descobrir a língua ou as dimensões do navegador. Tuning tem a vantagem de que você não precisa carregar a bagagem executável que está associado com as decisões tomadas durante a execução. Este é um fator importante a lembrar, como você pode reduzir o espaço de tempo de execução do seu código de pré-configurar a aplicação durante o carregamento do documento. Mas há uma grande desvantagem de se utilizar um carregamento de documentos gerados a configuração que tem a ver com a serialização. Artigos anteriores demonstrou como usar serialização JavaScript para gerar proxies ou mixins. Se o documento carregado de configuração é serializado e armazenados em um servidor HTTP, e então é carregado em um ponto posterior no tempo usando um navegador diferente, um erro será gerado.

A regra de ouro é que quando há uma vantagem em termos de desempenho ou recursos, utilizar o documento carregado de configuração. Utilizar a abordagem geral de tempo de execução, que inclui uma decisão do processo de tomada de tempo de execução, se há uma pequena chance de que o código será serializado. E para aquelas situações em que realmente não importa uma forma ou de outra utilização, o que faz sentido para você.

Execução do DocumentoApós o documento tiver sido carregado, o evento body.onload é disparado eo código associado é executado. Em termos de HTML, o código é o seguinte. Observe que o código foi abreviado para maior clareza.

 Fonte: / cliente / index.html LoadAtomFeed function () ( var assíncrono = Asynchronous novo (); asynchronous.settings = ( onComplete: function (xmlhttp) ( parseAtom (xmlhttp.responseXML); flexbox.update (); ) ) asynchronous.get ( "/ serviços / blog / entradas / current"); )InitializePage function () (/ / Extra código de inicialização cortar relativas à LoadAtomFeed ();) onload= "InitializePage ()"> 

Welcome To BloggerJacks

Considere o código em negrito. Quando o documento é carregado, o evento body.onload é acionado. Que chama a função InitializePage, que por sua vez chama a função LoadAtomFeed. Na execução do LoadAtomFeed, a classe assíncrona é instanciado, que por sua vez instancia o objeto XMLHttpRequest.

um artigo submetido por Sonja Lande


Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre.
Importante: Este artigo "Testando o Web Service" foi traduzida por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.


Online: 210 users browsing the articles directory