1.Pythonリクエスト
リクエストを解析する主なメソッドは、Python で実装された最もシンプルで使いやすい HTTP ライブラリです。リクエスト ライブラリには 7 つの主要なメソッドがあります。
例: 通常のインターフェイス テストのインターフェイス間には相関関係がないため、変数を直接定義して get リクエストと post リクエストを開始できます。
このうち、POST リクエストは一般的に json と formdata に分けられ、2 つのメソッドのパラメータはスクリーンショットのとおりで、認証が必要な場合は auth パッケージをインポートし、続いてリクエスト メソッドをインポートする必要があります。
1.url: リクエストアドレス
2.data: リクエストの内容としての辞書、バイト列、またはファイルオブジェクト
3.json: リクエストの内容としての JSON 形式のデータ
4.headers: 辞書、HTTP カスタム ヘッダー
5.Cookie: CooKiJarの辞書またはCookie、リクエスト
6.auth: Yuanzu、HTTP 認証機能をサポート
7.ファイル:辞書タイプ、転送ファイル
8.timeout: タイムアウト時間を秒単位で設定します。
9.proxies: 辞書タイプ、アクセスプロキシサーバーを設定、ログイン認証を追加できます
10.allow_redirects: True/False、デフォルトは True、リダイレクト スイッチ
11.stream: True/False、デフォルトは True、コンテンツを取得してスイッチをすぐにダウンロードします
12.verity: True/False デフォルト True、認証 ssl 証明書スイッチ
13.cert: ローカルSSL証明書パス
レスポンスの戻りメソッドの詳細な説明:
1.response.status_code #返された http レスポンスのステータス コード
2.response.content #バイナリデータであるバイト型を返します
3.response.headers #返された http リクエスト ヘッダー
4.response.json() # 応答で Json データを返します
5.response.url # 戻りURL
6.response.encoding #レスポンスのエンコード形式を返す
7.response.cookies # 応答で Cookie を返します
8.response.text #Unicode データを返します。 - -文章
セッションの詳細説明:
前のリクエストからトークンを取得し、それを次のインターフェースリクエストの送信用パラメータとして使用するなど、フロントインターフェースとリアインターフェースへの依存関係が必要なインターフェーステストの場合、上記の方法は明らかに不適切です。定義する必要があり、依存関係に基づいて対応するリクエストパラメータに追加するために、次のメソッドはセッションメソッドを使用します。前後に実行されます。一度追加すれば、すべてで使用できます。リクエスト。(プロジェクトでは Cookie を使用する必要がないため、content-type と User-Agent がここに含まれます)
import json
import warnings
import requests, unittest
class TestCase_auto003(unittest.TestCase):
def setUp(self) -> None:
# 解决错误 ResourceWarning: Enable tracemalloc to get the object allocation traceback
warnings.simplefilter('ignore', ResourceWarning)
self.s = requests.session()
# dict = json.dumps({"mobile": "18673844852", "pwd": "123456"})
# header = {"Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", "Content-Type": "application/json",
# "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"}
# rsp = self.s.post('http://192.168.1.173:28082/register/login/pws', data=dict, headers=header)
# self.s.headers['Cookies'] = rsp.headers['Cookies']
self.s.headers['User-Agent'] = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36"
self.s.headers['Content-Type'] = "application/json"
def testcase_auto001(self):
dict = json.dumps({"mobile": "18673844852", "pwd": "123456"})
rsp = self.s.post('http://192.168.1.173:28082/register/login/pws', data=dict)
print(rsp.text)
self.assertEqual(200, rsp.status_code, msg='pass')
def testcase_auto002(self):
dict = json.dumps({"bid": 96497, "uid": 96497})
rsp = self.s.post('http://192.168.1.173:28082/versions/dynamic/personal', data=dict)
print(rsp.text)
if rsp.status_code == 200:
print("pass")
else:
print("fail")
def tearDown(self) -> None:
pass
if __name__ == "__main__":
unittest.main()
説明: 1. これは cynthia 障害管理システムです。ログイン時に、応答内の cookie を次のリクエストの cookie として取得する必要があります。取得しないとログインできません。2. したがって、unittest 構造では、ログイン操作をセットアップに配置することができ、UI オートメーションと同様に、ログインは初期化に配置されます。3. セットアップでは、リクエストに対するレスポンスの Cookie 値を追加し、ブラウザ UA も追加します。4. パラメータの再利用が可能で、最初から最後まで要求する変数はすべてrsp、ボディ内のパラメータはすべてdictであり、記述が簡単で便利です。
1. 変数 s がリクエストと等しいセッションを定義します。この s のセッションは、後でリクエストを開始するために使用されます。 2. 要求結果を開始するには、s に等しい rsp に等しい変数を定義します。 3. トークン ID をセッション要求のヘッダー ファイルの Cookie に追加する必要があります。追加しないとログインできません。この ID は RSP 応答情報に含まれています。 4. レスポンス情報はjson辞書形式のため、スクリーンショットの形式に合わせてリクエストヘッダーに追加する必要があります。 5. フィールドまたはコンテンツを辞書に追加する必要がある場合は、スクリーンショットの形式に従ってください s.headers['xxx'] = "xxx". 辞書にこのキー: 値がある場合、値の値は次のようになります。直接更新されます。そのようなキーがない場合は、このキー:値を辞書に追加します。 インターフェースの練習 セッションを使用してヘッダー ファイルにトークンを追加します。会社の実際のプロジェクトでは、インターフェイスを呼び出すときに最初にトークンを取得する必要があります。最初にリクエストを呼び出してトークンを取得する必要があります。次に、トークン値を取得した後、それを後続のインターフェイスのヘッダー ファイル。
self.session.headers.update({"token":rsp.json()['data']['token']})
セットアップの初期化メソッドで Get Token を呼び出すと、トークン値を取得してセッション全体の先頭に追加できるため、後続のリクエストで追加の先頭を追加する必要はありません。
ddt を使用してインターフェイスのテスト ケースをパラメータ化する
ddt データ駆動型テストの場合、最初に ddt を pip リストし、サードパーティ ライブラリをインストールし、ddt からコードの先頭でライブラリにデータをインポートします。 import ddt, data、テスト クラスの前で ddt を宣言し、@ddt を使用します。
1. テストケースの前にデータの使用を宣言します。@data を使用します。
実行結果では、このユースケースが2回実行され、それぞれtest1とtest2が出力されます。
2. ファイルの読み取りデータ使用量:
このメソッドは解凍が必要なので、テストケースの前に @unpack を宣言するだけで unpack メソッドを使用する必要があります。
説明する
1: ファイルを読み取るメソッドを定義し、リスト配列を定義し、file 関数の open メソッドを使用し、「txt1」という名前のファイルを read 形式で読み取り、エンコード形式は utf-8 で、for ループを使用します。ループ内の各行を読み取り、\n 改行文字で終了し、各パラメーターをカンマで区切って、最後に以下の直接呼び出し用のデータ値を返します。
2: 上記の読み取りメソッドを記述した後、このメソッドをテスト ケースの直前に @data (*readfile ()) の形式で使用し、その後 @unpack 解凍メソッドを使用します。
3. request+unittest+HTMLTestRunner はテスト レポートを生成します
上記の方法でテストケースを記述した後、unittestフレームワークのHTMLTestRunnerを組み合わせてレポートを生成し、インターフェーステストレポートを生成します。
4. まとめ
このチュートリアルはインターフェイス テストにおける小さなテストにすぎません。今後も学ぶべきことはたくさんあります。リクエスト ライブラリはインターフェイス テストだけでなく、クローラなどにも使用できます。テクノロジーへの道は決して終わりません。テスターももっと努力する必要があります。
高度な Python インターフェイス自動化テストのための重要なチュートリアル (2023 年のネットワーク全体について最も詳細なチュートリアル)