기술나눔

자동화(두 번째 수준)

2024-07-12

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

Java 인터페이스 자동화에 사용되는 기술 스택

기술 스택 요약:
①Java 기초(캡슐화, 리플렉션, 제네릭, jdbc)
②구성 파일 분석(속성)
③httpclient (http 요청 보내기)
④Fastjson과 jsonpath는 데이터를 처리합니다.
⑤Testng 자동화 테스트 프레임워크의 핵심 포인트
⑥매혹시험성적서

첫 번째 카테고리: http 요청 관련(fastjson, jsonpath, httpclient)

준비하다

메이븐 프로젝트 생성

①먼저 Maven 프로젝트를 생성하고, newPROJECT–Maven—groupid----finish

여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

②Maven 구성을 다시 확인하세요.

파일—설정—maven
여기에 이미지 설명을 삽입하세요.

Fastjson과 jsonpath는 모두 데이터를 처리하는 데 사용됩니다.
테스트 자동화 프레임워크의 초점입니다.
매력 테스트 보고서

1. fastjson(응용 시나리오: json 문자열 및 입력 매개변수의 문자열 배열 구문 분석)

fastjson은 json 문자열과 json 배열을 처리합니다.
json 문자열 입력 매개변수를 구문 분석하고 후속 요청을 준비합니다.

① 의존성

<!-https://mvnrepository.com/artifact/com.alibaba/fastjson -->
com.알리바바
패스트슨
1.2.75

②종속성을 추가하면 종속성이 자동으로 생성됩니다.

여기에 이미지 설명을 삽입하세요.
다운로드 후 자동으로 생성된 종속성 패키지를 볼 수 있습니다.

1.1.예(json 문자열 입력 매개변수, json 문자열 배열 입력 매개변수 구문 분석)

1.1.1.json 문자열 입력 매개변수 구문 분석

예를 들어 로그인하려면 사용자 이름과 비밀번호가 필요합니다.
{“사용자 이름”:“qzcsbj”, “비밀번호”:“123456”}

자동화 프레임워크 데이터 소스, 입력 매개변수는 모두 json 문자열이므로 fastjson을 사용해야 합니다.

1단계: 패키지 이름, 클래스 이름 및 기본 메서드 만들기

여기에 이미지 설명을 삽입하세요.

2단계: 문자열 변수를 정의합니다. 구문 분석해야 하는 json 문자열은 다음과 같습니다.
3단계: json 문자열을 처리하려면 먼저 jsonObject 객체로 구문 분석한 다음 이를 Map에 넣습니다.
1)먼저 HashMap을 만듭니다., 키와 값은 모두 문자열입니다.

여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

2) 문자열을 구문 분석합니다. 여기서는 JSONObjetct.parseObject가 사용되며 반환 값은 JSONObject 유형입니다.

Class.Method, 이 메서드는 정적입니다.

3) 키를 얻으려면 jsonObjetc.keySet 메소드를 직접 사용하십시오. 즉, Set 컬렉션을 얻으십시오.

컬렉션의 각 키는 문자열입니다.

4) 다시 순회하여 순회한 키를 통해 값을 얻은 후 해당 키와 값을 Map에 넣습니다.

여기에 이미지 설명을 삽입하세요.

이제 정의된 json 문자열이 구문 분석되어 맵에 배치되었습니다.
여기에 이미지 설명을 삽입하세요.

5) 맵에 배치된 콘텐츠를 확인하고 맵에서 키를 획득합니다.

json 문자열의 내용을 맵에 넣는 방법에 대한 지침
블로그.csdnimg.cn/direct/ae6feeba2eae442f961df977a6c8eac1.jpeg)

1.1.2.json 문자열 배열 입력 매개변수 구문 분석

자동화 프레임워크에는 초기화 프레임워크가 포함되며 일부는 내부 데이터에 대한 작업이 필요합니다.데이터베이스를 운영하려면 sql을 작성해야 합니다.
다음은 json 배열입니다. 배열의 각 요소는 키 값 데이터를 포함하는 json 문자열입니다. 첫 번째 요소는 실제로 실행된 sql입니다.

[{“sqlNo”:“1”,“sq!”:“사용자 이름='qzcsbj'인 사용자 중에서 *를 선택하세요;”},.“sqlNo”:“2”,“sql”:“사용자 이름='test00501'인 사용자 중에서 *를 선택하세요;”}]

1단계: 패키지 이름, 클래스 이름 및 기본 메서드 만들기
2단계: 문자열 변수를 정의합니다. 구문 분석해야 하는 json 문자열 배열은 다음과 같습니다.
방법 1(권장되지 않음): 문자열 JSONObjetct.parseArray(String text)를 구문 분석하고 반환 값은 JSONArray입니다.
1) 문자열을 구문 분석합니다. 여기서는 JSONObjetct.parseArray가 사용됩니다.

