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 중국어 웹사이트의 기타 관련 기사를 참조하세요!