Berbagi teknologi

Otomatisasi (tingkat kedua)

2024-07-12

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

Tumpukan teknologi yang digunakan untuk otomatisasi antarmuka Java

Ringkasan tumpukan teknologi:
①Dasar-dasar Java (enkapsulasi, refleksi, generik, jdbc)
②Analisis file konfigurasi (properti)
③httpclient (kirim permintaan http)
④Fastjson dan jsonpath memproses data
⑤Poin-poin penting dalam pengujian kerangka pengujian otomatis
⑥laporan pengujian daya tarik

Kategori pertama: terkait permintaan http (fastjson, jsonpath, httpclient)

Mempersiapkan

Buat proyek pakar

①Buat proyek maven terlebih dahulu, newPROJECT–Maven—groupid----selesai

Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini

②Periksa lagi konfigurasi pakar

File—pengaturan—maven
Masukkan deskripsi gambar di sini

Fastjson dan jsonpath keduanya digunakan untuk memproses data.
Fokus pengujian kerangka otomasi.
laporan uji daya tarik

1. fastjson (skenario aplikasi: penguraian string json dan array string parameter input)

fastjson memproses string json dan array json
Parsing parameter input string json dan persiapkan untuk permintaan berikutnya

①Ketergantungan

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

②Tambahkan dependensi dan dependensi akan dibuat secara otomatis

Masukkan deskripsi gambar di sini
Setelah mengunduh, Anda dapat melihat paket ketergantungan yang dibuat secara otomatis.

1.1.Contoh (mengurai parameter input string json, parameter input array string json)

1.1.1. Parsing parameter masukan string json

Misalnya, login memerlukan nama pengguna dan kata sandi.
{“nama pengguna”:“qzcsbj”, “kata sandi”:“123456”}

Sumber data kerangka otomatisasi, parameter input semuanya string json, fastjson perlu digunakan

Langkah 1: Buat nama paket, nama kelas, dan buat metode utama

Masukkan deskripsi gambar di sini

Langkah 2: Tentukan variabel string, berikut string json yang perlu diurai
Langkah 3: Untuk pemrosesan string json, parsing terlebih dahulu menjadi objek jsonObject lalu masukkan ke dalam Map
1)Pertama buat HashMap, kunci dan nilai keduanya adalah String

Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini

2) Parsing string. JSONObjetct.parseObject digunakan di sini, dan nilai yang dikembalikan adalah tipe JSONObject.

Kelas.Metode, metode ini statis

3) Untuk mendapatkan kunci, gunakan metode jsonObjetc.keySet secara langsung, yaitu dapatkan koleksi Set

Setiap kunci dalam koleksi adalah String

4) Lintasi lagi, dapatkan nilai melalui kunci yang dilintasi, lalu masukkan kunci dan nilai tersebut ke dalam Peta

Masukkan deskripsi gambar di sini

String json yang sekarang ditentukan telah diuraikan dan ditempatkan di Peta
Masukkan deskripsi gambar di sini

5) Verifikasi konten yang ditempatkan di Peta dan dapatkan kunci di Peta

Instruksi untuk memasukkan konten string json ke dalam peta
(http://blog.csdnimg.cn/direct/ae6feeba2eae442f961df977a6c8eac1.jpeg)

1.1.2. Parsing parameter masukan array string json

Kerangka otomatisasi melibatkan kerangka inisialisasi, dan beberapa memerlukan operasi pada data di dalamnya.Untuk mengoperasikan database, Anda perlu menulis sql
Berikut adalah array json. Dalam array, setiap elemen adalah string json, yang berisi data nilai kunci.

[{“sqlNo”:“1”,“sq!”:“pilih * dari pengguna di mana nama pengguna='qzcsbj';”},.“sqlNo”:“2”,“sql”:“pilih * dari pengguna di mana nama pengguna='test00501';”}]

Langkah 1: Buat nama paket, nama kelas, dan buat metode utama
Langkah 2: Tentukan variabel string, berikut adalah array string json yang perlu diurai
Metode 1 (tidak disarankan): Parsing string JSONObjetct.parseArray (String text), nilai yang dikembalikan adalah JSONArray
1) Parsing string, JSONObjetct.parseArray digunakan di sini

Masukkan deskripsi gambar di sini

2) Traversal langsung, setiap elemen bertipe Object, dan yang dicetak juga dua karakter json.

Masukkan deskripsi gambar di sini