여기에 이미지 설명을 삽입하세요.

2) 직접 순회, 각 요소는 Object 유형이며 두 개의 json 문자도 인쇄됩니다.

여기에 이미지 설명을 삽입하세요.

3) json 문자열에 sql 값을 인쇄합니다. 여기에는 get 또는 set 메소드가 없습니다. json 문자열만 가져올 수 있지만 특정 키의 내용은 가져올 수 없습니다.

여기에 이미지 설명을 삽입하세요.
이 방법은 바람직하지 않습니다

방법 2: JSONObjetct.parseArray(String text, Class clazz), 반환 값은 List &lt; T &gt;, 반환 유형은 List, 반환 요소는 HashMap

두 개의 매개변수를 전달합니다. 첫 번째 매개변수는 구문 분석할 문자열이고 두 번째 매개변수는 바이트코드 파일입니다.
해결책은 다음과 같습니다. 첫 번째 매개변수 문자열을 맵으로 구문 분석합니다.

1) 각 요소를 해시맵 객체로 캡슐화합니다. 여기서는 JSONObjetct.parseArray(String text, Class clazz)를 사용하여 문자열 배열을 구문 분석합니다.
2) Get sqlNo, sql은 HashMap 유형이므로 get 메소드를 사용할 수 있습니다.

여기에 이미지 설명을 삽입하세요.

3) 여기서는 키 값이나 유형을 얻지 못합니다. 여기서 원하는 것은 강제로 변환할 수 있는 문자열입니다. 여기서는 상위 클래스 참조가 하위 클래스 객체를 가리킵니다.
4) 즉, sql의 json 문자열에 있는 각 키에 해당하는 값을 얻는다.

여기에 이미지 설명을 삽입하세요.

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.class 입니다

1) sql javabean 정의: 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()가 사용되고 반환 값은 Object 유형입니다.

여기에 이미지 설명을 삽입하세요.
정의된 필드 응답을 전달합니다.

3단계: JsonPath.read(Object json, String jsonpath, predicate...filters) 메서드를 사용하고 반환 유형은 Object 유형입니다.

여기에 이미지 설명을 삽입하세요.

종속 데이터 처리를 위한 인터페이스 자동화
$이기도 한 이 줄의 앞부분에서 토큰을 가져옵니다.
획득한 후 글로벌 변수인 경우 글로벌 변수에 저장할 수 있습니다.
어설션을 얻고 나서 얻으려면
또 다른 주장을 해보세요

3. httpclient (코드를 작성하여 요청 보내기)

자동화 프레임워크에서는 코드를 작성하여 요청을 보냅니다. 즉, 서버와 상호 작용하려면 Java에서 제공하는 라이브러리인 httpclient를 사용해야 합니다.

① 의존성

②종속성을 추가하면 종속성이 자동으로 생성됩니다.

여기에 이미지 설명을 삽입하세요.

3.1.예(요청 받기, 게시 요청)

3.1.1. 요청 받기
준비 작업: Swagger 인터페이스 문서의 요청 인터페이스가 전달되었는지 확인합니다. 인터페이스 문서를 보고 전달해야 하는 get 요청 findById 및 ID를 결정합니다.

ID를 전달해야 함
여기에 이미지 설명을 삽입하세요.
라이브러리에서 ID가 259임을 확인할 수 있습니다.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

1단계: Test04라는 클래스 이름을 만들고 기본 메서드를 만듭니다.
2단계: 인터페이스의 주소 변수 url 및 요청 매개변수 매개변수를 정의합니다.

여기에 이미지 설명을 삽입하세요.
데이터 파일에서 매개변수는 모두 json 문자열로 연결되므로 id=259도 json 문자열로 연결됩니다.

여기에서 259를 큰따옴표로 묶어 자동으로 이스케이프 처리합니다.
여기에 이미지 설명을 삽입하세요.

3단계: json 문자열을 구문 분석하고 JSONObject.parseObject() 메서드를 사용합니다. 반환 유형은 JSONObject 유형입니다.

여기에 이미지 설명을 삽입하세요.

4단계: 정적 메소드 getRequest(String url, JSONObject jsonobject) 정의

여기에 이미지 설명을 삽입하세요.

5단계: 그런 다음 기본 메서드에서 getRquest()를 호출합니다. 반환 값은 문자열 유형입니다.

여기에 이미지 설명을 삽입하세요.

6단계: 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) 값이 여러 개인 경우도 고려해야 합니다. 즉, 플래그 = true를 정의하고 true를 먼저 쓰고 첫 번째가 되어야 합니다.

여기에 이미지 설명을 삽입하세요.

4) 그렇지 않으면 다음과 같이 작성하십시오.

