Compartilhamento de tecnologia

Automação (segundo nível)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Pilha de tecnologia usada para automação de interface Java

Resumo da pilha de tecnologia:
①Noções básicas de Java (encapsulamento, reflexão, genéricos, jdbc)
②Análise do arquivo de configuração (propriedades)
③httpclient (enviar solicitação http)
④Fastjson e jsonpath processam dados
⑤Pontos-chave da estrutura de teste automatizado de teste
⑥relatório de teste de fascínio

A primeira categoria: solicitação http relacionada (fastjson, jsonpath, httpclient)

Preparar

Criar projeto maven

①Crie o projeto maven primeiro, newPROJECT–Maven—groupid----finish

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

②Verifique a configuração do maven novamente

Arquivo—configurações—maven
Insira a descrição da imagem aqui

Fastjson e jsonpath são usados ​​para processar dados.
O foco da estrutura de automação de testes.
relatório de teste de fascínio

1. fastjson (cenário de aplicação: análise de strings json e matrizes de strings de parâmetros de entrada)

fastjson processa strings json e matrizes json
Analise os parâmetros de entrada da string json e prepare-se para solicitações subsequentes

①Dependência

<!-https://mvnrepository.com/artifact/com.alibaba/fastjson -->
com.alibaba
Fastison-O
1.2.75

②Adicione dependências e as dependências serão geradas automaticamente

Insira a descrição da imagem aqui
Após o download, você poderá ver os pacotes de dependência gerados automaticamente.

1.1. Exemplo (analisar parâmetros de entrada de string json, parâmetros de entrada de array de string json)

1.1.1. Analisar parâmetros de entrada de string json

Por exemplo, o login requer um nome de usuário e uma senha.
{“nome de usuário”:“qzcsbj”, “senha”:“123456”}

Fonte de dados da estrutura de automação, parâmetros de entrada são todos strings json, fastjson precisa ser usado

Etapa 1: crie o nome do pacote, o nome da classe e crie o método principal

Insira a descrição da imagem aqui

Etapa 2: Defina uma variável de string, aqui está a string json que precisa ser analisada
Etapa 3: para o processamento da string json, primeiro analise-a em um objeto jsonObject e depois coloque-a no mapa
1)Primeiro crie um HashMap, chave e valor são ambos String

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

2) Analise a string. JSONObjetct.parseObject é usado aqui e o valor de retorno é do tipo JSONObject.

Class.Method, este método é estático

3) Para obter chaves, use o método jsonObjetc.keySet diretamente, ou seja, obtenha a coleção Set

Cada chave da coleção é String

4) Percorra novamente, obtenha o valor por meio da chave percorrida e, em seguida, coloque a chave e o valor no Mapa

Insira a descrição da imagem aqui

A string json definida agora foi analisada e colocada no mapa
Insira a descrição da imagem aqui

5) Verifique o conteúdo colocado no Mapa e obtenha a chave no Mapa

Instruções para colocar o conteúdo da string json no mapa
blog.csdnimg.cn/direct/ae6feeba2eae442f961df977a6c8eac1.jpeg)

1.1.2. Analisar parâmetros de entrada da matriz de string json.

A estrutura de automação envolve uma estrutura de inicialização e algumas exigem operações nos dados internos.Para operar o banco de dados, você precisa escrever sql
Aqui está uma matriz json. Na matriz, cada elemento é uma string json, que contém dados de valor-chave. O primeiro é o número sql, o sql realmente executado.

[{“sqlNo”:“1”,“sq!”:“selecione * de usuários onde nome de usuário='qzcsbj';”},.“sqlNo”:“2”,“sql”:“selecione * de usuários onde nome de usuário='test00501';”}]

Etapa 1: crie o nome do pacote, o nome da classe e crie o método principal
Etapa 2: Defina uma variável de string, aqui está a matriz de string json que precisa ser analisada
Método 1 (não aconselhável): analise a string JSONObjetct.parseArray (String text), o valor de retorno é JSONArray
1) Analise a string, JSONObjetct.parseArray é usado aqui

Insira a descrição da imagem aqui

2) Travessia direta, cada elemento é do tipo Object e impressos também são dois caracteres json.

Insira a descrição da imagem aqui

3) Imprima o valor sql na string json. Não há métodos get ou set aqui. Você só pode obter a string json, mas não o conteúdo de uma determinada chave.

Insira a descrição da imagem aqui
Este método não é aconselhável

Método 2: JSONObjetct.parseArray (String text, Class clazz), o valor de retorno é List &lt;T &gt;, o tipo de retorno é List e o elemento de retorno é HashMap

