{"id":54167,"date":"2019-12-19T00:00:00","date_gmt":"2019-12-18T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/testmace-bystryj-start"},"modified":"2020-02-18T14:02:08","modified_gmt":"2020-02-18T11:02:08","slug":"testmace-bystryj-start","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/news\/testmace-bystryj-start","title":{"rendered":"TestMace. In\u00edcio R\u00e1pido","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"TestMace. In\u00edcio R\u00e1pido\" src=\"\/wp-content\/uploads\/2019\/12\/ca19545f1cc06814a69a6a3e6d9f3a5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ol\u00e1 a todos. Estamos lentamente saindo da sombra e continuamos nossa s\u00e9rie de artigos sobre nosso produto. Ap\u00f3s <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458372\/\">o artigo de revis\u00e3o anterior, recebemos muitos coment\u00e1rios (principalmente positivos), sugest\u00f5es e relat\u00f3rios de bugs. Hoje mostraremos<\/a><\/noindex> o TestMace <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">em a\u00e7\u00e3o e voc\u00ea poder\u00e1 avaliar algumas funcionalidades do nosso aplicativo. Para uma imers\u00e3o mais completa, recomendamos consultar nossa documenta\u00e7\u00e3o dispon\u00edvel em<\/a><\/noindex> . Ent\u00e3o, vamos l\u00e1! <noindex><a rel=\"nofollow\" href=\"http:\/\/docs-ru.testmace.com\">http:\/\/docs-ru.testmace.com<\/a><\/noindex>Come\u00e7aremos com o \u00f3bvio. O aplicativo est\u00e1 dispon\u00edvel e realmente pode ser testado em tr\u00eas plataformas \u2014 Linux, Windows, MacOS. Voc\u00ea pode baixar o instalador para o sistema operacional de seu interesse em <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"ustanovka\">Instala\u00e7\u00e3o<\/h1>\n<p><\/p>\n<p>nosso site <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">. Para os usu\u00e1rios de Linux, existe a op\u00e7\u00e3o de instala\u00e7\u00e3o<\/a><\/noindex>do pacote snap <noindex><a rel=\"nofollow\" href=\"https:\/\/snapcraft.io\/testmace\">. Esperamos que em breve consigamos tamb\u00e9m disponibiliz\u00e1-lo na Microsoft Store e App Store (isso \u00e9 necess\u00e1rio? O que voc\u00ea acha?).<\/a><\/noindex>Cen\u00e1rio de Teste<\/p>\n<p><\/p>\n<h1 id=\"podopytnyy-scenariy\">Escolhemos o seguinte cen\u00e1rio padr\u00e3o como teste:<\/h1>\n<p><\/p>\n<p>faremos login: usu\u00e1rio \u2014 admin, senha \u2014 password<\/p>\n<p><\/p>\n<ul>\n<li>vamos adicionar um novo registro<\/li>\n<li>vamos verificar a adi\u00e7\u00e3o correta do registro<\/li>\n<li>Faremos os testes em<\/li>\n<\/ul>\n<p><\/p>\n<p>. Este \u00e9 um simples <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace-quick-start.herokuapp.com\/\">https:\/\/testmace-quick-start.herokuapp.com\/<\/a><\/noindex>json-server <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/typicode\/json-server\">, ideal para testar aplicativos desse tipo. Apenas adicionamos a autentica\u00e7\u00e3o por token em todas as rotas do json-server e implementamos o m\u00e9todo login para obter esse token. Avan\u00e7aremos passo a passo, aprimorando nosso projeto gradualmente.<\/a><\/noindex>Cria\u00e7\u00e3o de Projeto e Tentativa de Criar uma Entidade sem Autoriza\u00e7\u00e3o<\/p>\n<p><\/p>\n<h2 id=\"sozdanie-proekta-i-popytka-sozdat-suschnost-bez-avtorizacii\">Primeiro, vamos criar um novo projeto (<\/h2>\n<p><\/p>\n<p>Arquivo<strong>Novo projeto<\/strong>-&gt;<strong>). Se voc\u00ea est\u00e1 executando o aplicativo pela primeira vez, um novo projeto ser\u00e1 aberto automaticamente. Primeiro, tentaremos fazer uma solicita\u00e7\u00e3o para criar um novo registro (quem sabe a cria\u00e7\u00e3o de registros esteja dispon\u00edvel sem autoriza\u00e7\u00e3o). Selecione no menu de contexto do n\u00f3 do Projeto as op\u00e7\u00f5es<\/strong>Adicionar n\u00f3 <strong>RequestStep<\/strong> -&gt; <strong>. Como nome do n\u00f3, vamos definir<\/strong>criar-post <strong>. Assim, um novo n\u00f3 ser\u00e1 criado na \u00e1rvore e uma aba deste n\u00f3 ser\u00e1 aberta. Definiremos os seguintes par\u00e2metros da solicita\u00e7\u00e3o:<\/strong>Tipo de solicita\u00e7\u00e3o: POST<\/p>\n<p><\/p>\n<ul>\n<li>url:<\/li>\n<li>Corpo da solicita\u00e7\u00e3o: json com o valor <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace-quick-start.herokuapp.com\/posts\">https:\/\/testmace-quick-start.herokuapp.com\/posts<\/a><\/noindex><\/li>\n<li>{\"title\": \"Novo post r\u00e1pido do testmace\"} <code>Se voc\u00ea fez tudo corretamente, a interface parecer\u00e1 da seguinte maneira:<\/code><br \/>\nNo entanto, se tentarmos realizar a solicita\u00e7\u00e3o, o servidor retornar\u00e1 o c\u00f3digo 401, e sem autoriza\u00e7\u00e3o n\u00e3o teremos acesso a nada neste servidor. Bem, isso era de se esperar).<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. In\u00edcio R\u00e1pido\" src=\"\/wp-content\/uploads\/2019\/12\/a5c81dc4977dd73a4975643bf8ced3da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Adicionando uma Solicita\u00e7\u00e3o de Autoriza\u00e7\u00e3o<\/p>\n<p><\/p>\n<h2 id=\"dobavlyaem-zapros-na-avtorizaciyu\">Como j\u00e1 mencionado, temos um endpoint POST<\/h2>\n<p><\/p>\n<p>, que aceita como corpo da solicita\u00e7\u00e3o um json do tipo: <code>\/login<\/code>, que aceita como corpo da solicita\u00e7\u00e3o um json do tipo: <code>{\"username\": \"\", \"password\": \"\"}<\/code>, onde <code>nome de usu\u00e1rio<\/code> e <code>senha<\/code> (novamente, conforme mencionado anteriormente) t\u00eam valores <code>admin<\/code> e <code>senha<\/code> respectivamente. Em resposta, este endpoint retorna um JSON do tipo <code>{\"token\": \"\"}<\/code>. Vamos utiliz\u00e1-lo para autentica\u00e7\u00e3o. Vamos criar <strong>. Como nome do n\u00f3, vamos definir<\/strong> um n\u00f3 chamado <strong>login<\/strong>, tendo como pai o <strong>n\u00f3 Project.<\/strong> Com o uso de arrastar e soltar, mova este n\u00f3 para uma posi\u00e7\u00e3o acima do n\u00f3 <strong>. Assim, um novo n\u00f3 ser\u00e1 criado na \u00e1rvore e uma aba deste n\u00f3 ser\u00e1 aberta. Definiremos os seguintes par\u00e2metros da solicita\u00e7\u00e3o:<\/strong>. Vamos atribuir os seguintes par\u00e2metros \u00e0 requisi\u00e7\u00e3o rec\u00e9m-criada:<\/p>\n<p><\/p>\n<ul>\n<li>url:<\/li>\n<li>Corpo da solicita\u00e7\u00e3o: json com o valor <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace-quick-start.herokuapp.com\/login\">https:\/\/testmace-quick-start.herokuapp.com\/login<\/a><\/noindex><\/li>\n<li>{\"title\": \"Novo post r\u00e1pido do testmace\"} <code>{\"username\": \"admin\", \"password\": \"password\"}<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Executaremos a requisi\u00e7\u00e3o e receberemos um c\u00f3digo 200 com o token na resposta. Assim:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. In\u00edcio R\u00e1pido\" src=\"\/wp-content\/uploads\/2019\/12\/222b2a0b965b4c1135b5b62c0b7424ba.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"refaktoring-ubiraem-dublirovanie-domena\">Refatora\u00e7\u00e3o: removendo a duplica\u00e7\u00e3o do dom\u00ednio<\/h2>\n<p><\/p>\n<p>Os pedidos ainda n\u00e3o est\u00e3o relacionados em um \u00fanico cen\u00e1rio. Mas esta n\u00e3o \u00e9 a \u00fanica desvantagem. Se observarmos de perto, podemos notar que pelo menos o dom\u00ednio est\u00e1 duplicado em ambas as requisi\u00e7\u00f5es. N\u00e3o \u00e9 ideal. \u00c9 hora de refatorar esta parte do futuro cen\u00e1rio e isso ser\u00e1 feito com a ajuda de vari\u00e1veis.<\/p>\n<p><\/p>\n<p>De uma forma geral, as vari\u00e1veis desempenham o mesmo papel que em outras ferramentas e linguagens de programa\u00e7\u00e3o semelhantes - eliminar duplica\u00e7\u00e3o, aumentar a legibilidade, etc. Mais detalhes sobre vari\u00e1veis podem ser encontrados na <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/user-variables\">nossa documenta\u00e7\u00e3o<\/a><\/noindex>. Neste caso, precisaremos de vari\u00e1veis de usu\u00e1rio. <\/p>\n<p><\/p>\n<p>Vamos definir no n\u00edvel do n\u00f3 Project uma vari\u00e1vel <code>dom\u00ednio<\/code> com o valor <code>https:\/\/testmace-quick-start.herokuapp.com<\/code>. Para isso, \u00e9 necess\u00e1rio<\/p>\n<p><\/p>\n<ul>\n<li>Abrir a aba com este n\u00f3 e clicar no \u00edcone da calculadora no canto superior direito<\/li>\n<li>Clique em <strong>+ ADICIONAR VARI\u00c1VEL<\/strong><\/li>\n<li>Insira o nome e o valor da vari\u00e1vel<br \/>\nNeste caso, o di\u00e1logo com a vari\u00e1vel adicionada ser\u00e1 assim:<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. In\u00edcio R\u00e1pido\" src=\"\/wp-content\/uploads\/2019\/12\/071ac6dca2c5a49b78b11719fae5f650.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OK. Agora, gra\u00e7as \u00e0 heran\u00e7a, podemos usar esta vari\u00e1vel em descendentes de qualquer n\u00edvel de profundidade. No nosso caso, s\u00e3o os n\u00f3s <strong>login<\/strong> e <strong>. Assim, um novo n\u00f3 ser\u00e1 criado na \u00e1rvore e uma aba deste n\u00f3 ser\u00e1 aberta. Definiremos os seguintes par\u00e2metros da solicita\u00e7\u00e3o:<\/strong>. Para usar a vari\u00e1vel no campo de texto, \u00e9 necess\u00e1rio escrever <code>${}<\/code>. Por exemplo, a URL para login se transforma em <code>${dom\u00ednio}\/login<\/code>, portanto, para <strong>. Assim, um novo n\u00f3 ser\u00e1 criado na \u00e1rvore e uma aba deste n\u00f3 ser\u00e1 aberta. Definiremos os seguintes par\u00e2metros da solicita\u00e7\u00e3o:<\/strong> o n\u00f3, a URL ser\u00e1 <code>${dom\u00ednio}\/posts<\/code>.<\/p>\n<p><\/p>\n<p>Assim, seguindo o princ\u00edpio DRY, melhoramos um pouco o cen\u00e1rio.<\/p>\n<p><\/p>\n<h2 id=\"sohranyaem-token-v-peremennuyu\">Salvamos o token em uma vari\u00e1vel<\/h2>\n<p><\/p>\n<p>Uma vez que estamos falando sobre vari\u00e1veis, vamos desenvolver um pouco mais esse tema. No momento, quando logamos com sucesso, recebemos do servidor um token de autoriza\u00e7\u00e3o, que precisaremos em solicita\u00e7\u00f5es futuras. Vamos salvar esse token em uma vari\u00e1vel. Como o valor da vari\u00e1vel ser\u00e1 determinado durante a execu\u00e7\u00e3o do script, utilizaremos um mecanismo especial \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/user-variables\/dynamic-variables\">vari\u00e1veis din\u00e2micas<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Para come\u00e7ar, faremos uma solicita\u00e7\u00e3o de login. Na aba <strong>Parsed<\/strong> Para responder, passe o mouse sobre o token e, no menu de contexto (que pode ser acionado com o bot\u00e3o direito do mouse ou pressionando o bot\u00e3o &#8230;), selecione a op\u00e7\u00e3o <strong>Atribuir \u00e0 vari\u00e1vel<\/strong>. Uma janela aparecer\u00e1 com os seguintes campos:<\/p>\n<p><\/p>\n<ul>\n<li><strong>Caminho<\/strong> \u2014 qual parte da resposta ser\u00e1 utilizada (no nosso caso, \u00e9 <code>body.token<\/code>)<\/li>\n<li><strong>Valor atual<\/strong> \u2014 qual valor est\u00e1 no caminho Caminho (neste caso, \u00e9 o valor do token)<\/li>\n<li><strong>Nome da vari\u00e1vel<\/strong> \u2014 o nome da vari\u00e1vel onde <strong>Valor atual<\/strong> ser\u00e1 armazenado. No nosso caso, ser\u00e1 <code>token<\/code><\/li>\n<li><strong>N\u00f3<\/strong> \u2014 em qual dos ancestrais a vari\u00e1vel ser\u00e1 criada <strong>Nome da vari\u00e1vel<\/strong>. Vamos escolher Projeto<\/li>\n<\/ul>\n<p><\/p>\n<p>A janela preenchida aparece da seguinte forma:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. In\u00edcio R\u00e1pido\" src=\"\/wp-content\/uploads\/2019\/12\/f524934dd1a4cb238afb6666135b360b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Agora, a cada execu\u00e7\u00e3o do n\u00f3 <strong>login<\/strong> a vari\u00e1vel din\u00e2mica <code>token<\/code> ser\u00e1 atualizada com um novo valor da resposta. E essa vari\u00e1vel ser\u00e1 armazenada no <strong>n\u00f3 Project.<\/strong> n\u00f3 e, gra\u00e7as \u00e0 heran\u00e7a, estar\u00e1 dispon\u00edvel para os filhos.<\/p>\n<p><\/p>\n<p>Para acessar vari\u00e1veis din\u00e2micas, \u00e9 necess\u00e1rio usar <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/variables\">a vari\u00e1vel incorporada<\/a><\/noindex> <code>$dynamicVar<\/code>. Por exemplo, para acessar o token salvo, \u00e9 preciso chamar <code>${$dynamicVar.token}<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"prokidyvaem-avtorizacionnyy-token-v-zaprosy\">Transmitindo o token de autoriza\u00e7\u00e3o nas solicita\u00e7\u00f5es<\/h2>\n<p><\/p>\n<p>Nos passos anteriores, obtivemos um token de autoriza\u00e7\u00e3o e tudo que precisamos fazer \u00e9 adicionar o cabe\u00e7alho <code>Authorization<\/code> com o valor <code>Bearer<\/code> em todas as solicita\u00e7\u00f5es que exigem autoriza\u00e7\u00e3o, inclusive em <strong>. Assim, um novo n\u00f3 ser\u00e1 criado na \u00e1rvore e uma aba deste n\u00f3 ser\u00e1 aberta. Definiremos os seguintes par\u00e2metros da solicita\u00e7\u00e3o:<\/strong>. Existem v\u00e1rias maneiras para isso:<\/p>\n<p><\/p>\n<ol>\n<li>Copie o token manualmente e adicione o cabe\u00e7alho de autoriza\u00e7\u00e3o nas requisi\u00e7\u00f5es desejadas. Este m\u00e9todo funciona, no entanto, sua aplica\u00e7\u00e3o est\u00e1 limitada apenas a requisi\u00e7\u00f5es do tipo &#171;fiz e joguei fora&#187;. N\u00e3o \u00e9 adequado para execu\u00e7\u00f5es m\u00faltiplas de scripts.<\/li>\n<li>Utilizar a funcionalidade <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/work-with\/authorization\">de autoriza\u00e7\u00e3o<\/a><\/noindex>.<\/li>\n<li>Usar <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/other\/default-http-headers\">cabe\u00e7alhos padr\u00e3o<\/a><\/noindex><\/li>\n<\/ol>\n<p><\/p>\n<p>A utiliza\u00e7\u00e3o do segundo m\u00e9todo parece \u00f3bvia, no entanto, no contexto deste artigo, essa abordagem... n\u00e3o \u00e9 interessante. Afinal de contas: o mecanismo de autoriza\u00e7\u00f5es \u00e9 mais ou menos familiar para voc\u00ea de outras ferramentas (embora tenhamos coisas como <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/work-with\/authorization#inherit-from-parent\">heran\u00e7a de autoriza\u00e7\u00f5es<\/a><\/noindex>) e \u00e9 pouco prov\u00e1vel que isso desperte quest\u00f5es. <\/p>\n<p><\/p>\n<p>Outra coisa s\u00e3o os cabe\u00e7alhos padr\u00e3o! Em poucas palavras, os cabe\u00e7alhos padr\u00e3o s\u00e3o aqueles herdados dos ancestrais HTTP, que s\u00e3o adicionados automaticamente \u00e0 solicita\u00e7\u00e3o, a menos que sejam explicitamente desativados. Com essa funcionalidade, podemos, por exemplo, implementar uma autoriza\u00e7\u00e3o personalizada ou simplesmente eliminar a duplica\u00e7\u00e3o em cen\u00e1rios. Vamos aplicar esse recurso para passar o token nos cabe\u00e7alhos.<\/p>\n<p><\/p>\n<p>Anteriormente, armazenamos cautelosamente o token em uma vari\u00e1vel din\u00e2mica <code>$dynamicVar.token<\/code> no n\u00edvel do n\u00f3 do Projeto. Agora, resta fazer o seguinte:<\/p>\n<p><\/p>\n<ol>\n<li>Definir o cabe\u00e7alho padr\u00e3o <code>Authorization<\/code> com o valor <code>Bearer ${$dynamicVar.token}<\/code> no n\u00edvel do n\u00f3 do Projeto. Para isso, na interface do n\u00f3 do Projeto, \u00e9 necess\u00e1rio abrir o di\u00e1logo com os cabe\u00e7alhos padr\u00e3o (bot\u00e3o <strong>Headers<\/strong> no canto superior direito) e adicionar o cabe\u00e7alho correspondente. O di\u00e1logo com os valores preenchidos ficar\u00e1 assim:<br \/>\n<img decoding=\"async\" alt=\"TestMace. In\u00edcio R\u00e1pido\" src=\"\/wp-content\/uploads\/2019\/12\/9abd888cbf96e53b633e8f0fd3389297.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>Desativar este cabe\u00e7alho na solicita\u00e7\u00e3o de login. Isso \u00e9 compreens\u00edvel: no momento do login, ainda n\u00e3o temos o token e, com essa solicita\u00e7\u00e3o, vamos exatamente estabelec\u00ea-lo. Portanto, na interface da solicita\u00e7\u00e3o de login, na aba <strong>Headers<\/strong> na \u00e1rea <strong>Inherited<\/strong> desmarcaremos a op\u00e7\u00e3o do cabe\u00e7alho Authorization. <\/li>\n<\/ol>\n<p><\/p>\n<p>Isso \u00e9 tudo. Agora o cabe\u00e7alho de autoriza\u00e7\u00e3o ser\u00e1 adicionado a todas as solicita\u00e7\u00f5es que s\u00e3o descendentes do n\u00f3 do Projeto, exceto do n\u00f3 de login. Assim, nesta etapa, j\u00e1 temos um cen\u00e1rio pronto e s\u00f3 nos resta execut\u00e1-lo. Podemos executar o cen\u00e1rio escolhendo a op\u00e7\u00e3o <strong>Run<\/strong> no menu de contexto do n\u00f3 do Projeto. <\/p>\n<p><\/p>\n<h2 id=\"proveryaem-korrektnost-sozdaniya-posta\">Verificamos a corre\u00e7\u00e3o da cria\u00e7\u00e3o da postagem<\/h2>\n<p><\/p>\n<p>Neste est\u00e1gio, nosso cen\u00e1rio consegue fazer login e, usando o token de autoriza\u00e7\u00e3o, criar uma postagem. No entanto, precisamos garantir que a nova postagem tenha o nome correto. Ou seja, em ess\u00eancia, precisamos fazer o seguinte:<\/p>\n<p><\/p>\n<ul>\n<li>Enviar uma solicita\u00e7\u00e3o para obter a postagem pelo id, <\/li>\n<li>Verificar se o nome recebido do servidor corresponde ao nome enviado durante a cria\u00e7\u00e3o da postagem<\/li>\n<\/ul>\n<p><\/p>\n<p>Vamos considerar o primeiro passo. Como o valor do id \u00e9 determinado durante a execu\u00e7\u00e3o do script, \u00e9 necess\u00e1rio criar uma vari\u00e1vel din\u00e2mica (vamos cham\u00e1-la de <code>postId<\/code>) a partir do n\u00f3 <strong>. Assim, um novo n\u00f3 ser\u00e1 criado na \u00e1rvore e uma aba deste n\u00f3 ser\u00e1 aberta. Definiremos os seguintes par\u00e2metros da solicita\u00e7\u00e3o:<\/strong> no n\u00edvel do n\u00f3 do Projeto. Como fazer isso j\u00e1 sabemos, basta consultar a se\u00e7\u00e3o <strong>Salvamos o token em uma vari\u00e1vel<\/strong>. Resta apenas criar uma solicita\u00e7\u00e3o para obter a postagem por este id. Para isso, criaremos um RequestStep <strong>get-post<\/strong> com os seguintes par\u00e2metros:<\/p>\n<p><\/p>\n<ul>\n<li>Tipo de solicita\u00e7\u00e3o: GET<\/li>\n<li>URL: ${domain}\/posts\/${$dynamicVar.postId}<\/li>\n<\/ul>\n<p><\/p>\n<p>Para implementar o segundo passo, precisamos nos familiarizar com <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\">Assertiva<\/a><\/noindex> n\u00f3. O n\u00f3 Assertiva \u2014 \u00e9 um n\u00f3 que permite escrever verifica\u00e7\u00f5es para determinadas solicita\u00e7\u00f5es. Cada n\u00f3 Assertiva pode conter v\u00e1rias afirma\u00e7\u00f5es (verifica\u00e7\u00f5es). Voc\u00ea pode ler mais sobre todos os tipos de assertivas em nosso <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\">documenta\u00e7\u00e3o<\/a><\/noindex>. Vamos usar <code>Comparar<\/code> assertiva com o operador <code>igual<\/code>. Existem v\u00e1rias maneiras de criar assertivas:<\/p>\n<p><\/p>\n<ol>\n<li>Longa. Manualmente, crie um n\u00f3 Assertiva a partir do menu de contexto do n\u00f3 RequestStep. No n\u00f3 Assertiva criado, adicione a assertiva de interesse e preencha os campos.<\/li>\n<li>R\u00e1pida. Crie um n\u00f3 Assertiva junto com a assertiva da resposta do n\u00f3 RequestStep usando o menu de contexto<\/li>\n<\/ol>\n<p><\/p>\n<p>Usaremos o segundo m\u00e9todo. Veja como isso ficar\u00e1 para nosso caso.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. In\u00edcio R\u00e1pido\" src=\"\/wp-content\/uploads\/2019\/12\/7f1d81669cb4c10db5f0afa3bf04eddf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Para quem n\u00e3o entendeu, aqui acontece o seguinte:<\/p>\n<p><\/p>\n<ol>\n<li>Fazer uma solicita\u00e7\u00e3o no n\u00f3 <strong>get-post<\/strong><\/li>\n<li>Na aba <strong>Parsed<\/strong> resposta, chame o menu de contexto e selecione <strong>Criar assertiva<\/strong> -&gt; <strong>Comparar<\/strong> -&gt; <strong>Igual<\/strong><\/li>\n<\/ol>\n<p><\/p>\n<p>Parab\u00e9ns, criamos nosso primeiro teste! F\u00e1cil, n\u00e3o \u00e9? Agora voc\u00ea pode executar o script completo e desfrutar do resultado. Resta apenas um pouco para refatorar e mover <code>o t\u00edtulo<\/code> para uma vari\u00e1vel separada. Mas deixaremos isso para voc\u00ea como tarefa de casa :)<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Conclus\u00e3o<\/h1>\n<p><\/p>\n<p>Neste guia, criamos um script completo e tamb\u00e9m fizemos uma vis\u00e3o geral de algumas funcionalidades do nosso produto. Claro, n\u00e3o utilizamos todas as funcionalidades e em pr\u00f3ximos artigos faremos uma revis\u00e3o detalhada das capacidades do TestMace. Fique de olho nas atualiza\u00e7\u00f5es!<\/p>\n<p><\/p>\n<p>P.S. Para quem est\u00e1 com pregui\u00e7a de reproduzir todos os passos, gravamos gentilmente <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/TestMace\/testmace-quick-start-project\">reposit\u00f3rio<\/a><\/noindex> o projeto do artigo. Voc\u00ea pode abri-lo usando <strong>Novo projeto<\/strong> -&gt; <strong>Abrir projeto<\/strong> e selecionar a pasta Projeto.<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458964\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041c\u044b \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443 \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0442\u0435\u043d\u0438 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0435. \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043e\u0431\u0437\u043e\u0440\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0437\u044b\u0432\u043e\u0432 (\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445), \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 bug \u0440\u0435\u043f\u043e\u0440\u0442\u043e\u0432. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u043a\u0430\u0436\u0435\u043c TestMace \u0432 \u0434\u0435\u043b\u0435 \u0438 \u0432\u044b \u043f\u043e \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0443 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0438\u0448\u043a\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-54167","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/news\/testmace-bystryj-start\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47TestMace. \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/news\/testmace-bystryj-start\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-18T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:08+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47TestMace. Come\u00e7o r\u00e1pido | ProHoster","description":"Ol\u00e1 a todos.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/news\/testmace-bystryj-start","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47TestMace. \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.","og:url":"https:\/\/prohoster.info\/pt\/blog\/news\/testmace-bystryj-start","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-18T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:08+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54167","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 10:17:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:10:34","updated":"2026-01-24 10:17:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/54167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=54167"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/54167\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=54167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=54167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=54167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}