Обмен технологиями

Автоматизация (второй уровень)

2024-07-12

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

Стек технологий, используемый для автоматизации интерфейса Java

Краткое описание стека технологий:
①Основы Java (инкапсуляция, отражение, дженерики, jdbc)
②Анализ файла конфигурации (свойства)
③httpclient (отправить http-запрос)
④Данные обработки Fastjson и jsonpath
⑤Ключевые моменты системы автоматизированного тестирования testng
⑥отчет об испытаниях привлекательности

Первая категория: связанные с http-запросами (fastjson, jsonpath, httpclient).

Подготовить

Создать maven-проект

①Сначала создайте проект maven, newPROJECT-Maven—groupid—--finish.

Вставьте сюда описание изображения
Вставьте сюда описание изображения

②Проверьте конфигурацию maven еще раз.

Файл—настройки—maven
Вставьте сюда описание изображения

Fastjson и jsonpath используются для обработки данных.
В центре внимания фреймворк автоматизации тестирования.
отчет об испытаниях привлекательности

1. fastjson (сценарий применения: разбор json-строк и строковых массивов входных параметров)

fastjson обрабатывает строки json и массивы json
Анализ входных параметров строки json и подготовка к последующим запросам

①Зависимость

<!-https://mvnrepository.com/artifact/com.alibaba/fastjson -->
com.alibaba
фастисон
1.2.75

②Добавьте зависимости, и зависимости будут сгенерированы автоматически.

Вставьте сюда описание изображения
После загрузки вы сможете увидеть автоматически сгенерированные пакеты зависимостей.

1.1. Пример (анализ входных параметров строки json, входных параметров массива строк json)

1.1.1. Анализ входных параметров строки json.

Например, для входа в систему требуется имя пользователя и пароль.
{«имя пользователя»:«qzcsbj», «пароль»:«123456»}

Источник данных платформы автоматизации, все входные параметры – это строки json, необходимо использовать fastjson.

Шаг 1. Создайте имя пакета, имя класса и создайте основной метод.

Вставьте сюда описание изображения

Шаг 2. Определите строковую переменную. Вот строка json, которую необходимо проанализировать.
Шаг 3. Для обработки строки json сначала преобразуйте ее в объект jsonObject, а затем поместите на карту.
1)Сначала создайте HashMap, ключ и значение — это строка

Вставьте сюда описание изображения
Вставьте сюда описание изображения

2) Здесь используется JSONObjetct.parseObject и возвращается значение типа JSONObject.

Class.Method, этот метод статический

3) Для получения ключей используйте напрямую метод jsonObjetc.keySet, то есть получите коллекцию Set

Каждый ключ в коллекции — это строка.

4) Пройдите еще раз, получите значение через пройденный ключ, а затем поместите ключ и значение на карту.

Вставьте сюда описание изображения

Теперь определенная строка json была проанализирована и помещена на карту.
Вставьте сюда описание изображения

5) Проверьте содержимое, размещенное на Карте, и получите ключ на Карте.

Инструкции по помещению содержимого строки json на карту
(блоггинг.csdnimg.cn/direct/ae6feeba2eae442f961df977a6c8eac1.jpeg)

1.1.2. Анализ входных параметров строкового массива json.

Платформа автоматизации включает в себя структуру инициализации, а некоторые требуют операций с данными внутри.Для работы с базой данных нужно написать sql
Вот массив json. В массиве каждый элемент представляет собой строку json, которая содержит данные значения ключа. Первый — это номер sql, фактически выполненный sql.

[{“sqlNo”:“1”,“sq!”:“выберите * из пользователей, где имя пользователя='qzcsbj';”},.“sqlNo”:“2”,“sql”:“выберите * из пользователей, где имя пользователя='test00501';”}]

Шаг 1. Создайте имя пакета, имя класса и создайте основной метод.
Шаг 2. Определите строковую переменную. Вот массив строк json, который необходимо проанализировать.
Способ 1 (не рекомендуется): проанализировать строку JSONObjetct.parseArray(текст строки), возвращаемое значение — JSONArray.
1) Разберите строку, здесь используется JSONObjetct.parseArray.

