인터페이스 자동화 프레임워크: 암호화된 인터페이스 기반 프로세스 캡슐화 및 테스트 케이스 설계

인터페이스 테스트의 경우 요청 또는 기타 강력한 라이브러리의 사용을 마스터하는 것만으로는 충분하지 않으며 회사의 비즈니스 프로세스 및 요구 사항에 따라 인터페이스 자동화 테스트 프레임워크를 사용자 정의할 수 있는 기능도 필요합니다. 그래서 다음으로 인터페이스 테스트 케이스 분석과 일반적인 프로세스 캡슐화를 어떻게 완성하는지 주로 소개한다.

인터페이스 테스트 케이스 분석

우선 유스케이스 분석을 하기 전에 지난 1년간 회사에서 발생한 모든 실패 원인을 추적하거나, 문제의 원인을 찾거나, CTO, 제품 관리자, R&D, 운영과의 조사를 통해 품질 페인 포인트를 얻을 수 있습니다. 및 유지 보수 및 테스트, 비즈니스 아키텍처 및 프로세스 호출을 분석할 수 있으며 모니터링 시스템은 비즈니스의 사용 데이터를 이해하여 품질 요구 사항을 얻습니다 .

품질 요구 사항을 얻은 후 제품 관리자, 프로젝트 관리자, R&D 이사 등과 도킹을 통해 테스트할 비즈니스 범위, 비즈니스 시나리오 사용 사례 및 비즈니스 인터페이스 분석에 대해 학습하여 회사의 테스트 계획을 결정할 수 있습니다. . 테스트 계획과 분석을 위한 품질 요구 사항을 결합하여 비즈니스 사용 사례 설계를 시작할 수 있으며 인터페이스 테스트 사례 분석도 포함됩니다.

품질 요구 사항 견본
문제점 테스트 회사의 인터페이스가 불안정하여 사용자 사용에 영향을 미침
품질 피드백 지난 6개월 동안 몇 가지 큰 실패가 있었습니다.
회귀 테스트 모든 업그레이드는 이전 기능에 영향을 미칩니다.
테스트 전략 현재 회사에는 신뢰할 수 있는 테스트 시스템이 없습니다.
리팩토링 테스트 마이크로서비스의 전환에는 우수한 테스트 시스템 보장이 필요합니다.

인터페이스 테스트 캡슐화 아이디어

인터페이스 캡슐화의 아이디어는 주로 구성, 인터페이스 캡슐화 및 비즈니스 프로세스의 세 가지 주요 차원으로 나뉩니다 . 안에:

  • 구성은 주로 구성 파일을 기반으로 초기 구성 및 종속성을 얻는 데 사용됩니다.
  • 인터페이스 캡슐화는 APIObject 디자인 패턴을 따라 인터페이스 호출을 추상화하고 캡슐화합니다.
  • 비즈니스 프로세스는 여러 API로 구성된 프로세스 정의를 포함하여 데이터 초기화 및 비즈니스 사용 사례 설계를 담당하며 인터페이스 구현 세부 정보 및 어설션은 포함하지 않습니다.

자세한 소개를 위해 다음은 실제 전투 사례와 결합됩니다.

암호화 인터페이스 기반 테스트 케이스 설계

정보 보안상의 이유로 많은 인터페이스는 전송 중에 요청과 응답을 암호화합니다. 데이터의 이 부분을 직접 주장하는 것은 분명히 실현 가능하지 않습니다. 또한 복호화된 인터페이스를 어설션하기 전에 인터페이스의 이 부분에 대한 추가 복호화 처리를 수행해야 합니다.

환경 준비

실제 전투에 앞서 응답을 암호화하기 위한 인터페이스를 준비해야 합니다. get 요청을 시작한 후 암호화된 응답 메시지를 얻습니다.

먼저 JSON 형식으로 데모를 준비합니다.

{"topics":
{
"orange":"movie",
"shool":"testing-studio",
"president":"seveniruby"
}
}

base64로 암호화하여 암호화된 파일 demo64.txt를 얻습니다.

base64 demo.json >demo64.txt

Python 명령을 사용하여 "demo64.txt"가 있는 디렉터리에서 서비스를 시작합니다.

python -m http.server 10000

시작 후 다음과 같이 표시됩니다.

curl 명령을 사용하여 이 서비스에 대한 get 요청을 수행합니다.

curl http://127.0.0.1:10000/demo64.txt

요청이 성공하면 환경이 성공적으로 준비되었음을 의미합니다.

전투 연습

base64를 호출하고 반환된 요청을 직접 복호화하여 복호화된 응답을 얻음 복호화된 응답을 JSON 형식으로 변환 이 때 반환된 값에 대해 오류 보고 없이 assertion을 할 수 있습니다.

import base64
import json
import requests
class TestEncode:
    url = "http://127.0.0.1:10000/demo64.txt"
    def test_encode(self):
        r = requests.get(self.url)
        encode = json.loads(base64.b64decode(r.content))
        assert encode["topics"]["president"] == "seveniruby"

