인터페이스 자동화 테스트: 모의 서버용 Moco 도구

모의 서버란?

Mock: 영어는 imitation으로 번역할 수 있습니다. 그러면 프런트 엔드 작업이 서버에 의해 차단되면 모의 서버를 사용하여 이러한 API를 구현하는 척할 수 있으며 특정 데이터를 반환하고 프런트 엔드가 페이지를 렌더링하는 데 도움이 될 수 있습니다. 편의를 위해 서버와 합의를 하고, 합의된 인터페이스의 내용은 무엇인지 .

편안한 인터페이스 사양

Ruan Yifeng의 블로그로 전송—RESTful API 디자인 가이드: http://www.ruanyifeng.com/blog/2014/05/restful_api.html

모코컨벤션우리 (1)

moco 도구는 github의 오픈 소스 프로젝트입니다. moco 도구를 사용하여 간단한 목 서버를 설정하여 디버깅을 용이하게 할 수 있습니다. github 주소: https://github.com/dreamhead/moco. 다운로드한 것은 a입니다. jar 패키지. 현재 버전은 0.11.1입니다. 먼저 구성 파일을 작성하고 이 구성 파일에 "시뮬레이션"해야 하는 요청 및 응답을 작성해야 합니다. 구성 파일은 json 형식입니다. 다음으로 localhost: 12306/hello 인터페이스를 방문하라는 비교적 간단한 요청을 작성하고 일반 텍스트 "moco"를 반환합니다. moco 도구는 포트 12306에 동의했습니다. 얽힐 필요가 없습니다. 포트 8080에 대한 tomcat의 동의와 유사합니다. config.json 파일은 다음과 같으며 json 파일은 moco 폴더와 동일한 jar 패키지에 넣어야 합니다. 예를 들어 블로거의 디렉토리 구조는 다음과 같습니다.

[
    {
        "request":
        {
            "uri":"/hello"
        },
        "response":
        {
            "text":"moco"
        }
    }
]

구성 파일은 비교적 간단합니다. 인터페이스를 요청하고 일반 텍스트를 반환하고 명령을 시작합니다.

>java -jar moco-runner-0.11.1-standalone.jar http -p 12306 -c config.json

여기서 http는 http 프로토콜이고, -p 12306은 포트 번호 12306을 바인드하고, -c config.json은 구성 파일을 읽습니다.
여기에 이미지 설명 삽입

위의 성능을 보면 moco가 성공적으로 시작되었다는 뜻이고, localhost:12306/hello를 방문하여 다음과 같은 결과를 볼 수 있는데, 이는 모의 서버가 동의한 데이터 "moco"를 성공적으로 반환했음을 의미합니다.
여기에 이미지 설명 삽입 

모코컨벤션우리 (2)

다음과 같이 구성 파일을 수정합니다. moco 도구는 json 구성 파일의 변경 사항을 실시간으로 모니터링하고 자체적으로 서버를 다시 시작할 수 있습니다.
여기에 이미지 설명 삽입

[
    {
        "request":
        {
            "uri":"/"
        },
        "response":
        {
            "text":"welcome to Moco"
        }
    },
    {
        "request":
        {
            "uri":"/hello"
        },
        "response":
        {
            "text":"moco"
        }
    }
]

 다음으로 각각 localhost:12306 및 12306:12306/hello를 방문하면 결과는 다음과 같습니다.
여기에 이미지 설명 삽입
여기에 이미지 설명 삽입

Moco-계약 가져오기 요청

[
    {
        "request":
        {
            "method":"get",
            "uri":"/get"
        },
        "response":
        {
            "text":"moco get"
        }
    }
]

 Moco-계약 게시 요청

[
    {
        "request":
        {
            "method":"post",
            "uri":"/post"
        },
        "response":
        {
            "text":"moco post"
        }
    }
]

Moco-Convention 요청 매개변수

[
    {
        "request":
        {
            "method":"get",
            "uri":"/get",
            "queries":
            {
                "id":"12306",
                "name":"moco"
            }
        },
        "response":
        {
            "text":"moco queries"
        }
    }
]

여기에 이미지 설명 삽입

Moco-agreement 요청 본문은 json 형식이어야 합니다.