Вставьте сюда описание изображения

2) Прямой обход, каждый элемент имеет тип Object, а также выводится два символа json.

Вставьте сюда описание изображения

3) Распечатайте значение sql в строке json. Здесь нет методов get или set. Вы можете получить только строку json, но не содержимое определенного ключа.

Вставьте сюда описание изображения
Этот метод не рекомендуется

Метод 2: JSONObjetct.parseArray(String text, Class clazz), возвращаемое значение — List &lt; T &gt;, тип возвращаемого значения — List, а возвращаемый элемент — HashMap.

Передайте два параметра: первый параметр — это анализируемая строка, а второй параметр — файл байт-кода.
Решение: проанализировать первую строку параметра на карте.

1) Инкапсулируйте каждый элемент в объект хэш-карты JSONObjetct.parseArray(String text, Class clazz) здесь используется для анализа массива строк.
2) Получить sqlNo, sql — это тип HashMap, вы можете использовать метод get.

Вставьте сюда описание изображения

3) Здесь не получено ключевое значение или тип. По умолчанию используется Object. Здесь нам нужна строка, которую можно принудительно преобразовать, а ссылка родительского класса указывает на объект дочернего класса.
4) То есть получается значение, соответствующее каждому ключу в json-строке в sql.

Вставьте сюда описание изображения

5) Этот метод недостаточный: здесь нужно отображать ключи в json-строке. Если их много, то это будет хлопотно.
 String sqlNo = (String)sql.get("sqlNo");
  • 1
Метод 3: используется для устранения недостатка ⑤ метода 2, обычно с использованием инкапсуляции.

Инкапсулируйте содержимое каждой строки json в объект l, добавьте методы get и set в класс сущности, непосредственно в object.get, и получите содержимое sql. Этот вид приглашения кода также удобнее писать. Автоматизация также ссылается на эту инкапсуляцию. То есть инкапсулировать sql в объект,
Инкапсулируйте свойства как частные (sqlNo, sql), предоставьте методы get и set, параметризованные конструкторы и конструкторы без параметров. Необходимо добавить конструкторы без параметров, а отражение настроит конструкторы без параметров. Если вы напишете только конструктор без параметров, не написав конструктор без параметров, обязательно будет сообщено об ошибке. Чтобы напечатать результат строки, вам нужно добавить метод toString(), иначе будет напечатан адрес объекта. Вышеупомянутый класс сущности был написан.

Оптимизируйте его еще раз
Если элемент инкапсулирован в объект, он заменяется на класс, написанный вами.class
Это sql.класс

1) Определите javabean sql: класс sql имеет атрибуты sqlNo, sql, а затем добавьте методы get, set, методы построения и методы toString().

Вставьте сюда описание изображенияВставьте сюда описание изображения

2) Инкапсулируйте каждую строку json в объект sql (Test02), JSONObjetct.parseArray(String text, Class clazz), возвращаемое значение — List &lt; T &gt;, тип возвращаемого значения — List, а возвращаемый элемент — объект sql.

Второй метод, описанный выше, заключается в инкапсуляции каждого элемента в объект hashMap, а в данном случае — в инкапсуляции каждого элемента в объект sql.
Вставьте сюда описание изображения

3) Траверс

Получите атрибуты из объекта напрямую, используя метод get.

Вставьте сюда описание изображения
Этот метод более удобен и не требует получения большого количества ключей.

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

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 (сценарий приложения: анализ данных json ответа, например получение полей утверждений, например связанного значения, которое необходимо получить)

Потому что в настоящее время проект отделен от фронтенда и бекенда.
Бэкэнд обычно возвращает строки json.
Если вы хотите сделать утверждения, вы обычно анализируете json. После анализа вы обычно делаете утверждения только по ключевым полям.
Утверждения обычно представляют собой код + ключевые поля бизнеса.
Это строка json, поэтому вам нужно использовать jsonpath

①Зависимость

②Добавьте зависимости, и зависимости будут сгенерированы автоматически.