Passe dois parâmetros, o primeiro parâmetro é a String a ser analisada e o segundo parâmetro é o arquivo de bytecode.
A solução é: analisar o primeiro parâmetro String em um mapa

1) Encapsular cada elemento em um objeto hashmap. JSONObjetct.parseArray(String text, Class clazz) é usado aqui para analisar a matriz de strings.
2) Obtenha sqlNo, sql é um tipo HashMap, você pode usar o método get

Insira a descrição da imagem aqui

3) Não há valor ou tipo de chave obtido aqui. O padrão é Object. O que queremos aqui é String, que pode ser convertido com polimorfismo, e a referência da classe pai aponta para o objeto da classe filho.
4) Ou seja, obtém-se o valor correspondente a cada chave da string json no sql.

Insira a descrição da imagem aqui

5) Este método é insuficiente: as chaves na string json precisam ser exibidas aqui. Se houver muitas, será problemático.
 String sqlNo = (String)sql.get("sqlNo");
  • 1
Método 3: Usado para resolver a deficiência ⑤ do Método 2, geralmente usando encapsulamento

Encapsule o conteúdo de cada string json em um objeto l, adicione métodos get e set à classe de entidade e diretamente object.get para obter o conteúdo do sql. Esse tipo de prompt de código também é mais conveniente de escrever. A automação também faz referência a esse encapsulamento. Isso é encapsular o sql em um objeto,
Encapsule as propriedades como privadas (sqlNo, sql), forneça métodos get e set, métodos de construção parametrizados e métodos de construção sem parâmetros devem ser adicionados, e a reflexão ajustará os métodos de construção sem parâmetros. Se você escrever apenas parâmetros com parâmetros e não escrever construtores sem parâmetros, um erro será definitivamente relatado. Para imprimir o resultado da string, você precisa adicionar o método toString(), caso contrário, o endereço do objeto será impresso. a classe de entidade acima foi escrita.

Otimize novamente
Se o elemento for encapsulado em um objeto, ele será alterado para uma classe escrita por você mesmo.class
Isso é sql.class

1) Defina um sql javabean: a classe sql possui atributos sqlNo, sql e, em seguida, adicione métodos get, set, métodos de construção e métodos toString()

Insira a descrição da imagem aquiInsira a descrição da imagem aqui

2) Encapsular cada string json em um objeto sql (Test02), JSONObjetct.parseArray (String text, Class clazz), o valor de retorno é List &lt;T &gt;, o tipo de retorno é List e o elemento de retorno é um objeto sql

O segundo método acima é encapsular cada elemento em um objeto hashMap, e aqui é encapsular cada elemento em um objeto sql.
Insira a descrição da imagem aqui

3) Travessia

Obtenha atributos do objeto diretamente usando o método get

Insira a descrição da imagem aqui
Este método é mais conveniente e não requer a obtenção de muitas chaves.

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>mavenProject</groupId>
    <artifactId>mavenProject</artifactId>
    <version>1.0-SNAPSHOT</version>


    <dependencies>


        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>

    </dependencies>

</project>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

classe SQL

package com.zhou.demo;

public class Sql {
    private String sql;
    private String sqlNo;

    public Sql() {
    }

    public Sql(String sql) {
        this.sql = sql;
    }


    public Sql(String sql, String sqlNo) {
        this.sql = sql;
        this.sqlNo = sqlNo;
    }

    public void setSql(String sql) {
        this.sql = sql;
    }

    public void setSqlNo(String sqlNo) {
        this.sqlNo = sqlNo;
    }

    public String getSql() {
        return sql;
    }

    public String getSqlNo() {
        return sqlNo;
    }

