인터페이스 자동화 테스트, 완전 입문 편

원문http://www.cnblogs.com/lovesoo/p/7845731.html#_label1
목차
1. 인터페이스 테스트 란 무엇 인가 2. 기본 절차 3. 수요 분석 4. 사례 설계 5. 스 크 립 트 개발 6. 결과 분석 7. 전체 스 크 립 트 8. 참고 자료 디렉토리 로 돌아 가기
1. 인터페이스 테스트 란 무엇 인가
말 그대로 인터페이스 테스트 는 시스템 이나 구성 요소 간 의 인 터 페 이 스 를 테스트 하 는 것 으로 주로 데이터 의 교환, 전달 과 제어 관리 과정, 그리고 상호 논리 적 의존 관 계 를 검증 하 는 것 이다.그 중에서 인터페이스 프로 토 콜 은 HTTP, WebService, Dubbo, Thrift, Socket 등 유형 으로 나 뉘 는데 테스트 유형 은 주로 기능 테스트, 성능 테스트, 안정성 테스트, 안전성 테스트 등 으로 나 뉜 다.
레이 어 링 테스트 의 '피라미드' 모델 에서 인터페이스 테스트 는 2 층 서비스 통합 테스트 범주 에 속한다.UI 층 (주로 WEB 또는 APP) 자동화 테스트 에 비해 인터페이스 자동화 테스트 수익 이 더 크 고 실현 하기 쉬 우 며 유지 비용 이 낮 으 며 더 높 은 투입 생산 비 를 가지 고 각 회사 가 자동화 테스트 를 실시 하 는 첫 번 째 선택 이다.
다음은 HTTP 인 터 페 이 스 를 예 로 들 어 인터페이스 자동화 테스트 절 차 를 완전 하 게 소개 합 니 다. 수요 분석 에서 사례 디자인 까지 스 크 립 트 작성, 테스트 실행 에서 결과 분석 까지 완전한 사례 디자인 과 테스트 스 크 립 트 를 제공 합 니 다.

 
디렉토리 로 돌아 가기
2. 기본 절차
기본 적 인 인터페이스 기능 자동화 테스트 절 차 는 다음 과 같다.
수요 분석 - > 사례 디자인 - > 스 크 립 트 개발 - > 테스트 실행 - > 결과 분석
2.1 예시 인터페이스
영화 검색
인터페이스 문서 주소:https://developers.douban.com/wiki/?title=movie_v2#search
인터페이스 호출 예시:
1) 출연 진 별 검색:https://api.douban.com/v2/movie/search?q=장 이 머 우
2) 제목 별로 검색:https://api.douban.com/v2/movie/search?q=큰소리 로 서유기 하 다.
3) 유형 별 검색:https://api.douban.com/v2/movie/search?tag=희극
디렉토리 로 돌아 가기
3. 수요 분석
수요 분석 은 수요, 디자인 등 문 서 를 참고 하여 수 요 를 파악 하 는 토대 에서 내부 의 실현 논 리 를 잘 알 아야 하고 이 단계 에서 수요, 디자인 에 존재 하 는 불합리 하거나 누락 된 점 을 제시 할 수 있다.
예 를 들 어 콩짜개 영화 검색 인터페이스 에서 제 가 이해 하 는 수 요 는 바로 제목, 출연자 와 라벨 에 대한 검색 을 지원 하고 페이지 를 나 누 어 검색 결 과 를 되 돌려 주 는 것 입 니 다.
디렉토리 로 돌아 가기
4. 용례 설계
사례 디자인 은 인터페이스 테스트 수 요 를 이해 하 는 토대 에서 MindManager 나 Xmind 등 사고 지도 소프트웨어 로 테스트 사례 디자인 을 작성 하 는 것 이다. 주요 내용 은 파라미터 검증, 기능 검증, 업무 장면 검증, 안전성 과 성능 검증 등 을 포함한다. 자주 사용 하 는 사례 디자인 방법 은 등가 구분 법, 경계 값 분석 법, 장면 분석 법, 인과 도, 직 교 표 등 이 있다.
두 판 영화 검색 인터페이스 기능 테스트 부분 에 대해 우 리 는 주로 파라미터 검사, 기능 검사, 업무 장면 검사 세 가지 측면 에서 디자인 테스트 사례 는 다음 과 같다.