блог.csdnimg.cn/5bdd9defd7db47b7a5934f79f9fd0ceb.png)
Вставьте сюда описание изображения
Необходимо подтвердить, были ли загружены зависимости

2.1. Пример (получить ключевые бизнес-поля, которые будут указаны в данных ответа)

2.1.1 Получите ключевые бизнес-поля, которые будут указаны в данных ответа.
Шаг 1. Создайте имя класса, создайте основной метод и определите строковую переменную.

Эта переменная представляет собой поле ответа, возвращаемое после успешного входа в систему.
блог.csdnimg.cn/a20e89ee243c43f69a1b4e1c3a97b89b.png)

Шаг 2. Чтобы сделать утверждения, вам необходимо получить содержимое внутри Configuration.defaultConfiguration.jsonProvider().parse(), а возвращаемое значение — это тип объекта.

Вставьте сюда описание изображения
Передать ответ в определенном поле

Шаг 3. Используйте метод JsonPath.read(Object json, String jsonpath, predicate...filters), тип возвращаемого значения — тип объекта.

Вставьте сюда описание изображения

Автоматизация интерфейса обработки зависимых данных
Получите токен в начале этой строки, который также равен $.
После получения, если это глобальная переменная, ее можно сохранить в глобальной переменной.
Если вы хотите получить утверждение, а затем получить его
Сделайте еще одно утверждение

3. httpclient (отправка запросов путем написания кода)

В рамках автоматизации запросы отправляются путем написания кода, а это значит, что вам нужно использовать httpclient — библиотеку, предоставляемую Java, для взаимодействия с сервером.

①Зависимость

②Добавьте зависимости, и зависимости будут сгенерированы автоматически.

Вставьте сюда описание изображения

3.1. Пример (получить запрос, отправить запрос)

3.1.1. получить запрос
Подготовительные работы: проверьте, передан ли интерфейс запроса документа интерфейса Swagger. Посмотрите документ интерфейса, чтобы определить запрос на получение findById и идентификатор, который необходимо передать.

Нужно передать идентификатор
Вставьте сюда описание изображения
Из библиотеки мы видим, что идентификатор равен 259.
Вставьте сюда описание изображения
Вставьте сюда описание изображения
Вставьте сюда описание изображения

Шаг 1. Создайте класс с именем Test04 и создайте основной метод.
Шаг 2. Определите URL-адрес переменной адреса интерфейса и параметры параметров запроса.

Вставьте сюда описание изображения
В файле данных все параметры объединены в строки json, поэтому id=259 также объединяется в строки json.

Здесь поместите 259 в двойные кавычки, чтобы автоматически экранировать его.
Вставьте сюда описание изображения

Шаг 3. Проанализируйте строку json, используйте метод JSONObject.parseObject(), тип возвращаемого значения — тип JSONObject.

Вставьте сюда описание изображения

Шаг 4. Определите статический метод getRequest(String url, JSONObject jsonobject)

Вставьте сюда описание изображения

Шаг 5: Затем вызовите getRquest() в основном методе. Возвращаемое значение имеет тип String.

Вставьте сюда описание изображения

Шаг шестой: Улучшите логику метода getRequest()

получить запрос: http://47.108.153.47:18089/qzcsbj/user/findById?id=259
?Непосредственное объединение параметров позже
Также следует учитывать несколько значений: http://47.108.153.47:18089/qzcsbj/user/findById?id=259&name=jack.

1) Получите ключ через jsonobetct.keySet() и получите коллекцию Set.

Вставьте сюда описание изображения

2) Пройдите коллекцию Set и получите значение ключа.

Вставьте сюда описание изображения

3) Вам также необходимо рассмотреть случай нескольких значений, то есть определить flag = true, сначала написать true и быть первым.

Вставьте сюда описание изображения

4) В противном случае напишите следующее

Вставьте сюда описание изображения

5) Определите пустую строку разрешения и верните разрешение

Вставьте сюда описание изображения
Приведенное выше объединяет URL-адрес параметра и параметры для отправки запроса на получение. После создания вам необходимо создать объект запроса на получение.