여기에 이미지 설명을 삽입하세요.

5) res 빈 문자열을 정의하고 res를 반환합니다.

여기에 이미지 설명을 삽입하세요.
위의 내용은 get 요청을 보내기 위한 매개변수 url과 매개변수를 연결합니다. 생성 후 get 요청 개체를 만들어야 합니다.

6) httpget 요청 객체를 생성하고 새로운 HttpGet(org.apache.http.client.methods)을 선택하여 이 생성자를 선택합니다.

URL을 전달하세요.
여기서 httpget 요청 객체를 얻습니다.
여기에 이미지 설명을 삽입하세요.

7) HttpClients.createDefault() 메서드를 사용하여 httpclient 클라이언트를 생성합니다. 반환 유형은 CloseableHttpClient입니다.

여기에 이미지 설명을 삽입하세요.

CloseableHttpClient 추상 클래스는 Closeable 인터페이스인 HttpClient를 구현합니다.
여기에 이미지 설명을 삽입하세요.
다형성을 사용할 수 있으며 하위 클래스 객체는 상위 클래스 참조(상위 클래스에 의해 구현된 인터페이스)를 가리킵니다.
여기에 이미지 설명을 삽입하세요.

8) 요청 실행() 메소드를 실행하고 httpget 객체를 전달한 후 예외를 발생시킵니다.

여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

9) HttpResponse 객체를 얻은 후 getEntity 메소드를 호출하여 Httpentity 응답 객체를 얻을 수 있습니다. EntityUtils.toString 메소드를 얻은 후 반환 유형은 String 유형입니다.

여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
결과 res는 위에 정의되어 있습니다.
지금 바로
여기에 이미지 설명을 삽입하세요.

10) 실행

여기에 이미지 설명을 삽입하세요.

3.1.2. 게시물 요청
준비작업: Swagger 인터페이스 문서의 요청 인터페이스 통과 여부 확인

여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

여기에 이미지 설명을 삽입하세요.

1단계: Test05라는 클래스 이름을 만들고 기본 메서드를 만듭니다.

http://47.108.153.47:18089/qzcsbj/사용자/로그인
URL, 요청 매개변수 매개변수, 요청 헤더

여기에 이미지 설명을 삽입하세요.

2단계: 인터페이스의 주소 변수 url, 요청 매개변수 매개변수 및 요청 헤더 정의

이러한 매개변수는 자동화 프레임워크의 데이터 파일에서 가져옵니다.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

3단계: JSONObject.parseObject() 메서드를 사용하여 json 문자열 para 및 헤더를 구문 분석합니다. 반환 값은 JSONObject 유형입니다.
4단계: 게시물 요청을 보내는 방법을 정의하고, 로직을 개선하고, 헤더, URL 및 매개변수를 전달합니다.

해상도 정의
해상도 반환

여기에 이미지 설명을 삽입하세요.

1) jsonobetct.keySet()을 통해 키를 가져오고, Set 컬렉션을 가져온 다음, 키를 탐색하여 키를 가져옵니다.

여기에 이미지 설명을 삽입하세요.

2) httppost 객체를 통해 addHeader() 메소드를 호출하고 반환 유형이 HttPost인 경우 먼저 httpppost 객체를 생성해야 합니다.

URL 전달
여기에 이미지 설명을 삽입하세요.

3) httppost 객체를 통해 addHeader() 메소드를 호출합니다.

여기에 이미지 설명을 삽입하세요.

4) httpEntity는 필수이지만 httpEntity는 인터페이스입니다. 인터페이스 httpEntity를 구현하려면 StringEntity 클래스를 구현해야 합니다.

여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
생성자를 보면 String을 전달하고 두 번째 생성자를 지정할 수 있습니다.

여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
위는 보낸 게시물 요청입니다. 요청 헤더와 보낼 데이터가 모두 정의되어 있습니다.

5) HttpClients.createDefault() 메서드를 사용하여 httpclient 클라이언트를 생성합니다. 반환 유형은 CloseableHttpClient입니다.

하위 클래스 객체는 상위 클래스 참조를 가리킵니다.
여기에 이미지 설명을 삽입하세요.

6) 요청을 보내고, 요청 실행() 메소드를 실행하고, httppost 객체를 전달한 다음 예외를 발생시킵니다.

여기에 이미지 설명을 삽입하세요.

7)) HttpResponse 객체를 얻은 후 getEntity 메소드를 호출하여 Httpentity 응답 객체를 얻을 수 있습니다. EntityUtils.toString 메소드를 얻은 후 반환 유형은 String 유형입니다.

여기에 이미지 설명을 삽입하세요.

8) 메인 메소드에 정의된 메소드를 호출합니다.

여기에 이미지 설명을 삽입하세요.

9) 실행

여기에 이미지 설명을 삽입하세요.