>  기사  >  백엔드 개발  >  python+requests+unittest API 인터페이스 테스트 문제

python+requests+unittest API 인터페이스 테스트 문제

怪我咯
怪我咯원래의
2017-06-23 14:04:132252검색

Black Bear는 인터페이스 테스트 관련 정보를 인터넷에서 검색했습니다. 대부분은 원하는 사용 사례를 생성하는 방법을 설명하지 않고 데이터 기반 형식으로 사용 사례를 텍스트나 테이블로 유지하는 데 중점을 둡니다.

매개변수 a, b, c와 같은 인터페이스를 테스트할 때 매개변수 a를 먼저 테스트해야 하는데, (통과되지 않음, 비어 있음, 정수, 부동 소수점, 문자열, 개체, 너무 짧음, 너무 김, SQL 삽입) ) 이러한 상황 중 하나는 사용 사례입니다. 동시에 b와 c가 올바른지 확인하고 a의 테스트가 b 및 c 매개변수의 오류에 영향을 받지 않는지 확인하세요. 인터페이스 사양을 준수하는 매개변수는 수동으로 입력하거나 코드 베이스에서 준비할 수 있습니다. 사양을 준수하지 않는 매개변수(통과되지 않음, 비어 있음, 정수, 부동 소수점, 문자열, 개체, 너무 짧음, 너무 김, SQL 삽입)도 라이브러리에서 상수로 반복적으로 사용할 수 있도록 준비할 수 있습니다

Main 구현된 함수:

1. API 매개변수를 dict로 구성하여 사용 사례 생성을 위한 매개변수 결합을 용이하게 합니다. 2. 생성된 사용 사례를 루프에서 실행합니다.

3 손쉬운 사용 및 유지 관리를 위해 일부 코드를 캡슐화합니다. 분석:

canshuxinxi .py 파일은 API 인터페이스 정보를 저장하는 데 사용됩니다. dict 형식으로 저장하면 API_ALL['Login Interface'][url] 메소드에서 검색할 수 있으며 더 직관적으로 보이고 어떤 인터페이스에 대한 정보를 얻고 있는지 알 수 있습니다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017-06-09 14:09
# canshuxinxi.py

# 接口信息
API_ALL = {
            '登录接口': {
                            'number': '1',
                            'url': 'http://www.baidu.com',
                            'leixing': 'post',
                            'head': {
                                        'aa': 'bb',
                                        'cc': 'dd',
                                        },
                            'canshu': {
                                        'username': 'Wbfxs001',
                                        'password': '111111Qq',
                                        'grant_type': 'password',
                                    },
                            'qiwang': {
                                        'code': 200,
                                        'name': 'Wbfxs001',
                                        },
                        },

            '退出接口': {
                            'number': '1',
                            'url': 'http://www.baidu.com',
                            'leixing': 'get',
                            'canshu': {
                                        'username': 'Wbfxs001',
                                        'password': '111111Qq',
                                        'grant_type': 'password',
                                      }
            }
}
changliang.py 파일은 비정상적인 매개변수를 저장하는 데 사용됩니다(인터페이스가 비정상적으로 응답할 수 있음). 예를 들어 새로운 SQL 주입 코드 세그먼트를 추가하려는 경우 dict에도 저장됩니다. 앞으로는 나중에 직접 추가하셔도 됩니다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017-06-09 14:09
# changliang.py

# 常用参数不传,为空,整形,浮点,字符串,object,过短,超长,sql注入
objects1 = 'xxxx'
objects2 = 'ssss'

ZHCS = {
            '为空': [''],
            '整形': [10, 23, 44, 88, 99],
            '浮点': [1.11, 2.342, -1.03],
            '字符串': ['aaaa', 'bbbb', 'cccc','dddd'],
            'object': [objects1, objects2],
            '过短': ['1', '0'],
            '超长': ['11111111111111111111111111111111111111111111111'],
            'sql注入': [';and 1=1 ;and 1=2', ";and (select count(*) from sysobjects)>0 mssql", ";and 1=(select IS_SRVROLEMEMBER('sysadmin'));--"],
         }