6) Создайте объект запроса httpget, новый HttpGet (org.apache.http.client.methods) выберите этот конструктор.

Передайте URL-адрес
Здесь вы получаете объект запроса httpget.
Вставьте сюда описание изображения

7) Создайте клиент httpclient, используя метод HttpClients.createDefault(), тип возвращаемого значения — CloseableHttpClient.

Вставьте сюда описание изображения

Абстрактный класс CloseableHttpClient реализует интерфейс HttpClient, Closeable.
Вставьте сюда описание изображения
Можно использовать полиморфизм, и объект подкласса указывает на ссылку родительского класса (интерфейс, реализованный родительским классом).
Вставьте сюда описание изображения

8) Выполните метод выполнения запроса, передайте объект httpget, а затем выдайте исключение.

Вставьте сюда описание изображения
Вставьте сюда описание изображения

9) После получения объекта HttpResponse вы можете вызвать его метод getEntity для получения объекта ответа Httpentity. После получения метода EntityUtils.toString тип возвращаемого значения — строковый.

Вставьте сюда описание изображения
Вставьте сюда описание изображения
Результирующее разрешение определено выше
Прямо сейчас
Вставьте сюда описание изображения

10) Беги

Вставьте сюда описание изображения

3.1.2. Опубликовать запрос.
Подготовительные работы: проверьте, передан ли интерфейс запроса документа интерфейса Swagger.

Вставьте сюда описание изображения
Вставьте сюда описание изображения

Вставьте сюда описание изображения

Шаг 1. Создайте класс с именем Test05 и создайте основной метод.

http://47.108.153.47:18089/qzcsbj/user/login
URL, параметры параметров запроса, заголовки запроса

Вставьте сюда описание изображения

Шаг 2. Определите URL-адрес адресной переменной интерфейса, параметры параметров запроса и заголовки запроса.

Эти параметры получаются из файлов данных в системе автоматизации.
Вставьте сюда описание изображения
Вставьте сюда описание изображения

Шаг 3. Анализ параметров и заголовков строки json с помощью метода JSONObject.parseObject(). Возвращаемое значение имеет тип JSONObject.
Шаг 4. Определите метод отправки запросов на публикацию, улучшите логику и передайте заголовок, URL-адрес и параметры.

Определить разрешение
вернуть разрешение

Вставьте сюда описание изображения

1) Получите ключ через jsonobetct.keySet(), получите коллекцию Set и пройдите по ключу, чтобы получить ключ.

Вставьте сюда описание изображения

2) Если вы хотите вызвать метод addHeader() через объект httppost, а тип возвращаемого значения — HttPost, вам необходимо сначала создать объект httpppost.

Передать URL
Вставьте сюда описание изображения

3) Вызовите метод addHeader() через объект httppost.

Вставьте сюда описание изображения

4) Требуется httpEntity, но httpEntity — это интерфейс. Интерфейс не может создавать экземпляры объектов. Вам необходимо реализовать класс StringEntity для реализации интерфейса httpEntity.

Вставьте сюда описание изображения
Вставьте сюда описание изображения
Если вы посмотрите на конструктор, вы можете передать String и указать второй конструктор.

Вставьте сюда описание изображения
Вставьте сюда описание изображения
Выше представлен отправленный почтовый запрос: заголовок запроса и данные, которые будут отправлены, определены.

5) Создайте клиент httpclient, используя метод HttpClients.createDefault(), тип возвращаемого значения — CloseableHttpClient.

Объект подкласса указывает на ссылку родительского класса
Вставьте сюда описание изображения

6) Отправьте запрос, выполните метод выполнения запроса (), передайте объект httppost и затем создайте исключение.

Вставьте сюда описание изображения

7)) После получения объекта HttpResponse вы можете вызвать его метод getEntity для получения объекта ответа Httpentity. После получения метода EntityUtils.toString тип возвращаемого значения — String.

Вставьте сюда описание изображения

8) Вызовите метод, только что определенный в основном методе.

Вставьте сюда описание изображения

9) Беги

Вставьте сюда описание изображения