インターフェイス自動化フレームワーク: 暗号化されたインターフェイスに基づくプロセスのカプセル化とテスト ケースの設計

インターフェイスのテストでは、Request やその他の強力なライブラリの使い方をマスターするだけでは十分ではなく、企業のビジネス プロセスやニーズに応じてインターフェイス自動テスト フレームワークをカスタマイズする能力も必要です。そこで次に、インターフェイスのテストケース分析と一般的なプロセスのカプセル化がどのように完了するかを主に紹介します。

インターフェーステストケースの分析

まず、ユースケース分析を行う前に、過去 1 年間の社内の障害の原因をすべて追跡し、問題の原因を特定したり、CTO、プロダクト マネージャー、研究開発、運用の調査を通じて品質の問題点を把握したりできます。また、ビジネス アーキテクチャを分析して呼び出しを処理することもできます。また、監視システムはビジネスの使用状況データを理解して、品質要件を取得します。

品質要件を取得した後、プロダクトマネージャー、プロジェクトマネージャー、研究開発ディレクターなどとのドッキングを通じて、テスト対象のビジネス範囲、ビジネスシナリオのユースケース、ビジネスインターフェイス分析について学び、企業のテスト計画を決定できますテスト計画と分析の品質要件を組み合わせることで、ビジネス ユース ケースの設計を開始できます。インターフェイス テスト ケースの分析も含まれます。

品質要件 サンプル
問題点をテストする 同社のインターフェースが不安定で、ユーザーの使用に影響を与えている
品質のフィードバック 過去6か月間で大きな失敗がいくつかありました
回帰試験 アップグレードするたびに古い機能に影響が及びます
テスト戦略 現在、同社には信頼できるテストシステムがありません
リファクタリングテスト マイクロサービスの変革には優れたテスト システムの保証が必要です

インターフェイステストのカプセル化のアイデア

インターフェイスのカプセル化の考え方は、主に、構成、インターフェイスのカプセル化、ビジネス プロセスの3 つの主要な側面に分かれています。の:

  • 構成は主に、構成ファイルに基づいて初期構成と依存関係を取得するために使用されます。
  • インターフェイスのカプセル化は、 APIObject 設計パターンに従ってインターフェイス呼び出しを抽象化してカプセル化します。
  • ビジネス プロセスは、複数の API によって形成されるプロセス定義を含む、データの初期化とビジネス ユース ケースの設計を担当しますが、インターフェイス実装の詳細やアサーションは含まれません。

以下、実戦事例を交えて詳しく紹介していきます。

暗号化されたインターフェースに基づくテストケースの設計

情報セキュリティ上の理由により、多くのインターフェイスは送信中にリクエストとレスポンスを暗号化しますが、データのこの部分を直接アサートすることは明らかに現実的ではありません。復号化されたインターフェイスをアサートする前に、インターフェイスのこの部分で追加の復号化処理を実行することも必要です。

環境整備

実際の戦闘の前に、応答を暗号化するためのインターフェイスを準備する必要があります。これに対する get リクエストを開始すると、暗号化された応答メッセージが取得されます。

まず、JSON 形式でデモを準備します。

{"topics":
{
"orange":"movie",
"shool":"testing-studio",
"president":"seveniruby"
}
}

Base64で暗号化して、暗号化ファイルdemo64.txtを取得します。

base64 demo.json >demo64.txt

Python コマンドを使用して、「demo64.txt」が配置されているディレクトリでサービスを開始します。

python -m http.server 10000

起動後はこんな感じです。

このサービスに対して get リクエストを行うには、curl コマンドを使用します。

curl http://127.0.0.1:10000/demo64.txt

リクエストが成功した場合は、環境が正常に準備されたことを意味します

戦闘訓練

Base64 を呼び出し、返されたリクエストを直接復号化し、復号化された応答を取得します。復号化された応答を JSON 形式に変換します。この時点で、エラーを報告せずに戻り値に対してアサーションを行うことができます。

import base64
import json
import requests
class TestEncode:
    url = "http://127.0.0.1:10000/demo64.txt"
    def test_encode(self):
        r = requests.get(self.url)
        encode = json.loads(base64.b64decode(r.content))
        assert encode["topics"]["president"] == "seveniruby"

