ホームページ > バックエンド開発 > Python チュートリアル > Python+requests+unittest APIインターフェイスのテストの問題

Python+requests+unittest APIインターフェイスのテストの問題

怪我咯
リリース: 2017-06-23 14:04:13
オリジナル
2301 人が閲覧しました

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'));--"],
         }
ログイン後にコピー
# gongju.py をツール クラスとして後で直接追加できるようになり、次のメソッドが簡単に呼び出せるようにカプセル化されます。パラメータの組み合わせを実現し、辞書型パラメータのさまざまな組み合わせを生成し、簡単にアクセスできるように辞書パラメータをリストに保存します。

#!/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 ファイルはユースケースの実行ファイルとして使用されます。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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート