Condivisione della tecnologia

Automazione (secondo livello)

2024-07-12

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

Stack tecnologico utilizzato per l'automazione dell'interfaccia Java

Riepilogo dello stack tecnologico:
①Nozioni di base su Java (incapsulamento, riflessione, generici, jdbc)
②Analisi del file di configurazione (proprietà)
③httpclient (invia richiesta http)
④Fastjson e jsonpath elaborano i dati
⑤Punti chiave del framework di test automatizzato
⑥rapporto di prova di attrazione

La prima categoria: relativa alla richiesta http (fastjson, jsonpath, httpclient)

Preparare

Crea un progetto esperto

①Crea prima il progetto Maven, newPROJECT–Maven—groupid----finish

Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine

②Controlla nuovamente la configurazione di Maven

File—impostazioni—maven
Inserisci qui la descrizione dell'immagine

Fastjson e jsonpath sono entrambi utilizzati per elaborare i dati.
Il focus del testing del framework di automazione.
rapporto di prova di attrazione

1. fastjson (scenario applicativo: analisi di stringhe json e array di stringhe di parametri di input)

fastjson elabora stringhe json e array json
Analizza i parametri di input della stringa JSON e preparati per le richieste successive

①Dipendenza

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

②Aggiungi dipendenze e le dipendenze verranno generate automaticamente

Inserisci qui la descrizione dell'immagine
Dopo il download, puoi vedere i pacchetti di dipendenze generati automaticamente.

1.1 Esempio (analisi dei parametri di input della stringa json, parametri di input dell'array di stringhe json)

1.1.1. Analizzare i parametri di input della stringa JSON

Ad esempio, l'accesso richiede un nome utente e una password.
{“nome utente”:“qzcsbj”, “password”:“123456”}

Origine dati del framework di automazione, i parametri di input sono tutte stringhe JSON, è necessario utilizzare fastjson

Passaggio 1: crea il nome del pacchetto, il nome della classe e crea il metodo principale

Inserisci qui la descrizione dell'immagine

Passaggio 2: definire una variabile stringa, ecco la stringa json che deve essere analizzata
Passaggio 3: per elaborare la stringa json, prima analizzarla in un oggetto jsonObject e quindi inserirla nella mappa
1)Per prima cosa crea una HashMap, chiave e valore sono entrambi String

Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine

2) Qui viene utilizzato JSONObjetct.parseObject e il valore restituito è di tipo JSONObject.

Class.Method, questo metodo è statico

3) Per ottenere le chiavi, utilizzare direttamente il metodo jsonObjetc.keySet, ovvero ottenere la raccolta Set

Ogni chiave nella raccolta è String

4) Attraversa nuovamente, ottieni il valore tramite la chiave attraversata, quindi inserisci la chiave e il valore nella mappa

Inserisci qui la descrizione dell'immagine

La stringa json ora definita è stata analizzata e inserita nella mappa
Inserisci qui la descrizione dell'immagine

5) Verificare il contenuto inserito nella Mappa e ottenere la chiave nella Mappa

Istruzioni per inserire il contenuto della stringa json nella mappa
blog.csdnimg.cn/direct/ae6feeba2eae442f961df977a6c8eac1.jpeg)

1.1.2 Analizzare i parametri di input dell'array di stringhe json

Il framework di automazione prevede un framework di inizializzazione e alcuni richiedono operazioni sui dati all'interno.Per far funzionare il database, è necessario scrivere sql
Ecco un array json. Nell'array, ogni elemento è una stringa json, che contiene i dati del valore chiave. Il primo è il numero sql, l'effettivo sql eseguito.

[{“sqlNo”:“1”,“sq!”:“select * from users where username='qzcsbj';”},.“sqlNo”:“2”,“sql”:“select * from users where username='test00501';”}]

Passaggio 1: crea il nome del pacchetto, il nome della classe e crea il metodo principale
Passaggio 2: definire una variabile stringa, ecco l'array di stringhe json che deve essere analizzato
Metodo 1 (non consigliabile): analizza la stringa JSONObjetct.parseArray(String text), il valore restituito è JSONArray
1) Analizza la stringa, qui viene utilizzato JSONObjetct.parseArray

Inserisci qui la descrizione dell'immagine

2) Attraversamento diretto, ogni elemento è di tipo Object, e vengono stampati anche due caratteri json.