# gongju.py를 툴 클래스로 추가하고, 쉽게 호출할 수 있도록 다음 메소드를 캡슐화합니다. 매개변수 조합을 실현하고, 다양한 dict 유형 매개변수 조합을 생성하며, 쉽게 액세스할 수 있도록 dict 매개변수를 목록에 저장합니다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017-06-09 14:11
# gongju.py

# 生成不同组合的参数

class gj():

    def listalls(self, csTrue,  csFalse):
        fzgcs = []  # 得到cycanshu的key,将所有非正规参数放在一个list中
        listall = []  # 保存参数dict 为 list
        zhcs = dict(csTrue)
        listall.append(csTrue)
        aaa = list(csFalse.keys())
        for i in aaa:
            bbb = csFalse[i]  # 得到具体参数list
            for k in bbb:
                fzgcs.append(k)  # 便利每一个参数加入fzgcs列表

        zhcskey = list(zhcs.keys())  # 拿到将要进行组合的参数
        for i in zhcskey:
            a = zhcs[i]  # 保留原有的参数值,下面替换完后复原正确参数
            for k in fzgcs:
                zhcs[i] = k
                listall.append(str(zhcs))
            # 循环完后复原正确参数
            zhcs[i] = a
        return listall

jiaoben.py 파일은 결합된 매개변수를 루프에서 실행하고 결합된 매개변수 요청을 차례로 가져오는 스크립트 클래스로 사용됩니다. (요청 및 인쇄 응답 정보만 응답 결과에 대한 어설션을 추가할 수 있습니다.)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017-06-09 14:22
# jiaoben.py

from changliang import ZHCS
from canshuxinxi import API_ALL
from gongju import gj
import requests
# 脚本类,组合工具参数进行请求
gj = gj()
def jball():
    apikeys = API_ALL.keys()
    print(apikeys)
    for key in apikeys:
        apiname = key
        url = API_ALL[key]['url']
        number = API_ALL[key]['number']
        leixin = API_ALL[key]['leixing']
        canshus = gj.listalls(API_ALL[key]['canshu'], ZHCS)
        if leixin == 'post':
            print("======="+" api名称:"+apiname+"=======")
            for cs in canshus:
                mp = requests.post(url=url, data=cs)
                fhcode = str(mp.status_code)
                xysj = str(mp.elapsed.microseconds)
                print("=响应=api编号:"+number+"  响应code:"+fhcode+"  响应时间:"+xysj)
        if leixin == 'get':
            print("======="+" api名称:"+apiname+"=======")
            for cs in canshus:
                mp = requests.get(url=url, data=cs)
                fhcode = str(mp.status_code)
                xysj = str(mp.elapsed.microseconds)
                print("=响应=api编号:"+number+"  响应code:"+fhcode+"  响应时间:"+xysj)
jball()

tesone.py 파일은 유스 케이스 실행 파일로 사용됩니다. 단위 테스트 프레임워크에 익숙한 사람은 원리를 알 수 있습니다. 따라서 더 자세히 소개하지는 않겠습니다. Black Bear는 주로 스크립트 실행을 제어하는 ​​데 사용됩니다. 단위 테스트 프레임워크와 결합하면 후속 확장이 용이해집니다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017-06-09 8:53
# tesone.py

import requests
import unittest
import time
from jiaoben import jball
class testclassone(unittest.TestCase):
    def setUp(self):
        print(111)
        pass
    def test_1(self):
        jball()  # 执行脚本
        pass
    def tearDown(self):
        print(333)
        pass


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

마지막으로 첨부된 것은 사용 사례 실행 후의 렌더링입니다.

위 내용은 python+requests+unittest API 인터페이스 테스트 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.