디렉토리 로 돌아 가기
5. 스 크 립 트 개발
위 에서 작 성 된 테스트 사례 디자인 에 따라 python + nostests 프레임 워 크 를 사용 하여 자동화 테스트 스 크 립 트 를 작 성 했 습 니 다.인터페이스 자동화 테스트, 자동 실행 및 메 일 전송 테스트 보고서 기능 을 완전 하 게 실현 할 수 있 습 니 다.
5.1 관련 lib 설치
필요 한 lib 라 이브 러 리 는 다음 과 같 습 니 다. pip 명령 으로 설치 하면 됩 니 다.
pip install nose
pip install nose-html-reporting
pip install requests

5.2 인터페이스 호출
requests 라 이브 러 리 를 사용 하면 상기 인터페이스 호출 방법 을 편리 하 게 작성 할 수 있 습 니 다 (예 를 들 어 검색 q = 유덕화, 예제 코드 는 다음 과 같 습 니 다).
#coding=utf-8
import requests
import json
 
url = 'https://api.douban.com/v2/movie/search'
params=dict(q=u'   ')
r = requests.get(url, params=params)
print 'Search Params:
', json.dumps(params, ensure_ascii=False) print 'Search Response:
', json.dumps(r.json(), ensure_ascii=False, indent=4)


실제 자동화 테스트 스 크 립 트 를 작성 할 때, 우 리 는 약간의 패 키 징 을 해 야 한다.다음 코드 에서 우 리 는 콩짜개 영화 검색 인 터 페 이 스 를 봉인 했다. testq 방법 은 nostests 가 제공 하 는 yield 방법 만 사용 하면 목록 qs 의 모든 테스트 집합 을 편리 하 게 순환 할 수 있 습 니 다.
class test_doubanSearch(object):

    @staticmethod
    def search(params, expectNum=None):
        url = 'https://api.douban.com/v2/movie/search'
        r = requests.get(url, params=params)
        print 'Search Params:
', json.dumps(params, ensure_ascii=False) print 'Search Response:
', json.dumps(r.json(), ensure_ascii=False, indent=4) def test_q(self): # q qs = [u' ', u' ', u' ', u' ', u' , ', u' , ', u' , ', u' , '] for q in qs: params = dict(q=q) f = partial(test_doubanSearch.search, params) f.description = json.dumps(params, ensure_ascii=False).encode('utf-8') yield (f,)


우 리 는 테스트 사례 에 따라 모든 기능 의 자동화 테스트 스 크 립 트 를 순서대로 작성 하면 된다.
5.3 결과 검증
수 동 으로 인 터 페 이 스 를 테스트 할 때, 우 리 는 인 터 페 이 스 를 통 해 돌아 온 결 과 를 통 해 이번 테스트 의 통과 여 부 를 판단 해 야 한다. 자동화 테스트 도 마찬가지다.
이번 인터페이스 에 대해 서 는 'q = 유덕화' 를 검색 할 때 돌아 온 결과 에 '출연 진 유덕화 나 제목 유덕화' 가 들 어 있 는 지, 'tag = 코미디' 를 검색 할 때 돌아 온 결과 에서 영화 유형 이 '코미디' 인지, 결 과 를 페이지 별로 나 눌 때 돌아 온 결과 수가 맞 는 지 등 을 확인 해 야 한다.전체 결과 검사 코드 는 다음 과 같 습 니 다.
class check_response():
    @staticmethod
    def check_result(response, params, expectNum=None):
        #
        if expectNum is not None:
            #         None ,         
            eq_(expectNum, len(response['subjects']), '{0}!={1}'.format(expectNum, len(response['subjects'])))
        else:
            if not response['subjects']:
                #
                assert False
            else:
                #
                subject = response['subjects'][0]
                #        tag
                if params.get('tag'):
                    for word in params['tag'].split(','):
                        genres = subject['genres']
                        ok_(word in genres, 'Check {0} failed!'.format(word.encode('utf-8')))

                #        q
                elif params.get('q'):
                    #       ,             ,           
                    for word in params['q'].split(','):
                        title = [subject['title']]
                        casts = [i['name'] for i in subject['casts']]
                        directors = [i['name'] for i in subject['directors']]
                        total = title + casts + directors
                        ok_(any(word.lower() in i.lower() for i in total),
                            'Check {0} failed!'.format(word.encode('utf-8')))

    @staticmethod
    def check_pageSize(response):
        #             
        count = response.get('count')
        start = response.get('start')
        total = response.get('total')
        diff = total - start

        if diff >= count:
            expectPageSize = count
        elif count > diff > 0:
            expectPageSize = diff
        else:
            expectPageSize = 0

        eq_(expectPageSize, len(response['subjects']), '{0}!={1}'.format(expectPageSize, len(response['subjects'])))