この書き方は明らかに十分にエレガントではありません。テスト対象のインターフェイスのプロトコルが変更された場合、Requests ライブラリは変更されたプロトコルをサポートできず、リクエスト情報を送信するために別の 3 番目のライブラリを呼び出す必要があり、基礎となるソース コードは引き続き必要になります。変更される予定です。この場合、カプセル化の層を追加して、より一般的な送信方法を構築できます。

まず、送信プロトコル、デコード方法、リクエスト方法など、すべてのリクエスト情報を辞書構造に保存する必要があります。この辞書構造は、その後のデータ駆動型変換の重要な基盤にもなります。

 req_data={
            "schema": "http",
            "method": "get",
            "url": "http://127.0.0.1:10000/demo64.txt",
            "headers": None
        }

リクエスト情報の構造に判定条件を追加することでschema、異なるリクエストプロトコルを選択することができます。たとえば、  schema 「http」の場合は、カプセル化されたリクエスト ライブラリを呼び出すことを選択します。

class ApiRequest:
    #构造send方法,通过
    def send(self, data: dict):
        if "http" == data["schema"] :
            res = requests.request(data["method"],data["url"],header=data["headers"])
            return json.loads(base64.decode(res.content))
        elif "dubbo" ==  data["schema"]:
            pass
        elif "websocket" == data["schema"]:
            pass
        else:
            pass        

クラス内の send メソッドを呼び出してApiRequestリクエストを送信し、アサーションを作成します。

class TestEncode:
   def test_api(self):
        req_data={
            "schema": "http",
            "encoding": "base64",
            "method": "get",
            "url": "http://127.0.0.1:10000/demo64.txt",
            "headers": None
        }
        re = ApiRequest()
        data = re.send(req_data)
        assert data["topics"]["president"] == "seveniruby"

異なるアルゴリズムに直面した場合は、基礎となるソース コードを変更する必要があるため、アルゴリズムをカプセル化する必要があります。必要なアルゴリズムを使用してください。カプセル化の考え方は上記と同じです。まず、選択されたさまざまな暗号化条件を判断するためのフィールドを辞書構造に追加します encoding 。

 req_data={
            "schema": "http",
            "method": "get",
            "url": "http://127.0.0.1:10000/demo64.txt",
            "headers": None,
            "encoding": "base64"
        }

リクエスト情報の構造に encoding判定条件を追加することで、異なる復号方法を選択することも可能です。

class ApiRequest:
    def send(self, data: dict):
        if "http" == data["schema"] :
            res = requests.request(data["method"],data["url"],headers=data["headers"])
            return json.loads(base64.b64decode(res.content))
            #通过请求信息的结构体中的`encoding`,去选择不同的解密方式。
            if data["encoding"] == "base64":
                return json.loads(base64.b64decode(res.content))
            elif data["encoding"] == "private":
                return json.loads(requests.post("url", data=res.content).content)
            else:
                return json.loads(res.content)

要約する

まず第一に、暗号化された応答結果に直面してどのような種類の処理方法を使用できるかを明確にする必要があります。

  1. どの一般的な暗号化アルゴリズムが使用されているかがわかっていれば、自分で解決できます。
  2. 対応する暗号化アルゴリズムがわからない場合は、R&D に暗号化および復号化用のライブラリの提供を依頼できます。
  3. それが一般的な暗号化アルゴリズムではなく、R&D が暗号化ライブラリと復号化ライブラリを提供できない場合は、暗号化当事者がリモート分析サービスを提供できるため、アルゴリズムの機密性は保たれます。

この記事では、暗号化アルゴリズムの使用を理解する場合に、このような復号化アルゴリズムにどのように対処するかを主に説明します。ただし、カプセル化の考え方は同じで、どのような状況に直面しても、フォーマットされたデータを通じてデータの内容を指定し、論理カプセル化の層を通じて暗号化、復号化、または選択したプロトコルをカプセル化できます。 。

最後に:熱心なファンに恩返しするために、完全なソフトウェア テスト ビデオ学習チュートリアルを作成しました。必要な場合は、無料で入手できます。【保证100%免费】

ソフトウェアテストの面接ドキュメント

私たちは高給の仕事を見つけるために勉強しなければなりません。次の面接の質問は、アリ、テンセント、バイトなどの一流インターネット企業からの最新の面接資料であり、一部のバイトの上司が権威ある回答をしています。このセットを完了してください。面接資料は次のとおりです。誰もが満足のいく仕事を見つけることができると信じています。

おすすめ

転載: blog.csdn.net/jiangjunsss/article/details/131595915