Black Bear は、インターネット上でインターフェイスのテストに関連する情報を検索しました。そのほとんどは、目的のユース ケースを生成する方法を説明せずに、テキストまたはテーブルでのユース ケースを維持することに重点を置いています。
パラメータa、b、cなどのインターフェースをテストする場合、最初にパラメータaをテストする必要があります。(渡されていない、空、整数、浮動小数点、文字列、オブジェクト、短すぎる、長すぎる、SQLインジェクション) ) これらの状況の 1 つはユースケースです。同時に、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 インジェクション コード セグメントを追加する場合など、型破りなパラメーター (インターフェイスの異常な応答を引き起こす可能性があります) を保存するために使用されます。将来的には、
#!/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'));--"],
}
#!/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
#!/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 ファイルはユースケースの実行ファイルとして使用されます。unittest フレームワークに精通している人は原理を知っているでしょう。 Black Bear は主に、unittest フレームワークと組み合わせることで、その後の拡張を容易にするために使用されます。
#!/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 中国語 Web サイトの他の関連記事を参照してください。