테스트 중인 인터페이스의 프로토콜이 변경되면 요청 라이브러리는 변경된 프로토콜을 지원할 수 없으며 다른 세 번째 라이브러리를 호출하여 요청 정보를 보내야 하며 기본 소스 코드는 여전히 필요합니다. 수정할 수 있습니다. 이 경우 캡슐화 계층을 추가하여 보다 일반적인 전송 방법을 구성할 수 있습니다.

우선, 송신 프로토콜, 디코딩 방법, 요청 방법 등을 포함한 모든 요청 정보를 사전 구조를 통해 저장해야 하며, 이 사전 구조는 후속 데이터 기반 변환에도 중요한 기반을 제공합니다.

 req_data={
            "schema": "http",
            "method": "get",
            "url": "http://127.0.0.1:10000/demo64.txt",
            "headers": None
        }

요청 정보의 구조에 판단 조건을 추가하여 schema다른 요청 프로토콜을 선택할 수 있습니다. 예를 들어  schema "http"인 경우 캡슐화된 요청 라이브러리를 호출하도록 선택합니다.

class ApiRequest:
    #构造send方法,通过
    def send(self, data: dict):
        if "http" == data["schema"] :
            res = requests.request(data["method"],data["url"],header=data["headers"])
            return json.loads(base64.decode(res.content))
        elif "dubbo" ==  data["schema"]:
            pass
        elif "websocket" == data["schema"]:
            pass
        else:
            pass        

ApiRequest클래스에서 send 메서드를 호출하여 요청을 보내고 어설션을 만듭니다.

class TestEncode:
   def test_api(self):
        req_data={
            "schema": "http",
            "encoding": "base64",
            "method": "get",
            "url": "http://127.0.0.1:10000/demo64.txt",
            "headers": None
        }
        re = ApiRequest()
        data = re.send(req_data)
        assert data["topics"]["president"] == "seveniruby"

다른 알고리즘에 직면한 경우 기본 소스 코드를 수정해야 하므로 알고리즘을 캡슐화해야 합니다. 필요한 알고리즘을 사용하십시오. 캡슐화의 개념은 위와 같습니다. 먼저 사전 구조에 필드를 추가하여  encoding 선택한 다양한 암호화 조건을 판단합니다.

 req_data={
            "schema": "http",
            "method": "get",
            "url": "http://127.0.0.1:10000/demo64.txt",
            "headers": None,
            "encoding": "base64"
        }

요청 정보 구조에  encoding판단 조건을 추가하여 다른 복호화 방법을 선택할 수 있습니다 .

class ApiRequest:
    def send(self, data: dict):
        if "http" == data["schema"] :
            res = requests.request(data["method"],data["url"],headers=data["headers"])
            return json.loads(base64.b64decode(res.content))
            #通过请求信息的结构体中的`encoding`,去选择不同的解密方式。
            if data["encoding"] == "base64":
                return json.loads(base64.b64decode(res.content))
            elif data["encoding"] == "private":
                return json.loads(requests.post("url", data=res.content).content)
            else:
                return json.loads(res.content)

요약하다

우선, 암호화된 응답 결과에 대해 어떤 종류의 처리 방법을 사용할 수 있는지 명확히 할 필요가 있습니다.

  1. 어떤 일반적인 암호화 알고리즘이 사용되는지 알고 있다면 스스로 해결할 수 있습니다.
  2. 해당 암호화 알고리즘을 모르는 경우 R&D에 암호화 및 복호화를 위한 lib를 제공하도록 요청할 수 있습니다.
  3. 일반적인 암호화 알고리즘이 아니고 R&D가 암호화 및 복호화 라이브러리를 제공할 수 없는 경우 암호화 당사자는 알고리즘이 기밀로 유지되도록 원격 분석 서비스를 제공할 수 있습니다.

이 글은 암호화 알고리즘의 사용을 이해하는 경우 이러한 복호화 알고리즘을 다루는 방법에 대해 주로 이야기합니다. 그러나 encapsulation의 개념은 동일하여 어떠한 상황에 처하더라도 formatted data를 통해 데이터의 내용을 명시할 수 있고, 암호화, 복호화 또는 선택된 protocol을 논리적 캡슐화 레이어를 통해 encapsulation 할 수 있다. .

마지막으로: 열렬한 팬들에게 보답하기 위해 완전한 소프트웨어 테스트 비디오 학습 자습서를 편집했습니다. 필요하면 무료로 얻을 수 있습니다.【保证100%免费】

소프트웨어 테스트 인터뷰 문서

우리는 고임금 직업을 찾기 위해 공부해야합니다.다음 인터뷰 질문은 Ali, Tencent 및 Byte와 같은 1 급 인터넷 회사의 최신 인터뷰 자료이며 일부 Byte 상사는 권위있는 답변을 제공했습니다.이 세트 완료 인터뷰 자료 모두가 만족스러운 직업을 찾을 수 있다고 믿습니다.

추천

출처blog.csdn.net/jiangjunsss/article/details/131595915