    @Override
    public String toString() {
        return "sql{" +
                "sql='" + sql + ''' +
                ", sqlNo='" + sqlNo + ''' +
                '}';
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
package com.zhou.demo;

import com.alibaba.fastjson.JSONObject;

import java.util.HashMap;
import java.util.Set;
//需求:将json字符串转化成map,字符串:{"username":"qzcsbj", "password":"123456"}

public class Test {
    public static void main(String[] args) {
        String parameters="{"username":"qzcsbj", "password":"123456"}";
        //先解析为JSONObject,然后转换为map
        HashMap<String, String> map = new HashMap<String, String>();

        // 解析json格式字符串为JSONObject(JSONObject是Map接口的一个实现类,和HashMap平级)

        JSONObject jsonObject = JSONObject.parseObject(parameters);
        // 将JSO\\\ NObject转换为map,先获取keys,先将keyset获取,集合里的每一个key都是String,通过遍历的key获取value,再放到map中
        Set<String> keys= jsonObject.keySet();
        for (String key:keys) {
            map.put(key,jsonObject.getString(key));

        }

        //验证,获取Map中的key
        Set<String> keys2 = map.keySet();
        for (String key :keys2) {
            System.out.println(key+"="+map.get(key));
        }

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
package com.zhou.demo;

import com.alibaba.fastjson.JSONObject;

import java.util.HashMap;
import java.util.List;


//JSON数组,每个元素是json字符串
public class Test02 {

    public static void main(String[] args) {
        String initsql="[n" + "{"sqlNo":"1","sql":"select * from  users where  username='qzcsbj';"},n" +
                "{"sqlNo":"2","sql":"select * from  users where  username='tester00501';"}n" + "n" + "]";
  /*   //元素解析为Map
        List<HashMap> sqls = JSONObject.parseArray(initsql,HashMap.class);
        for (HashMap sql:sqls) {
            System.out.println(sql);
            String sqlNo = (String)sql.get("sqlNo");
            String sql_ = (String)sql.get("sql");
            System.out.println("sqlNo-"+sqlNo+",sql_-"+sql_);
        }*/



  //元素封装到对象
        List<Sql> sqls = JSONObject.parseArray(initsql, Sql.class);

        for (Sql sql:sqls) {
            String sqlNo = sql.getSqlNo();
            String sql_ = sql.getSql();
            System.out.println("sqlNo-"+",sql_"+sql_);

        }

    }


    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

2. jsonpath (cenário de aplicação: análise dos dados json de resposta, como obtenção de campos de asserção, como o valor associado a ser obtido)

Porque atualmente o projeto está separado do front e back-end.
O back-end geralmente retorna strings json
Se você quiser fazer asserções, geralmente analisa JSON. Após a análise, você geralmente faz asserções apenas em campos-chave.
As asserções geralmente são código + campos comerciais principais
É uma string json, então você precisa usar jsonpath

①Dependência

②Adicione dependências e as dependências serão geradas automaticamente

blog.csdnimg.cn/5bdd9defd7db47b7a5934f79f9fd0ceb.png)
Insira a descrição da imagem aqui
Precisa confirmar se as dependências foram baixadas

2.1. Exemplo (obter os principais campos de negócios a serem declarados nos dados de resposta)

2.1.1. Obtenha os principais campos de negócios a serem declarados nos dados de resposta.
Etapa 1: crie um nome de classe, crie um método principal e defina uma variável de string

Esta variável aqui é o campo de resposta retornado após login bem-sucedido.
blog.csdnimg.cn/a20e89ee243c43f69a1b4e1c3a97b89b.png)

Etapa 2: para fazer afirmações, você precisa obter o conteúdo interno. Configuration.defaultConfiguration.jsonProvider().parse() é usado e o valor de retorno é do tipo Object.

Insira a descrição da imagem aqui
Passe a resposta do campo definido

Etapa 3: Use o método JsonPath.read (Object json, String jsonpath, predicate...filters), o tipo de retorno é Object type

Insira a descrição da imagem aqui

Automação de interface para processamento de dados dependentes
Obtenha o token no início desta linha, que também é $.
Após obtê-la, se for uma variável global, pode ser salva na variável global.
Se você deseja obter a afirmação e depois obtê-la
Faça outra afirmação

3. httpclient (enviar solicitações escrevendo código)

No framework de automação, as solicitações são enviadas por meio da escrita de código, o que significa que é necessário usar httpclient, uma biblioteca fornecida por Java para interagir com o servidor.

①Dependência

②Adicione dependências e as dependências serão geradas automaticamente

Insira a descrição da imagem aqui

3.1. Exemplo (obter solicitação, postar solicitação)

3.1.1. obter solicitação
Trabalho de preparação: verifique se a interface de solicitação do documento de interface swagger foi passada. Observe o documento de interface para determinar a solicitação de obtenção findById e o ID que precisa ser passado.

Precisa passar o ID
Insira a descrição da imagem aqui
Na biblioteca, podemos ver que o id é 259
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Etapa 1: crie um nome de classe Test04 e crie um método principal
Etapa 2: Definir o URL da variável de endereço da interface e solicitar parâmetros de parâmetros

Insira a descrição da imagem aqui
No arquivo de dados, todos os parâmetros são concatenados em strings json, então id=259 também é concatenado em strings json.

Aqui, coloque 259 entre aspas duplas para escapar automaticamente.
Insira a descrição da imagem aqui

Etapa 3: analise a string json, use o método JSONObject.parseObject(), o tipo de retorno é o tipo JSONObject

Insira a descrição da imagem aqui

Etapa 4: definir um método estático getRequest (String url, JSONObject jsonobject)

Insira a descrição da imagem aqui

Etapa 5: Em seguida, chame getRquest() no método principal. O valor de retorno é do tipo String.

Insira a descrição da imagem aqui

Etapa seis: melhorar a lógica do método getRequest()

obter solicitação: http://47.108.153.47:18089/qzcsbj/user/findById?id=259
?Unir parâmetros diretamente mais tarde
Existem também vários valores a serem considerados: http://47.108.153.47:18089/qzcsbj/user/findById?id=259&name=jack

1) Obtenha a chave por meio de jsonobetct.keySet() e obtenha uma coleção Set

Insira a descrição da imagem aqui

2) Percorra a coleção Set e obtenha o valor-chave

Insira a descrição da imagem aqui

3) Você também precisa considerar o caso de múltiplos valores, ou seja, definir flag = true, escrever true primeiro e ser o primeiro