Inserisci qui la descrizione dell'immagine

3) Stampa il valore sql nella stringa json Non ci sono metodi get o set qui Puoi ottenere solo la stringa json, ma non il contenuto di una determinata chiave.

Inserisci qui la descrizione dell'immagine
Questo metodo non è consigliabile

Metodo 2: JSONObjetct.parseArray(String text, Class clazz), il valore restituito è List &lt; T &gt;, il tipo restituito è List e l'elemento restituito è HashMap

Passare due parametri, il primo parametro è la stringa da analizzare e il secondo parametro è il file bytecode.
La soluzione è: analizzare la prima stringa di parametri in una mappa

1) Incapsula ogni elemento in un oggetto hashmap. JSONObjetct.parseArray(String text, Class clazz) viene utilizzato qui per analizzare l'array di stringhe.
2) Ottieni sqlNo, sql è un tipo HashMap, puoi utilizzare il metodo get

Inserisci qui la descrizione dell'immagine

3) Non vi è alcun valore chiave o tipo ottenuto qui. Il valore predefinito è Object. Ciò che vogliamo qui è String, che può essere forzato per la conversione qui e il riferimento alla classe genitore punta all'oggetto della classe figlio.
4) Cioè si ottiene il valore corrispondente ad ogni chiave della stringa json in sql.

Inserisci qui la descrizione dell'immagine

5) Questo metodo non è sufficiente: le chiavi nella stringa json devono essere visualizzate qui. Se ce ne sono molte, sarà problematico.
 String sqlNo = (String)sql.get("sqlNo");
  • 1
Metodo 3: utilizzato per risolvere il ⑤ difetto del Metodo 2, generalmente utilizzando l'incapsulamento

Incapsula il contenuto di ogni stringa json in un oggetto l, aggiungi i metodi get e set alla classe di entità, direttamente object.get, e ottieni il contenuto di sql. Questo tipo di prompt del codice è anche più comodo da scrivere. Anche l'automazione fa riferimento a questo incapsulamento. Cioè incapsulare SQL in un oggetto,
Incapsulare le proprietà come private (sqlNo, sql), fornire metodi get e set, metodi di costruzione con parametri e metodi di costruzione senza parametri da aggiungere e la riflessione regolerà i metodi di costruzione senza parametri. Se si scrive solo il costruttore senza parametri senza scrivere il costruttore senza parametri, verrà sicuramente segnalato un errore. Per stampare il risultato della stringa, è necessario aggiungere il metodo toString(), altrimenti verrà stampato l'indirizzo dell'oggetto. La classe di entità sopra è stata scritta.

Ottimizzalo di nuovo
Se l'elemento è incapsulato in un oggetto, viene modificato in una classe scritta da te.class
Questo è sql.class

1) Definire un javabean sql: la classe sql ha gli attributi sqlNo, sql, quindi aggiungere i metodi get, set, metodi di costruzione e metodi toString()

Inserisci qui la descrizione dell'immagineInserisci qui la descrizione dell'immagine

2) Incapsulare ogni stringa json in un oggetto sql (Test02), JSONObjetct.parseArray(String text, Class clazz), il valore restituito è List &lt; T &gt;, il tipo restituito è List e l'elemento restituito è un oggetto sql

Il secondo metodo sopra riportato consiste nell'incapsulare ciascun elemento in un oggetto hashMap, e qui è incapsulare ciascun elemento in un oggetto sql.
Inserisci qui la descrizione dell'immagine

3) Traversata

Ottieni gli attributi dall'oggetto direttamente utilizzando il metodo get

Inserisci qui la descrizione dell'immagine
Questo metodo è più conveniente e non richiede di ottenere molte chiavi.

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 (scenario applicativo: analisi dei dati json della risposta, come ottenere campi di asserzione, come il valore associato da ottenere)

Perché attualmente il progetto è separato dalle estremità anteriore e posteriore.
Il backend generalmente restituisce stringhe json
Se vuoi fare asserzioni, di solito analizzi json Dopo l'analisi, di solito fai asserzioni solo sui campi chiave.
Le asserzioni sono generalmente codice + campi aziendali chiave
È una stringa json, quindi è necessario utilizzare jsonpath

①Dipendenza

②Aggiungi dipendenze e le dipendenze verranno generate automaticamente

