Teknologian jakaminen

Automaatio (toinen taso)

2024-07-12

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

Java-rajapinnan automatisointiin käytetty teknologiapino

Teknologiapinon yhteenveto:
①Javan perusteet (kapselointi, heijastus, yleiset ominaisuudet, jdbc)
②Asetustiedoston analyysi (ominaisuudet)
③http-asiakas (lähetä http-pyyntö)
④Fastjson ja jsonpath käsittelevät tietoja
⑤ Automaattisen testauskehyksen testauksen pääkohdat
⑥ houkutteleva testiraportti

Ensimmäinen luokka: http-pyyntöön liittyvä (fastjson, jsonpath, httpclient)

Valmistella

Luo Maven-projekti

①Luo ensin Maven-projekti, uusi PROJECT-Maven-groupid----viimeistely

Lisää kuvan kuvaus tähän
Lisää kuvan kuvaus tähän

②Tarkista maven-kokoonpano uudelleen

Tiedosto—asetukset—maven
Lisää kuvan kuvaus tähän

Fastjsonia ja jsonpathia käytetään molempia tietojen käsittelemiseen.
Automaatiokehyksen testauksen painopiste.
houkutteleva testiraportti

1. fastjson (sovellusskenaario: json-merkkijonojen ja syöttöparametrien merkkijonotaulukoiden jäsentäminen)

fastjson käsittelee json-merkkijonoja ja json-taulukoita
Jäsennä json-merkkijonon syöttöparametrit ja valmistaudu myöhempiä pyyntöjä varten

① Riippuvuus

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

②Lisää riippuvuuksia ja riippuvuudet luodaan automaattisesti

Lisää kuvan kuvaus tähän
Lataamisen jälkeen näet automaattisesti luodut riippuvuuspaketit.

1.1 Esimerkki (jäsennys json-merkkijonon syöttöparametrit, json-merkkijonotaulukon syöttöparametrit)

1.1.1. Jäsennä json-merkkijonon syöttöparametrit

Esimerkiksi sisäänkirjautuminen vaatii käyttäjätunnuksen ja salasanan.
{"käyttäjänimi":"qzcsbj","salasana":"123456"}

Automaatiokehyksen tietolähde, syöttöparametrit ovat kaikki json-merkkijonoja, fastjsonia on käytettävä

Vaihe 1: Luo paketin nimi, luokan nimi ja luo päämenetelmä

Lisää kuvan kuvaus tähän

Vaihe 2: Määritä merkkijonomuuttuja, tässä on json-merkkijono, joka on jäsennettävä
Vaihe 3: Jos haluat käsitellä json-merkkijonoa, jäsennä se ensin jsonObject-objektiksi ja laita se sitten karttaan
1)Luo ensin HashMap, avain ja arvo ovat molemmat merkkijono

Lisää kuvan kuvaus tähän
Lisää kuvan kuvaus tähän

2) Jäsennä merkkijonoa JSONObjetct.parseObject, ja palautusarvo on JSONObject-tyyppi.

Class.Method, tämä menetelmä on staattinen

3) Saadaksesi avaimet, käytä suoraan jsonObjetc.keySet-menetelmää, eli hanki Set-kokoelma

Jokainen kokoelman avain on merkkijono

4) Kulje uudelleen, hanki arvo kuljetetun avaimen kautta ja lisää sitten avain ja arvo karttaan

Lisää kuvan kuvaus tähän

Nyt määritetty json-merkkijono on jäsennetty ja sijoitettu karttaan
Lisää kuvan kuvaus tähän

5) Tarkista karttaan sijoitettu sisältö ja hanki avain Karttaan

Ohjeet json-merkkijonon sisällön lisäämiseen karttaan
blog.csdnimg.cn/direct/ae6feeba2eae442f961df977a6c8eac1.jpeg)

1.1.2. Jäsennä json-merkkijonotaulukon syöttöparametrit

Automaatiokehys sisältää alustuskehyksen, ja jotkut vaativat toimintoja sisällä oleville tiedoille.Käyttääksesi tietokantaa sinun on kirjoitettava sql
Tässä on json-taulukko Joukossa jokainen elementti on json-merkkijono, joka sisältää avainarvotiedot. Ensimmäinen on sql-numero, todellinen suoritettu sql.

[{"sqlNo":"1","sq!":"select * käyttäjistä, joissa käyttäjätunnus='qzcsbj';"},."sqlNo":"2","sql":"select * käyttäjistä, joissa käyttäjänimi ='test00501';”}]

Vaihe 1: Luo paketin nimi, luokan nimi ja luo päämenetelmä
Vaihe 2: Määritä merkkijonomuuttuja, tässä on json-merkkijono, joka on jäsennettävä
Tapa 1 (ei suositeltavaa): Jäsennä merkkijono JSONObjetct.parseArray(String text), palautusarvo on JSONArray
1) Jäsennä merkkijono, tässä käytetään JSONObjetct.parseArraya

