Python インターフェイスの自動テスト
リクエスト
requests.post() データと json の違い
postdata = {
'jobId': '1',
'jobType': 'predict',
'targetClass': 'vm',
'targetId': 123}
requests.post('http://127.0.0.1:5000/api/getPredictInfo', json=postdata,
headers={
'Content-Type': 'application/json'})
或者
requests.post('http://127.0.0.1:5000/api/getPredictInfo', data=json.dunps(postdata))
データ パラメーターはフォーム パラメーターを意味します。デフォルトの要求ヘッダーは Content-Type: application/x-www-formurlencoded、要求パラメーターの形式: (k1=v1&k2=v2)、パラメーターは純粋なキーと値のペアの辞書です。など:
{key1:value1,key2:value2}
データ パラメータはテキスト パラメータを意味します: デフォルトのリクエスト ヘッダー: text/plain。パラメータ: str 型
json pass パラメータは json pass パラメータを意味します: デフォルトのリクエストヘッダー: application/json, パラメータは dict 型
json はキーと値のペアとリストを含む Dict 型です
ファイルのアップロード
postdata = {
'midea':open('./test.jpg',"rb")}
requests.post('http://127.0.0.1:5000/api/getPredictInfo', files=postdata)
クッキーでテスト
rep= requests.get()
通过get请求获取到登陆的token,然后登陆测试
headers = {
"Accept":"aplication/json,text/javascript,*/*;q=0.01",
"X-Requested-With":"XMLHttpRequest"}
rep = requests.post(url,data=data,headers=headers,cookies=rep.cookies)
同じセッションで複数のリクエスト テストを完了する
requests.post
上記などをrequests.get
次のように置き換えることができます
requests.session().request("post",xxx)
requests.session().request("get",xxx)
この統一requests.post
されたインターフェースはrequests.request()
パイテスト
1. モジュール名は test_ または _test で始める必要があります
2. テスト クラスは Test で始める必要があり、init メソッドを持つことはできません
3. テスト メソッドは test_ で始める必要があります
4. Pytest には多くの強力なプラグインがあります。pip install
インストール
pytest-html 簡単なレポートを生成する
pytest-xdist マルチスレッド
pytest-orderding テスト ケースの実行順序を制御する
pytest-rerunfailures 失敗したケースを再実行する
pytest-base-url ベース パスの設定
allure-pytest 魅力的なレポートを生成する
コマンドライン
pytest -vs
pytest -k “add” 执行所有测试用例名中含有“add”的用例
pytest - s 打印测试用例中print语句
pytest -v 增加打印细节
pytest - x 一旦发现失败用例,停止运行
pytest -maxfail=2 当测试遇到两条失败,立刻停止运行
pytest -m “标签名” 给测试用例加标签
pytest -n 多线程(需要安装pytest-xdist)
pytest --reruns=2 失败用例重跑2次
pytest --html='./report.html' 生成简易报告
構成ファイル
注:
1. コマンド ラインでもメイン関数でも、この構成ファイルは自動的に読み込まれます
2.pytest.ini
ファイルは pytest のデフォルトのテスト ケース ルールを変更できます
3. このファイルは通常、プロジェクトのルート ディレクトリに配置されます
[pytest]
#配置参数
addopts = ‐vs
#配置测试用例文件夹
testpaths = ./testcases
#配置测试模块的规则
python_files = test_*.py
#配置测试类的规则
python_classes = Test*
#配置测试方法的规则
python_functions = test_*
#配置接口测试的基础路径
base_url = http://127.0.0.1/
#给用例分组
markers =
smoke:冒烟测试
usermanage:用户管理
Smoke とユーザー管理では、ユース ケースにデコレーターを追加する必要があります。
@pytest.mark.smoke
@pytest.mark.usermanage
実行するときは、次を使用する必要があります。
-m 分组名 or 分组名
Pytest テスト ケースのデフォルトの実行順序は上から下ですが、
次のタグを使用してテスト ケースの実行順序を変更できます。@pytest.mark.run(order=1)
パイテストの前提条件
すべてのクラスの前後、すべてのユースケース
def setup_class(self):
print("在类之前的操作")
def teardown_class(self):
print("在类之后的操作")
def setup(self):
print("在所有用例之前的前置操作")
def teardown(self):
print("在所有用例之后的后置操作")
いくつかのユースケースの前または後に実行したい。Fixture
Fixture デコレータを使用した完全な構造は次のとおりです。
@pytest.fixture(scope="作用域",autouser="自动执行",params="数据驱
动",ids="参数别名",name="fixture别名")
scope
: フィクスチャの範囲をマークします
function
: 機能レベル (手動または自動)class
: クラスレベル (通常は自動)module
: モジュール レベル (通常は自動)package/session
:session レベル (通常は自動): 明日のフレームワークの使用をカプセル化します。
autouser=True
params
フィクスチャのデータ駆動型表現のエイリアスを自動的に実装します
name
。エイリアスを使用してエイリアスを作成すると、フィクスチャの元の名前は無効になります。
前述のユース ケースの一部であるテスト ケースは、先行する関数の関数名を直接渡します。
import pytest
# 部分测试用例前置
@pytest.fixture()
def conn_database():
print("连接数据")
yield
print("关闭")
class TestALL:
def test_A(self):
print("test A")
def test_B(self,conn_database):
print("test B")
def test_C(self):
print("test C")
if __name__ == '__main__':
pytest.main(['-vs'])
最適化
通常、フィクスチャは conftest.py ファイルと一緒に使用されます。
conftest.py是专门用于存放fixture的,是固定名称
conftest.py文件的方法使用时不需要导包
conftest.py文件可以有多个
上記の conn_database 関数を、新しく作成された conftest.py ファイルに入れます
@pytest.fixture(scope="session",autouse=True)
def claer_yaml():
YamlUtil().clear_yaml()
claer_yaml
関数は自動的に実行され、パラメーターとして渡す必要はありません
魅力レポートを作成する
1.ダウンロードしてインストールします
2. pip install allure-pytest
3. addopts = ‐vs --allurdir ./temp
# 生成された json ファイルのパスを保存します
4. json を使用してレポートを生成しos.system("allure generate temp -o report")
、レポート ディレクトリに生成します
データ駆動型テスト
import pytest
class TestApi:
@pytest.mark.parametrize("args",["a","b","c"])
def test_api(self,args):
print(args)
if __name__ == '__main__':
pytest.main(['test_2.py'])
郵便屋さん
インターフェイスの関連付け
他のインターフェイスは、次のように、上記のインターフェイスの戻り値を使用する必要があります。
コンテキスト切り替え
動的パラメーターの受け渡し
{
{$timestamp}}
現在の時刻のタイムスタンプを生成する
{
{$randomInt}}
0 ~ 1000 の乱数を生成する (ほとんど使用されない)
{
{$guid}}
省略形の GUID 文字列を生成する
カスタム動的パラメータを
リクエストするときは、{
{time}}
参照を渡します
業務クローズドループ(追加、削除、修正、確認)
グローバル変数を使用してから、グローバル変数への直接参照を削除、変更、およびチェックする
断言
Pre-request-Script
モジュールで
状態アサーション
ビジネスアサーション
テスト タブでは、
グローバル変数は { {}} で取得できませんが、以下の方法でのみ取得できます
. まったく同じアサーションを、各スクリプトで繰り返すことなく、グローバル アサーションとして使用できます
ファイルのアップロード
バッチ テスト
一度に複数のスクリプトをテストする
ファイル アップロード バッチ テスト インターフェース エラー
Postman ソフトウェアの変更設定
Settings
-> General
-> Location
1、開くAllow reading files outside working drectory
2、アップロードしてテストするファイルをデフォルト ディレクトリにコピーします (postman はデフォルト ディレクトリのファイルを読み取ります)。
データ駆動型テスト
一般に、CSV ファイルまたは JSON ファイルを
バッチ テストした場合、返される結果が同じである場合は、以前にパラメーター値が完全に書き込まれている可能性があり、値をParams
取得するために変更する必要があります
ファイル内の変数の数であり、その値はdata.变量名
以前のものではありません。global.
リクエストヘッダーでテスト
パケット キャプチャ ツールTelerik Fiddlerを使用する必要があります
にコピーHeaders
、一部のアドレス、不要な情報を削除
クッキー認証テスト
Cookie とは、クライアントが初めてサーバーにリクエストを送信するときに生成される小さなテキスト情報で、最初のリクエストに含まれてクライアント
に返され、その後のリクエストに含まれます。请求头
没有Cookie
响应头
set-cookie
生成Cookie
请求头
Cookie
郵便配達員は自動的にクッキーを保存します
Postman のモック サーバー サーバー
使用シナリオ: フロントエンドとバックエンドが分離されており、バックエンド インターフェースは完成していないが、フロントエンドは完成しており、フロントエンド ビジネス プロセスはバックエンド インターフェースに依存している
フロントエンドをテストするために自分でバックエンド インターフェイスを作成するのと同じであり、返される情報をカスタマイズできます。
インターフェイス テストの暗号化と復号化
暗号化と復号化のテスト Web サイト
Pre-Script-Request
ドキュメントを暗号化するコードを記述し、それをグローバル変数テストとして設定する
ニューマン
どこにでもある postman のテストケース、グローバル変数、環境変数、データファイル
NewMan インストール
newman run 接口脚本.json -e 环境变量.json -r html --reporter-html-export test.html
ロボットフレーム作業
ロボット フレームワークをインストールする
pip install robotframework
GUI インターフェイスをインストールする
pip install –i https://pypi.douban.com/simple robotframework-ride
カスタム キーワード
新しく作成されたファイルを右クリックします。
新しく作成されたファイルはまだ使用できず、リソース ファイルをスイートにインポートする必要があります。
共通図書館
拡張ライブラリ
1) Web 自動化ライブラリ –Selenium
pip install –i https://pypi.douban.com/simple robotframework- seleniumlibrary
2) API 自動化ライブラリ –requests
pip install -i https://pypi.python.org/pypi/robotframework-requests
3) アプリ自動ライブラリ
pip install robotframework-AppiumLibrary