blog.csdnimg.cn/5bdd9defd7db47b7a5934f79f9fd0ceb.png)
Inserisci qui la descrizione dell'immagine
È necessario verificare se le dipendenze sono state scaricate

2.1 Esempio (ottenere i campi aziendali chiave da affermare nei dati di risposta)

2.1.1 Ottenere i campi aziendali chiave da affermare nei dati di risposta
Passaggio 1: crea un nome di classe, crea un metodo principale e definisci una variabile stringa

Questa variabile qui è il campo di risposta restituito dopo l'accesso riuscito.
blog.csdnimg.cn/a20e89ee243c43f69a1b4e1c3a97b89b.png)

Passaggio 2: per effettuare asserzioni, è necessario ottenere il contenuto all'interno. Viene utilizzato Configuration.defaultConfiguration.jsonProvider().parse() e il valore restituito è di tipo Object.

Inserisci qui la descrizione dell'immagine
Passa nella risposta del campo definita

Passaggio 3: utilizzare il metodo JsonPath.read(Object json, String jsonpath, predicate...filters), il tipo restituito è Object type

Inserisci qui la descrizione dell'immagine

Automazione dell'interfaccia per l'elaborazione dei dati dipendenti
Prendi il token dalla parte anteriore di questa riga, che è anche $.
Dopo averla ottenuta, se si tratta di una variabile globale, è possibile salvarla nella variabile globale.
Se vuoi ottenere l'affermazione e poi ottenerla
Fai un'altra affermazione

3. httpclient (invia richieste scrivendo codice)

Nel framework di automazione, le richieste vengono inviate scrivendo codice, il che significa che è necessario utilizzare httpclient, una libreria fornita da Java per interagire con il server.

①Dipendenza

②Aggiungi dipendenze e le dipendenze verranno generate automaticamente

Inserisci qui la descrizione dell'immagine

3.1 Esempio (ricevi richiesta, invia richiesta)

3.1.1. ottenere la richiesta
Lavoro di preparazione: verificare se l'interfaccia di richiesta del documento di interfaccia spavalderia è stata passata. Osservare il documento di interfaccia per determinare la richiesta di acquisizione findById e l'ID che deve essere passato.

È necessario passare l'ID
Inserisci qui la descrizione dell'immagine
Dalla libreria, possiamo vedere che l'id è 259
Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine

Passaggio 1: crea un nome di classe Test04 e crea un metodo principale
Passo 2: Definire l'indirizzo variabile url dell'interfaccia e richiedere i parametri dei parametri

Inserisci qui la descrizione dell'immagine
Nel file di dati, i parametri sono tutti concatenati in stringhe json, quindi anche id=259 è concatenato in stringhe json.

Qui, inserisci 259 tra virgolette doppie per evitarlo automaticamente.
Inserisci qui la descrizione dell'immagine

Passaggio 3: analizzare la stringa json, utilizzare il metodo JSONObject.parseObject(), il tipo restituito è il tipo JSONObject

Inserisci qui la descrizione dell'immagine

Passaggio 4: definire un metodo statico getRequest(String url, JSONObject jsonobject)

Inserisci qui la descrizione dell'immagine

Passaggio 5: quindi chiamare getRquest() nel metodo principale. Il valore restituito è di tipo String.

Inserisci qui la descrizione dell'immagine

Passaggio sei: migliorare la logica del metodo getRequest()

ottieni richiesta: http://47.108.153.47:18089/qzcsbj/user/findById?id=259
?Unisci direttamente i parametri in un secondo momento
Ci sono anche più valori da considerare: http://47.108.153.47:18089/qzcsbj/user/findById?id=259&name=jack

1) Ottieni la chiave tramite jsonobetct.keySet() e ottieni una raccolta Set

Inserisci qui la descrizione dell'immagine

2) Attraversa la raccolta Set e ottieni il valore chiave

Inserisci qui la descrizione dell'immagine

3) È necessario considerare anche il caso di valori multipli, ovvero definire flag = true, scrivere prima true ed essere il primo

Inserisci qui la descrizione dell'immagine

4) Altrimenti scrivi quanto segue

Inserisci qui la descrizione dell'immagine

5) Definire una stringa vuota res e restituire res

Inserisci qui la descrizione dell'immagine
Quanto sopra concatenerà l'URL del parametro e i parametri per l'invio della richiesta get. Dopo la creazione, è necessario creare un oggetto richiesta get.