Lisää kuvan kuvaus tähän

2) Suora läpikulku, jokainen elementti on tyyppiä Object, ja tulostettuna on myös kaksi json-merkkiä.

Lisää kuvan kuvaus tähän

3) Tulosta sql-arvo json-merkkijonoon. Tässä ei ole get-tai set-menetelmiä. Voit saada vain json-merkkijonon, mutta ei tietyn avaimen sisältöä.

Lisää kuvan kuvaus tähän
Tämä menetelmä ei ole suositeltavaa

Tapa 2: JSONObjetct.parseArray(String text, Class clazz), palautusarvo on List &lt; T &gt;, palautustyyppi on List ja palautuselementti on HashMap

Anna kaksi parametria, ensimmäinen parametri on jäsennettävä merkkijono ja toinen parametri on tavukooditiedosto.
Ratkaisu on: jäsennä ensimmäinen parametrimerkkijono kartaksi

1) Kapseloi jokainen elementti hashmap-objektiin JSONObjetct.parseArray(String text, Class clazz) käytetään tässä jäsentämään merkkijono.
2) Hanki sqlNo, sql on HashMap-tyyppi, voit käyttää get-menetelmää

Lisää kuvan kuvaus tähän

3) Tässä ei ole saatu avainarvoa tai -tyyppiä. Haluamme tässä on merkkijono, joka voidaan pakottaa muuttamaan, ja pääluokan referenssi viittaa aliluokkaan.
4) Eli saadaan arvo, joka vastaa kutakin json-merkkijonon avainta sql:ssä.

Lisää kuvan kuvaus tähän

5) Tämä menetelmä on riittämätön: json-merkkijonon avaimet on näytettävä tässä.
 String sqlNo = (String)sql.get("sqlNo");
  • 1
Menetelmä 3: Käytetään menetelmän 2 puutteen ⑤ ratkaisemiseen, yleensä käyttämällä kapselointia

Kapseloi jokaisen json-merkkijonon sisältö objektiin l, lisää get- ja set-menetelmät entiteettiluokkaan ja suoraan object.get saadaksesi sql:n sisällön. Tällainen koodikehote on myös helpompi kirjoittaa. Automaatio viittaa myös tähän kapselointiin. Eli sql:n kapseloiminen objektiin,
Kapseloi ominaisuudet yksityisiksi (sqlNo, sql), anna get and set -menetelmät, parametroidut rakennusmenetelmät ja parametrittomat rakennusmenetelmät on lisättävä, ja reflektio säätää parametrittömiä rakennusmenetelmiä. Jos kirjoitat vain parametreja, etkä kirjoita parametrittömiä konstruktoreita, merkkijonotuloksen tulostamiseksi on lisättävä toString()-metodi, muuten objektin osoite tulostuu edellä oleva entiteettiluokka on kirjoitettu.

Optimoi se uudelleen
Jos elementti on kapseloitu objektiin, se muutetaan itse.luokka kirjoittamaksi luokkaksi
Se on sql.class

1) Määrittele sql javabean: sql-luokassa on attribuutit sqlNo, sql ja lisää sitten get, set menetelmät, rakennusmenetelmät ja toString()-metodit.

Lisää kuvan kuvaus tähänLisää kuvan kuvaus tähän

2) Kapseloi jokainen json-merkkijono sql-objektiin (Test02), JSONObjetct.parseArray(String text, Class clazz), palautusarvo on List &lt; T &gt;, palautustyyppi on List ja paluuelementti on sql-objekti.

Toinen yllä oleva menetelmä on kapseloida jokainen elementti hashMap-objektiin, ja tässä on kapseloida jokainen elementti sql-objektiksi.
Lisää kuvan kuvaus tähän

3) Poikki

Hanki attribuutit objektista suoraan get-menetelmällä

Lisää kuvan kuvaus tähän
Tämä menetelmä on kätevämpi, eikä sen tarvitse hankkia useita avaimia.

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

sql-luokka

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 (sovellusskenaario: vastauksen json-tietojen jäsentäminen, kuten väitekenttien, kuten hankittavan arvon, hankkiminen)

Koska tällä hetkellä projekti on erotettu etu- ja takapäästä.
Taustaohjelma palauttaa yleensä json-merkkijonot
Jos haluat esittää väitteitä, jäsennät yleensä jsonin jäsentämisen jälkeen.
Väitteet ovat yleensä koodi + avainliikekenttiä
Se on json-merkkijono, joten sinun on käytettävä jsonpathia

① Riippuvuus