Insira a descrição da imagem aqui

4) Caso contrário, escreva o seguinte

Insira a descrição da imagem aqui

5) Defina uma string vazia res e retorne res

Insira a descrição da imagem aqui
O acima irá concatenar o parâmetro url e os parâmetros para enviar a solicitação get. Após a criação, você precisa criar um objeto de solicitação get.

6) Crie o objeto de solicitação httpget, novo HttpGet (org.apache.http.client.methods) selecione este construtor

Passe a URL
Aqui você obtém o objeto de solicitação httpget
Insira a descrição da imagem aqui

7) Crie um cliente httpclient, usando o método HttpClients.createDefault(), o tipo de retorno é CloseableHttpClient

Insira a descrição da imagem aqui

A classe abstrata CloseableHttpClient implementa a interface HttpClient, Closeable
Insira a descrição da imagem aqui
O polimorfismo pode ser usado e o objeto da subclasse aponta para a referência da classe pai (a interface implementada pela classe pai)
Insira a descrição da imagem aqui

8) Execute o método request execute(), passe o objeto httpget e, em seguida, lance uma exceção

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

9) Após obter o objeto HttpResponse, você pode chamar seu método getEntity para obter o objeto de resposta Httpentity. Após obter o método EntityUtils.toString, o tipo de retorno é do tipo String.

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
O resultado res é definido acima
Agora mesmo
Insira a descrição da imagem aqui

10) Corra

Insira a descrição da imagem aqui

3.1.2. Solicitação de postagem
Trabalho de preparação: verifique se a interface de solicitação do documento da interface swagger foi aprovada

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Insira a descrição da imagem aqui

Etapa 1: crie um nome de classe Test05 e crie um método principal

http://47.108.153.47:18089/qzcsbj/usuário/login
url, parâmetros de parâmetros de solicitação, cabeçalhos de solicitação

Insira a descrição da imagem aqui

Etapa 2: definir o URL da variável de endereço da interface, solicitar parâmetros de parâmetros e solicitar cabeçalhos

Esses parâmetros são obtidos de arquivos de dados na estrutura de automação.
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Etapa 3: analise os parágrafos e cabeçalhos da string json usando o método JSONObject.parseObject().
Etapa 4: Defina um método para enviar solicitações de postagem, melhore a lógica e passe cabeçalho, URL e parâmetros.

Definir resolução
retornar res

Insira a descrição da imagem aqui

1) Obtenha a chave por meio de jsonobetct.keySet(), obtenha uma coleção Set, percorra a chave para obter a chave

Insira a descrição da imagem aqui

2) Se você deseja chamar o método addHeader() por meio do objeto httppost e o tipo de retorno é HttPost, você precisa primeiro criar um objeto httpppost.

URL de passagem
Insira a descrição da imagem aqui

3) Chame o método addHeader() através do objeto httppost

Insira a descrição da imagem aqui

4) httpEntity é necessário, mas httpEntity é uma interface A interface não pode instanciar objetos. Você precisa implementar a classe StringEntity para implementar a interface httpEntity.

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Se você observar o construtor, poderá passar String e especificar o segundo construtor.

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
O acima é a solicitação de postagem enviada: o cabeçalho da solicitação e os dados a serem enviados estão todos definidos.

5) Crie um cliente httpclient, usando o método HttpClients.createDefault(), o tipo de retorno é CloseableHttpClient

O objeto da subclasse aponta para a referência da classe pai
Insira a descrição da imagem aqui

6) Envie uma solicitação, execute o método execute() da solicitação, passe o objeto httppost e, em seguida, lance uma exceção.

Insira a descrição da imagem aqui

7)) Após obter o objeto HttpResponse, você pode chamar seu método getEntity para obter o objeto de resposta Httpentity. Após obter o método EntityUtils.toString, o tipo de retorno é do tipo String.

Insira a descrição da imagem aqui

8) Chame o método recém-definido no método principal

Insira a descrição da imagem aqui

9) Corra

Insira a descrição da imagem aqui