6) Crea un oggetto richiesta httpget, nuovo HttpGet (org.apache.http.client.methods) seleziona questo costruttore

Passa l'URL
Qui ottieni l'oggetto della richiesta httpget
Inserisci qui la descrizione dell'immagine

7) Creare un client httpclient, utilizzando il metodo HttpClients.createDefault(), il tipo restituito è CloseableHttpClient

Inserisci qui la descrizione dell'immagine

La classe astratta CloseableHttpClient implementa l'interfaccia HttpClient, Closeable
Inserisci qui la descrizione dell'immagine
È possibile utilizzare il polimorfismo e l'oggetto della sottoclasse punta al riferimento della classe genitore (l'interfaccia implementata dalla classe genitore)
Inserisci qui la descrizione dell'immagine

8) Esegui il metodo requestexegue(), passa l'oggetto httpget e quindi genera un'eccezione

Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine

9) Dopo aver ottenuto l'oggetto HttpResponse, è possibile chiamare il suo metodo getEntity per ottenere l'oggetto risposta Httpentity. Dopo aver ottenuto il metodo EntityUtils.toString, il tipo restituito è di tipo String.

Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine
Il risultato res è definito sopra
Proprio adesso
Inserisci qui la descrizione dell'immagine

10) Correre

Inserisci qui la descrizione dell'immagine

3.1.2. Pubblica richiesta
Lavoro di preparazione: verificare se l'interfaccia di richiesta del documento di interfaccia spavalderia è stata passata

Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine

Inserisci qui la descrizione dell'immagine

Passaggio 1: crea un nome di classe Test05 e crea un metodo principale

http://47.108.153.47:18089/qzcsbj/utente/accesso
URL, parametri dei parametri della richiesta, intestazioni della richiesta

Inserisci qui la descrizione dell'immagine

Passaggio 2: definire l'URL della variabile dell'indirizzo dell'interfaccia, i parametri dei parametri della richiesta e le intestazioni della richiesta

Questi parametri sono ottenuti da file di dati nel framework di automazione.
Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine

Passaggio 3: analizzare la stringa json para e le intestazioni utilizzando il metodo JSONObject.parseObject(). Il valore restituito è di tipo JSONObject.
Passaggio 4: Definisci un metodo per inviare richieste di post, migliorare la logica e passare intestazione, URL e parametri.

Definire ris
ritorno ris

Inserisci qui la descrizione dell'immagine

1) Ottieni la chiave tramite jsonobetct.keySet(), ottieni una raccolta Set e attraversa la chiave per ottenere la chiave

Inserisci qui la descrizione dell'immagine

2) Se vuoi chiamare il metodo addHeader() tramite l'oggetto httppost e il tipo restituito è HttPost, devi prima creare un oggetto httpppost.

Passa l'URL
Inserisci qui la descrizione dell'immagine

3) Chiama il metodo addHeader() tramite l'oggetto httppost

Inserisci qui la descrizione dell'immagine

4) httpEntity è obbligatorio, ma httpEntity è un'interfaccia L'interfaccia non può istanziare oggetti È necessario implementare la classe StringEntity per implementare l'interfaccia httpEntity.

Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine
Se guardi il costruttore, puoi passare String e specificare il secondo costruttore.

Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine
Quella sopra è la richiesta post inviata: l'intestazione della richiesta e i dati da inviare sono tutti definiti.

5) Creare un client httpclient, utilizzando il metodo HttpClients.createDefault(), il tipo restituito è CloseableHttpClient

L'oggetto sottoclasse punta al riferimento alla classe genitore
Inserisci qui la descrizione dell'immagine

6) Invia una richiesta, esegui il metodo requestexegue(), passa l'oggetto httppost e quindi genera un'eccezione.

Inserisci qui la descrizione dell'immagine

7)) Dopo aver ottenuto l'oggetto HttpResponse, è possibile chiamare il suo metodo getEntity per ottenere l'oggetto di risposta Httpentity. Dopo aver ottenuto il metodo EntityUtils.toString, il tipo restituito è di tipo String

Inserisci qui la descrizione dell'immagine

8) Chiamare il metodo appena definito nel metodo main

Inserisci qui la descrizione dell'immagine

9) Corri

Inserisci qui la descrizione dell'immagine