3) Cetak nilai sql dalam string json. Tidak ada metode get atau set di sini. Anda hanya bisa mendapatkan string json, tetapi tidak mendapatkan konten kunci tertentu.

Masukkan deskripsi gambar di sini
Cara ini tidak disarankan

Metode 2: JSONObjetct.parseArray (String text, Class clazz), nilai yang dikembalikan adalah Daftar &lt; T &gt;, tipe yang dikembalikan adalah Daftar, dan elemen yang dikembalikan adalah HashMap

Lewati dua parameter, parameter pertama adalah String yang akan diurai, dan parameter kedua adalah file bytecode.
Solusinya adalah: parsing parameter pertama String ke dalam Map

1) Enkapsulasi setiap elemen menjadi objek hashmap. JSONObjetct.parseArray(String text, Class clazz) digunakan di sini untuk mengurai array string.
2) Dapatkan sqlTidak, sql adalah tipe HashMap, Anda dapat menggunakan metode get

Masukkan deskripsi gambar di sini

3) Tidak ada nilai atau tipe kunci yang diperoleh di sini. Defaultnya adalah Objek. Yang kita inginkan di sini adalah String, yang dapat dipaksa untuk dikonversi. Polimorfisme digunakan di sini, dan referensi kelas induk menunjuk ke objek kelas anak.
4) Artinya, diperoleh nilai yang sesuai dengan setiap kunci dalam string json di sql.

Masukkan deskripsi gambar di sini

5) Cara ini tidak cukup: kunci pada string json perlu ditampilkan di sini.
 String sqlNo = (String)sql.get("sqlNo");
  • 1
Metode 3: Digunakan untuk mengatasi kekurangan ⑤ pada Metode 2, umumnya menggunakan enkapsulasi

Enkapsulasi konten di setiap string json ke dalam objek l, tambahkan metode get dan set ke kelas entitas, langsung objek.get, dan dapatkan konten sql. Prompt kode semacam ini juga lebih nyaman untuk ditulis. Otomatisasi juga merujuk pada enkapsulasi ini. Yaitu untuk merangkum sql menjadi suatu objek,
Enkapsulasi properti sebagai pribadi (sqlNo, sql), sediakan metode get dan set, konstruktor berparameter, dan konstruktor tanpa parameter harus ditambahkan, dan refleksi akan menyesuaikan konstruktor tanpa parameter. Jika Anda hanya menulis konstruktor bebas parameter tanpa menulis konstruktor bebas parameter, kesalahan pasti akan dilaporkan. Untuk mencetak hasil string, Anda perlu menambahkan metode toString(), jika tidak, alamat objek akan dicetak. Kelas entitas di atas telah ditulis.

Optimalkan lagi
Jika elemen dienkapsulasi menjadi sebuah objek, maka diubah menjadi kelas yang ditulis oleh Anda sendiri.kelas
Itu adalah sql.kelas

1) Tentukan javabean sql: kelas sql memiliki atribut sqlNo, sql, lalu tambahkan metode get, set, metode konstruksi, dan metode toString()

Masukkan deskripsi gambar di siniMasukkan deskripsi gambar di sini

2) Enkapsulasi setiap string json ke dalam objek sql (Test02), JSONObjetct.parseArray (String text, Class clazz), nilai yang dikembalikan adalah Daftar &lt; T &gt;, tipe yang dikembalikan adalah Daftar, dan elemen yang dikembalikan adalah objek sql

Cara kedua di atas adalah dengan mengenkapsulasi setiap elemen menjadi objek hashMap, dan di sini adalah mengenkapsulasi setiap elemen menjadi objek sql.
Masukkan deskripsi gambar di sini

3) Melintasi

Dapatkan atribut dari objek secara langsung menggunakan metode get

Masukkan deskripsi gambar di sini
Cara ini lebih nyaman dan tidak perlu mendapatkan banyak kunci.

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

kelas 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 (skenario aplikasi: mengurai data json respons, seperti memperoleh bidang pernyataan, seperti nilai terkait yang akan diperoleh)

Karena saat ini proyeknya terpisah antara bagian depan dan belakang.
Backend umumnya mengembalikan string json
Jika Anda ingin membuat pernyataan, Anda biasanya mengurai json. Setelah parsing, Anda biasanya hanya membuat pernyataan pada kolom kunci.
Pernyataan umumnya berupa kode + bidang bisnis utama
Ini adalah string json, jadi Anda perlu menggunakan jsonpath

①Ketergantungan