5.4 테스트 실행
상기 테스트 스 크 립 트 에 대해 서 는 nostests 명령 을 사용 하여 자동화 테스트 를 편리 하 게 실행 할 수 있 으 며, nose - html - reporting 플러그 인 을 사용 하여 html 형식 테스트 보고 서 를 생 성 할 수 있 습 니 다.
실행 명령 은 다음 과 같 습 니 다:
nosetests -v test_doubanSearch.py:test_doubanSearch --with-html --html-report=TestReport.html

5.5 메 일 리 포트 발송
테스트 가 끝 난 후, 우 리 는 smtplib 모듈 이 제공 하 는 방법 으로 html 형식 테스트 보고 서 를 보 낼 수 있 습 니 다.기본 프로 세 스 는 테스트 보고서 읽 기 - > 메 일 내용 및 첨부 파일 추가 - > 메 일 서버 연결 - > 메 일 보 내기 - > 종료 입 니 다. 예제 코드 는 다음 과 같 습 니 다.
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

def send_mail():
    #         
    with open(report_file, 'r') as f:
        content = f.read().decode('utf-8')

    msg = MIMEMultipart('mixed')
    #       
    msg_html = MIMEText(content, 'html', 'utf-8')
    msg.attach(msg_html)

    #     
    msg_attachment = MIMEText(content, 'html', 'utf-8')
    msg_attachment["Content-Disposition"] = 'attachment; filename="{0}"'.format(report_file)
    msg.attach(msg_attachment)

    msg['Subject'] = mail_subjet
    msg['From'] = mail_user
    msg['To'] = ';'.join(mail_to)
    try:
        #        
        s = smtplib.SMTP(mail_host, 25)
        #   
        s.login(mail_user, mail_pwd)
        #     
        s.sendmail(mail_user, mail_to, msg.as_string())
        #   
        s.quit()
    except Exception as e:
        print "Exceptioin ", e


디렉토리 로 돌아 가기
6. 결과 분석
nostests 실행 완료 후 생 성 된 테스트 보고 서 를 열 면 이번 테스트 는 모두 51 개의 테스트 용례 를 실 행 했 고 50 개 성공, 1 개 실 패 를 알 수 있 습 니 다.

실패 사례 를 보면 들 어 오 는 매개 변 수 는 {"count": - 10, "tag": "희극"} 입 니 다. 이때 돌아 오 는 결과 수 는 우리 의 기대 결과 와 일치 하지 않 습 니 다.

디렉토리 로 돌아 가기
7. 전체 스 크 립 트
콩짜개 영화 검색 인터페이스의 완전 자동화 테스트 스 크 립 트, 내 가 올 린 GitHub.다운로드 주소:https://github.com/lovesoo/test_demo/tree/master/test_douban
 
다운로드 가 완료 되면 다음 명령 을 사용 하면 완전한 인터페이스 자동화 테스트 를 하고 메 일 을 통 해 최종 테스트 보고 서 를 보 낼 수 있 습 니 다.
python test_doubanSearch.py

 
최종 적 으로 테스트 보고서 메 일 을 보 냅 니 다. 캡 처 는 다음 과 같 습 니 다.

디렉토리 로 돌아 가기
8. 참고 자료
1) requests:  http://cn.python-requests.org/zh_CN/latest/
2) nosetests:  http://nose.readthedocs.io/en/latest/testing.html
3) nose-html-reporting:  https://pypi.python.org/pypi/nose-html-reporting

좋은 웹페이지 즐겨찾기