内容:ガイド
序文
2 つの一般的なインターフェイス依存関係の処理方法
1. リクエストボディのフィールドは
状況に応じて異なりますが、ほとんどの場合は現在テストされているインターフェイスにあり、継続して使用するには、その前のインターフェイスのリクエストボディのフィールドを現在のインターフェイスのリクエストボディで使用する必要があります。
たとえば、ユーザー情報を変更するためのインターフェイスは、ユーザー作成時にリクエストボディで渡されるユーザー名のフィールドを使用します。ユーザー作成用のインターフェイスのリクエストボディをパラメータ化して、ユーザー名を動的に生成できるようにします。 。
ユーザー情報を変更するインターフェースが実行されるたびに変更されるため、以前のインターフェースのパラメーター化をそのまま使用すると、必然的に 2 つのユーザー名が異なってしまい、インターフェースの実行に失敗します。したがって、このタイプのインターフェイスでインターフェイスの依存関係処理を実行するには
インターフェイスの依存関係をテスト クラスのコードで直接処理します。
if case["check_info"] == 'user_info':
user_name = json.loads(new_data)['name']
case_logger.info("{:-^50s}".format(f"user_name:{
user_name}"))
setattr(do_re, 'user_name', user_name)
2. レスポンスボディフィールドの依存関係 インターフェースの
依存関係では、レスポンスボディフィールドを次のインターフェースで使用する方法が未だによく使われており、前のインターフェースがget型のクエリインターフェースである場合が多く、インターフェースのレスポンスボディから取得します。対応するフィールドを取得し、次のインターフェイスのリクエスト本文で使用するために取得します。
インターフェイスの依存関係をテスト クラスのコードで直接処理します。
if case["check_info"] == 'get_op_svc_servicestage_domainId':
op_svc_servicestage_domainId = res.json()['user']['domain']['id']
case_logger.info("{:-^50s}".format(f"op_svc_servicestage_domainId:{
op_svc_servicestage_domainId}"))
setattr(do_re, 'op_svc_servicestage_domainId', op_svc_servicestage_domainId)
ファイルをアップロードする必要があるタイプインターフェイスを処理します。
1. インターフェイス分析
ここでは、フロントエンドに直接アップロードし、Chrome ブラウザの F12 開発ツールを介してパッケージをキャプチャすると、アップロード ファイル インターフェイスのリクエストと対応する情報が表示されます。これは会社のプロジェクト インターフェイスであるため、いくつかのモザイク処理を行います。
リクエストパラメータをもう一度見てください。
リクエストから、リクエスト メソッドが multipart/form-data フォーム形式であることがわかり、ファイルはアップロードされていますが、リクエスト パラメータにファイル パスとファイル名が表示されておらず、fileList の値が「binary」であることがわかります。 , すると、アップロードされたファイルのバイト内容を知ることができます
2. Postman の例
postman を例として、本文に form-data オプションを選択し、キーに fileList[] を入力して形式をファイルとして選択し、値にアップロードするローカル ファイルを選択して、リクエストを開始します。
3. リクエストの例
ツールを使用してファイルをアップロードするリクエストを実装しました。postman はリクエストを Python コード形式に変換できます。
具体的な手順は次のとおりです:
まず、postman を使用してパラメータを構築し、正常にデバッグします。
保存ボタンの下にあるコードをクリックします。
言語を Python - リクエストとして選択した後、コードをコピーします。
コピーしたコードをPycharmまたはVSコードの開発ツールに貼り付けて実行します
import os
import requests
from Commons.constants import UPLOAD_DIR
url = "https://接口地址/1.0/product/style-gallery"
payload = {
}
files = [
('fileList[]', open(os.path.join(UPLOAD_DIR, 'stylegallery.png'), 'rb'))
]
headers = {
}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text.encode('utf8'))
これまでのところ、ファイル アップロード インターフェイスの処理は完了しており、二次開発のためにこれに基づいて後続のテストやインターフェイスの自動化を実行できます。
4. 解決策 2
上記の方法で問題が解決しない場合は、2 番目の方法を使用してください。基本的には問題ありません。
ファイルをアップロードするためのリクエストの内容を見てみましょう。
次に、次のテンプレートをリクエスト ライブラリのリクエスト パラメータ ファイルの値に適用します。
files = {
'${name}': ('${filename}', open( '${filepath}', 'rb'), '${Content-Type}')
}
${name}: 名前「fileList[0]」の値
${filename}: ファイル名「a.jpg」の値
${filepath}: ファイル名のファイルパス
${Content-Type}: コンテンツタイプ値「image/jpeg」は、
テンプレートに対応する変数を実際の値に置き換え、次のようになります。
files = {
'fileList[0]': ('a.jpg', open(os.path.join(UPLOAD_DIR, 'a.jpg'), 'rb'), 'image/jpeg')
}
注: ファイル パスが正しいかどうかを確認するために、ここでは相対パスを使用し、ファイルを対応するリクエストのメソッドに渡します。
以下は、私がまとめた 2023 年の最も完全なソフトウェア テスト エンジニア学習知識アーキテクチャ システム図です。 |
1. Pythonプログラミングの入門から習得まで
2.インターフェース自動化プロジェクトの実戦
3. Web自動化プロジェクトの実戦
4. アプリ自動化プロジェクトの実戦
5. 一流メーカーの再開
6. DevOps システムのテストと開発
7. 一般的に使用される自動テストツール
8、JMeterのパフォーマンステスト
9. まとめ(最後にちょっとしたサプライズ)
風や雨を経験せずにどうやって虹を見ることができますか、どうすれば自分を鍛えずに達人になれるでしょうか。夢を貫き、卓越性を追求すれば、闘争のペースは決して止まることはありません。夜明け前には必ず栄光が待っています。
闘争は刃を研ぐ砥石のようなもの、努力は進むべき道を照らす太陽のようなもの。挑戦を恐れず、卓越性を追求し、たゆまぬ努力を続けてこそ、自分を超え、人生の輝きを開花させ、闘いの旅路で夢を限りなく輝かせることができるのです!
闘いの旅では、失敗を恐れないでください、なぜなら、すべての転落はより強く立ち上がる機会だからです; 成長は繰り返しの試みによって蓄積されるので、完璧を追い求めないでください。勇気と粘り強さがある限り、夢に向かってしっかりと進んでいきます。