②Tambahkan dependensi dan dependensi akan dibuat secara otomatis

(blog.csdnimg.cn/5bdd9defd7db47b7a5934f79f9fd0ceb.png)
Masukkan deskripsi gambar di sini
Perlu mengonfirmasi apakah dependensi telah diunduh

2.1.Contoh (dapatkan bidang bisnis utama yang akan ditegaskan dalam data respons)

2.1.1. Mendapatkan bidang bisnis utama untuk ditegaskan dalam data respons
Langkah 1: Buat nama kelas, buat metode utama, dan tentukan variabel string

Variabel ini di sini adalah kolom respons yang dikembalikan setelah login berhasil.
(blog.csdnimg.cn/a20e89ee243c43f69a1b4e1c3a97b89b.png)

Langkah 2: Untuk membuat pernyataan, Anda perlu mendapatkan konten di dalamnya. Configuration.defaultConfiguration.jsonProvider().parse() digunakan, dan nilai yang dikembalikan adalah tipe Objek.

Masukkan deskripsi gambar di sini
Berikan respons bidang yang ditentukan

Langkah 3: Gunakan metode JsonPath.read(Object json, String jsonpath, predicate...filters), tipe kembaliannya adalah tipe Object

Masukkan deskripsi gambar di sini

Otomatisasi antarmuka untuk memproses data yang bergantung
Dapatkan token dari depan baris ini, yang juga $.
Setelah didapat, jika berupa variabel global maka dapat disimpan ke variabel global.
Jika Anda ingin mendapatkan penegasan dan kemudian mendapatkannya
Buatlah pernyataan lain

3. httpclient (mengirim permintaan dengan menulis kode)

Dalam kerangka otomatisasi, permintaan dikirim dengan menulis kode, yang berarti Anda perlu menggunakan httpclient, perpustakaan yang disediakan oleh Java untuk berinteraksi dengan server.

①Ketergantungan

②Tambahkan dependensi dan dependensi akan dibuat secara otomatis

Masukkan deskripsi gambar di sini

3.1.Contoh (mendapatkan permintaan, memposting permintaan)

3.1.1.mendapatkan permintaan
Pekerjaan persiapan: Verifikasi apakah antarmuka permintaan dari dokumen antarmuka angkuh telah diteruskan. Lihat dokumen antarmuka untuk menentukan permintaan get findById dan id yang perlu diteruskan.

Harus melewati id
Masukkan deskripsi gambar di sini
Dari perpustakaan, kita dapat melihat bahwa idnya adalah 259
Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini

Langkah 1: Buat nama kelas Test04 dan buat metode utama
Langkah 2: Tentukan url variabel alamat antarmuka dan parameter permintaan parameter

Masukkan deskripsi gambar di sini
Dalam file data, semua parameter digabungkan menjadi string json, jadi id=259 juga digabungkan menjadi string json.

Di sini, masukkan 259 dalam tanda kutip ganda untuk menghindarinya secara otomatis.
Masukkan deskripsi gambar di sini

Langkah 3: Parsing string json, gunakan metode JSONObject.parseObject(), tipe pengembaliannya adalah tipe JSONObject

Masukkan deskripsi gambar di sini

Langkah 4: Tentukan metode statis getRequest(String url, JSONObject jsonobject)

Masukkan deskripsi gambar di sini

Langkah 5: Kemudian panggil getRquest() dalam metode utama. Nilai yang dikembalikan adalah tipe String.

Masukkan deskripsi gambar di sini

Langkah Enam: Tingkatkan logika metode getRequest()

dapatkan permintaan: http://47.108.153.47:18089/qzcsbj/user/findById?id=259
?Parameter sambungan langsung nanti
Ada juga beberapa nilai yang perlu dipertimbangkan: http://47.108.153.47:18089/qzcsbj/user/findById?id=259&name=jack

1) Dapatkan kunci melalui jsonobetct.keySet() dan dapatkan koleksi Set

Masukkan deskripsi gambar di sini

2) Lintasi koleksi Set dan dapatkan nilai kuncinya

Masukkan deskripsi gambar di sini

3) Anda juga perlu mempertimbangkan kasus beberapa nilai, yaitu mendefinisikan flag = true, tulis true terlebih dahulu, dan jadilah yang pertama

Masukkan deskripsi gambar di sini

4) Jika tidak, tulislah yang berikut ini

Masukkan deskripsi gambar di sini

5) Tentukan string kosong res dan kembalikan res