②Lisää riippuvuuksia ja riippuvuudet luodaan automaattisesti

blog.csdnimg.cn/5bdd9defd7db47b7a5934f79f9fd0ceb.png)
Lisää kuvan kuvaus tähän
On varmistettava, onko riippuvuudet ladattu

2.1 Esimerkki (hae vastaustiedoissa esitettävät keskeiset liiketoiminta-alueet)

2.1.1 Hanki vastaustiedoissa esitettävät keskeiset liiketoiminta-alueet
Vaihe 1: Luo luokan nimi, luo päämenetelmä ja määritä merkkijonomuuttuja

Tämä muuttuja tässä on vastauskenttä, joka palautetaan onnistuneen kirjautumisen jälkeen.
blog.csdnimg.cn/a20e89ee243c43f69a1b4e1c3a97b89b.png)

Vaihe 2: Jotta voit tehdä väitteitä, sinun on hankittava Configuration.defaultConfiguration.jsonProvider().parse():ta, jonka palautusarvo on Object type.

Lisää kuvan kuvaus tähän
Välitä määritetty kenttävastaus

Vaihe 3: Käytä menetelmää JsonPath.read(Object json, String jsonpath, predicate...filters), palautustyyppi on Object type

Lisää kuvan kuvaus tähän

Käyttöliittymän automatisointi riippuvaisten tietojen käsittelyyn
Hanki token tämän rivin edestä, joka on myös $.
Jos se on globaali muuttuja, sen saamisen jälkeen se voidaan tallentaa globaaliin muuttujaan.
Jos haluat saada väitteen ja hanki se sitten
Esitä toinen väite

3. http-asiakas (lähetä pyynnöt kirjoittamalla koodi)

Automaatiokehyksessä pyynnöt lähetetään kirjoittamalla koodia, mikä tarkoittaa, että sinun on käytettävä Java:n tarjoamaa httpclient-kirjastoa vuorovaikutuksessa palvelimen kanssa.

① Riippuvuus

②Lisää riippuvuuksia ja riippuvuudet luodaan automaattisesti

Lisää kuvan kuvaus tähän

3.1 Esimerkki (hae pyyntö, lähetä pyyntö)

3.1.1
Valmistelutyö: Tarkista, onko swagger-rajapintaasiakirjan pyyntöliittymä läpäissyt. Katso käyttöliittymädokumentista get-pyyntö findById ja välitettävä tunnus.

Tunnus on läpäistävä
Lisää kuvan kuvaus tähän
Kirjastosta näemme, että tunnus on 259
Lisää kuvan kuvaus tähän
Lisää kuvan kuvaus tähän
Lisää kuvan kuvaus tähän

Vaihe 1: Luo luokan nimi Test04 ja luo päämenetelmä
Vaihe 2: Määritä liitännän osoitemuuttujan url ja pyydä parametrien parametreja

Lisää kuvan kuvaus tähän
Datatiedostossa kaikki parametrit ketjutetaan json-merkkijonoihin, joten myös id=259 ketjutetaan json-merkkijonoihin.

Tässä laita 259 lainausmerkkeihin, jotta se vältetään automaattisesti.
Lisää kuvan kuvaus tähän

Vaihe 3: Jäsennä json-merkkijono, käytä JSONObject.parseObject()-menetelmää, palautustyyppi on JSONObject-tyyppi

Lisää kuvan kuvaus tähän

Vaihe 4: Määritä staattinen menetelmä getRequest(String url, JSONObject jsonobject)

Lisää kuvan kuvaus tähän

Vaihe 5: Kutsu sitten päämenetelmässä getRquest() Palautusarvo on merkkijono.

Lisää kuvan kuvaus tähän

Vaihe kuusi: Paranna getRequest()-metodilogiikkaa

hae pyyntö: http://47.108.153.47:18089/qzcsbj/user/findById?id=259
?Liitä parametrit suoraan myöhemmin
On myös useita huomioitavia arvoja: http://47.108.153.47:18089/qzcsbj/user/findById?id=259&name=jack

1) Hanki avain jsonobetct.keySet():n kautta ja hanki Set-kokoelma

Lisää kuvan kuvaus tähän

2) Kävele Set-kokoelma ja hanki avaimen arvo

Lisää kuvan kuvaus tähän

3) Sinun on myös harkittava useiden arvojen tapausta, eli määritä lippu = tosi, kirjoita tosi ensin ja ole ensimmäinen

Lisää kuvan kuvaus tähän

4) Muussa tapauksessa kirjoita seuraava

Lisää kuvan kuvaus tähän

5) Määrittele res tyhjä merkkijono ja palauta res

Lisää kuvan kuvaus tähän
Yllä oleva ketjuttaa parametrin URL-osoitteen ja parametrit get-pyynnön lähettämiseksi Luomisen jälkeen sinun on luotava get request -objekti.