[
    {
        "request":
        {
            "method":"post",
            "uri":"/post",
            "text":
            {
                "json":"{\"id\":\"12306\",\"name\":\"moco\"}"
            }
        },
        "response":
        {
            "status":"200"
        }
    }
]

 Moco-계약 요청 헤더

[
    {
        "request":
        {
            "method":"post",
            "uri":"/post",
            "headers":
            {
                "content-type":"application/json",
                "Connection":"keep-alive",
                "Content-Encoding":"gzip"
            }
        },
        "response":
        {
            "status":"200"
        }
    }
]

Moco-agreement 반환 콘텐츠

이미 텍스트, 상태 등 응답의 중앙 집중식 반환 내용을 보았으므로 반환된 파일을 표시하고 파일 형식 등을 설정해 보겠습니다.

[
    {
        "request":
        {
            "method":"post",
            "uri":"/post",
        },
        "response":
        {
            "file":"data.js",
            "charset":"GBK",
            "version":"HTTP/1.0"
        }
    }
]

Moco-promise 반환 상태 코드
이미 반환 상태 코드의 사용이 포함된 위의 json을 참조하십시오.

단위 테스트에서 Moco 사용(Python을 예로 들음)

[
    {
        "request":
        {
            "method":"get",
            "uri":"/api/hello"
        },
        "response":
        {
            "text":"hello Savitar!",
            "status":200
        }
    }
]

여기에서 get 요청이 시뮬레이션되고 일반 텍스트 "hello Savitar!"와 상태 코드 200이 반환됩니다. 먼저 브라우저에서 localhost:12306/api/hello를 방문하고 결과는 다음과 같습니다.

여기에 이미지 설명 삽입
인터페이스가 문제를 반환하지 않는다는 것을 보여주고 Python requests+unittest를 사용하여 간단한 인터페이스 테스트 사례를 작성합니다.

#coding=utf-8
'''
@author=Savitar
'''
import unittest
import requests

class MocoTestApi(unittest.TestCase):
    def setUp(self):
        self.url = "http://localhost:12306"
    def test_moco_test_api(self):
        api = "/api/hello"
        url = self.url+api
        r = requests.get(url)
        self.assertEqual(r.status_code,200)
        self.assertEqual(r.text,"hello Savitar!")
    def tearDown(self):
        pass

if __name__ == '__main__':
    unittest.main()

 실행 결과는 다음과 같습니다.
여기에 이미지 설명 삽입
위의 코드는 액세스 인터페이스를 구현하고 주장에 의해 반환된 상태 코드 및 반환 콘텐츠, 주장이 성공하여 인터페이스 테스트가 통과되었음을 나타냅니다.


              [다음은 내가 컴파일한 2023년에 가장 완벽한 소프트웨어 테스트 엔지니어 학습 지식 아키텍처 시스템 다이어그램입니다.]


1. Python 프로그래밍 입문부터 숙달까지

2. 인터페이스 자동화 프로젝트 실전

3. 웹 자동화 프로젝트의 실전


4. 앱 자동화 프로젝트의 실전

5. 1차 제조사 이력서


6. DevOps 시스템 테스트 및 개발

7. 일반적으로 사용되는 자동화 테스트 도구


여덟, JMeter 성능 테스트

9. 요약(마지막에 약간의 놀라움)

수명이 길기 때문에 오일을 추가하십시오. 모든 노력은 포기하지 않고 인내하는 한 결국에는 보상이 있을 것입니다. 시간을 소중히 여기고 꿈을 쫓으세요. 초심을 잊지 말고 앞으로 나아가십시오. 당신의 미래는 당신의 손에 달려 있습니다!

인생은 짧고 시간은 소중하며 미래에 일어날 일을 예측할 수는 없지만 현재 순간을 파악할 수 있습니다. 매일을 소중히 여기고 더 강하고 더 나은 자신을 만들기 위해 열심히 노력하세요. 확고한 믿음, 끈질긴 추구, 성공은 결국 당신의 것입니다!

끊임없이 도전해야만 끊임없이 자신을 능가할 수 있습니다. 꿈을 꾸고 용감하게 앞으로 나아가면 투쟁의 과정이 너무나 아름답고 가치 있다는 것을 알게 될 것입니다. 자신을 믿으세요, 당신은 할 수 있습니다!

  

추천

출처blog.csdn.net/nhb687096/article/details/132147921