Masukkan deskripsi gambar di sini
Di atas akan menggabungkan parameter url dan parameter untuk mengirim permintaan get. Setelah pembuatan, Anda perlu membuat objek permintaan get.

6) Buat objek permintaan httpget, HttpGet baru (org.apache.http.client.methods) pilih konstruktor ini

Masukkan urlnya
Di sini Anda mendapatkan objek permintaan httpget
Masukkan deskripsi gambar di sini

7) Buat klien httpclient, menggunakan metode HttpClients.createDefault(), tipe pengembaliannya adalah CloseableHttpClient

Masukkan deskripsi gambar di sini

Kelas abstrak CloseableHttpClient mengimplementasikan antarmuka HttpClient, Closeable
Masukkan deskripsi gambar di sini
Polimorfisme dapat digunakan, dan objek subkelas menunjuk ke referensi kelas induk (antarmuka yang diimplementasikan oleh kelas induk)
Masukkan deskripsi gambar di sini

8) Jalankan metode permintaan eksekusi(), teruskan objek httpget, lalu berikan pengecualian

Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini

9) Setelah mendapatkan objek HttpResponse, Anda dapat memanggil metode getEntity untuk mendapatkan objek respons HttpResponse. Setelah mendapatkan metode EntityUtils.toString, tipe yang dikembalikan adalah tipe String.

Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini
Hasil res didefinisikan di atas
Sekarang
Masukkan deskripsi gambar di sini

10) Jalankan

Masukkan deskripsi gambar di sini

3.1.2. Permintaan posting
Pekerjaan persiapan: Verifikasi apakah antarmuka permintaan dari dokumen antarmuka angkuh telah dilewati

Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini

Masukkan deskripsi gambar di sini

Langkah 1: Buat nama kelas Test05 dan buat metode utama

http://47.108.153.47:18089/qzcsbj/pengguna/masuk
url, parameter parameter permintaan, header permintaan

Masukkan deskripsi gambar di sini

Langkah 2: Tentukan url variabel alamat antarmuka, parameter parameter permintaan, dan header permintaan

Parameter ini diperoleh dari file data dalam kerangka otomatisasi.
Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini

Langkah 3: Parsing para dan header string json menggunakan metode JSONObject.parseObject(). Nilai yang dikembalikan adalah tipe JSONObject.
Langkah 4: Tentukan metode untuk mengirim permintaan posting, tingkatkan logika, dan teruskan header, url, dan parameter.

Tentukan res
kembali res

Masukkan deskripsi gambar di sini

1) Dapatkan kunci melalui jsonobetct.keySet(), dapatkan koleksi Set, dan lintasi kunci untuk mendapatkan kunci

Masukkan deskripsi gambar di sini

2) Jika Anda ingin memanggil metode addHeader() melalui objek httppost, dan tipe kembaliannya adalah HttPost, Anda perlu membuat objek httpppost terlebih dahulu.

Lewati url
Masukkan deskripsi gambar di sini

3) Panggil metode addHeader() melalui objek httppost

Masukkan deskripsi gambar di sini

4) httpEntity diperlukan, tetapi httpEntity adalah sebuah antarmuka. Antarmuka tidak dapat membuat instance objek. Anda perlu mengimplementasikan kelas StringEntity untuk mengimplementasikan antarmuka httpEntity.

Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini
Jika Anda melihat konstruktornya, Anda dapat meneruskan String dan menentukan konstruktor kedua.

Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini
Di atas adalah permintaan posting yang dikirim: header permintaan dan data yang akan dikirim semuanya sudah ditentukan.

5) Buat klien httpclient, menggunakan metode HttpClients.createDefault(), tipe pengembaliannya adalah CloseableHttpClient

Objek subkelas menunjuk ke referensi kelas induk
Masukkan deskripsi gambar di sini

6) Kirim permintaan, jalankan metode permintaan eksekusi(), teruskan objek httppost, lalu berikan pengecualian.

Masukkan deskripsi gambar di sini

7)) Setelah mendapatkan objek HttpResponse, Anda dapat memanggil metode getEntity untuk mendapatkan objek respons Httpentity. Setelah mendapatkan metode EntityUtils.toString, tipe yang dikembalikan adalah tipe String

Masukkan deskripsi gambar di sini

8) Panggil metode yang baru saja ditentukan dalam metode utama

Masukkan deskripsi gambar di sini

9) Jalankan

Masukkan deskripsi gambar di sini