6) Luo httpget-pyyntöobjekti, uusi HttpGet (org.apache.http.client.methods) valitse tämä rakentaja

Välitä url
Täältä saat httpget-pyyntöobjektin
Lisää kuvan kuvaus tähän

7) Luo httpclient-asiakas käyttämällä HttpClients.createDefault()-menetelmää, palautustyyppi on CloseableHttpClient

Lisää kuvan kuvaus tähän

Abstrakti CloseableHttpClient-luokka toteuttaa HttpClient, Closeable -rajapinnan
Lisää kuvan kuvaus tähän
Polymorfismia voidaan käyttää, ja alaluokkaobjekti osoittaa emoluokan viittaukseen (emoluokan toteuttamaan rajapintaan)
Lisää kuvan kuvaus tähän

8) Suorita request execute() -menetelmä, välitä httpget-objekti ja tee sitten poikkeus

Lisää kuvan kuvaus tähän
Lisää kuvan kuvaus tähän

9) Kun olet hankkinut HttpResponse-objektin, voit kutsua sen getEntity-menetelmää saadaksesi Httpentity-vastausobjektin. Kun olet hankkinut EntityUtils.toString-menetelmän, palautustyyppi on String.

Lisää kuvan kuvaus tähän
Lisää kuvan kuvaus tähän
Tulos res on määritelty yllä
Juuri nyt
Lisää kuvan kuvaus tähän

10) Juokse

Lisää kuvan kuvaus tähän

3.1.2 Postituspyyntö
Valmistelutyö: Tarkista, onko swagger-liittymäasiakirjan pyyntöliittymä läpäissyt

Lisää kuvan kuvaus tähän
Lisää kuvan kuvaus tähän

Lisää kuvan kuvaus tähän

Vaihe 1: Luo luokan nimi Test05 ja luo päämenetelmä

http://47.108.153.47:18089/qzcsbj/user/login
url, pyyntöparametrien parametrit, pyyntöjen otsikot

Lisää kuvan kuvaus tähän

Vaihe 2: Määritä käyttöliittymän osoitemuuttujan url, pyyntöparametrien parametrit ja pyyntöotsikot

Nämä parametrit saadaan automaatiokehyksen tiedostoista.
Lisää kuvan kuvaus tähän
Lisää kuvan kuvaus tähän

Vaihe 3: Jäsennä json-merkkijono para ja otsikot käyttämällä JSONObject.parseObject()-menetelmää. Palautusarvo on JSONObject-tyyppiä.
Vaihe 4: Määritä menetelmä lähetyspyyntöjen lähettämiseksi, paranna logiikkaa ja välitä otsikko, URL-osoite ja parametrit.

Määrittele res
paluu res

Lisää kuvan kuvaus tähän

1) Hanki avain jsonobetct.keySet() -komennolla, hanki Set-kokoelma, käytä avain läpi saadaksesi avain

Lisää kuvan kuvaus tähän

2) Jos haluat kutsua addHeader()-metodia httppost-objektin kautta ja palautustyyppi on HttPost, sinun on ensin luotava httpppost-objekti.

Pass url
Lisää kuvan kuvaus tähän

3) Kutsu addHeader()-metodi httppost-objektin kautta

Lisää kuvan kuvaus tähän

4) httpEntity on pakollinen, mutta httpEntity on käyttöliittymä. Käyttöliittymä ei voi toteuttaa luokkaa StringEntity.

Lisää kuvan kuvaus tähän
Lisää kuvan kuvaus tähän
Jos katsot rakentajaa, voit ohittaa merkkijonon ja määrittää toisen rakentajan.

Lisää kuvan kuvaus tähän
Lisää kuvan kuvaus tähän
Yllä oleva on lähetetty postituspyyntö: pyynnön otsikko ja lähetettävät tiedot on määritelty.

5) Luo httpclient-asiakas käyttämällä HttpClients.createDefault()-menetelmää, palautustyyppi on CloseableHttpClient

Alaluokka-objekti osoittaa yläluokkaviittaukseen
Lisää kuvan kuvaus tähän

6) Lähetä pyyntö, suorita request execute() -metodi, välitä httppost-objekti ja tee sitten poikkeus.

Lisää kuvan kuvaus tähän

7)) Kun olet hankkinut HttpResponse-objektin, voit kutsua sen getEntity-menetelmää saadaksesi Httpentity-vastausobjektin. Kun olet hankkinut EntityUtils.toString-menetelmän, palautustyyppi on String

Lisää kuvan kuvaus tähän

8) Kutsu päämenetelmässä juuri määritetty menetelmä

Lisää kuvan kuvaus tähän

9) Juokse

Lisää kuvan kuvaus tähän