3,000 ワードの記事で 0 から 1 までの模擬テスト (推奨問題集)

モックとは何ですか?

模擬テストは、制御された方法で実際のオブジェクトの動作をシミュレートすることです。プログラマは通常、自動車の設計者が衝突試験用のダミー人形を使用して車両衝突時の人の動的な動作をシミュレートするのと同じように、モック オブジェクトを作成してオブジェクト自体の動作をテストします。

モックを使用する理由

模擬テストが使用される理由は、実際のシナリオを実装するのが難しい、または短期間での実装が難しいためです。主なシナリオは次のとおりです。

  • 実際のオブジェクトはまだ存在していない可能性があります (インターフェースはまだ開発されていません)

  • 実際のオブジェクトを構築するのは難しい (サードパーティ支払いの共同デバッグ)

  • 実際のオブジェクトの動作はトリガーされにくい (ネットワークエラーなど)

  • 実際のオブジェクトが遅い (例: 完全なデータベース。テスト前に初期化する必要がある場合があります)

  • 実際のオブジェクトには、(実際の作業ではなく) テストには使用できない情報やメソッドが含まれている可能性があります。

  • 実際のオブジェクトはユーザー インターフェイス、またはユーザー ページを含みます

  • 実際のオブジェクトはコールバック メカニズムを使用します

  • 現実のオブジェクトの動作は非決定的です (現在時刻や現在の温度など)

モックの使い方は?

コードを通じて偽の出力 (結果) を作成する

インターフェース自動テストクライアントのモック

コードを使用して偽のインターフェイスをシミュレートし、データを返します(実際のインターフェイスにアクセスするプロセスは省略できます)

栗の例です。リクエスト インターフェイスをテストするには、インターフェイスにアクセスします。実際、開発作業はまだ完了していません。最初にテスト ケースを作成し、データが空になるように準備してから、テスト ケースを実行します。インターフェイスが開発され、情報などの対応するコンテンツ内のデータ、実際の結果などが実行されるように変更されます

visit メソッドは、base.py モジュールの APICase クラスの下にあります。

import unittest
from common.base import APICase


class TestRequest(unittest.TestCase, APICase):
def test_request(self):
"""
1.准备接口接口访问的数据
2.调用接口访问visit方法
3.断言
"""
info = {"headers": "", "json": "", "expected": ""}
# actual = self.visit(info)
actual = ""
self.assertEqual(info['expected'], actual)

モックはPythonのサードパーティライブラリであるため、モックを使用する前にインストールする必要がありますpip install mock

コードを次のように変更します。

import unittest
from common.base import APICase
from mock import Mock


class TestRequest(unittest.TestCase, APICase):
def test_request(self):
"""
1.准备接口接口访问的数据
2.调用接口访问visit方法
3.断言
"""
info = {"headers": "", "json": "", "expected": ""}
self.visit = Mock(return_value="")
actual = self.visit(info)
# actual = ""
self.assertEqual(info['expected'], actual)

操作結果:

インターフェイスが開発されていない場合は、モックによって返されるコンテンツが呼び出されるため、このコード行を直接記述します。

actual = self.visit(info)インターフェースの開発が完了したら、このコード行をコメントアウトするだけです。

self.visit = Mock(return_value="")返されるデータを設定したい場合は、次のようにすることも可能です

前のテスト登録インターフェイスを例として、コードを次のように変更します。

import unittest
import requests
from mock import Mock


class TestRegister(unittest.TestCase):
def test_register_01(self):
'''步骤:
1.准备测试数据
2.发送接口请求,得到实际结果
3.预期结果和实际结果的断言
'''
# 1.准备测试数据
url = 'http://api.lemonban.com:8766/futureloan/member/register'
method = 'post'
headers = {'X-Lemonban-Media-Type': 'lemonban.v2'}
json_data = {"mobile_phone": "", "pwd": "12345678"}
expected = {
"code": 1,
"msg": "手机号为空",
"data": None,
"copyright": "Copyright 柠檬班 © 2017-2020 湖南省零檬信息技术有限公司 All Rights Reserved"
}
# 2.发送接口请求,得到实际结果
# 因为执行了Mock,所以就不会执行请求真实的接口了
requests.request = Mock(return_value=expected)
response = requests.request(method=method, url=url, headers=headers, json=json_data)
# mock返回的是expected的内容,因此是dict,所以实际结果要把之前代码上的.json去掉
actual = response
# 3.预期结果和实际结果的断言
self.assertEqual(expected, actual)

偽のインターフェイスにアクセスするには、2 つのコードを変更するだけで済みます。

次のコード行を追加します

requests.request = Mock(return_value=expected)次のコード行を変更します

actual = response.json() 着替える actual = response

サービスモック(モックサーバー)

方法 1:

開発されたインターフェースはサーバー、つまり実サーバー上にあります

開発者のふりをして、偽のサーバーを作成し、モックーン ツールを通じて実現できる偽のインターフェイスを作成するだけです。

公式Webサイトに直接アクセスしてダウンロードしてインストールしてください

モックーンを開き、リクエストメソッド、URL、返却内容を設定し、サービスボタンをクリック

この時点で、サービスインターフェイスをリクエストできます

方法 2:

開発技術をテストし、実際のサービスを自分で作成すると、より多くの応答に対応でき、多くの手順が省略されます。

コードでサービス インターフェイスを作成する

from flask import Flask

app = Flask("py44")


@app.route('/member/register', methods=['post'])
def register():
return {"code": 11, "msg": "success"}


app.run(debug=True)

操作結果:

サービスはコードの実行時にのみ開始されます

この時点で、サービスインターフェイスをリクエストできます

方法 2 の柔軟性は、リクエスト本文の設定など、より多くの応答をサポートできることです。

from flask import Flask, request

app = Flask("py44")


@app.route('/member/register', methods=['post'])
def register():
username = request.form.get('username')
password = request.form.get('password')
if username == 'momo' and password == '123456':
return {"code": 11, "msg": "success"}
return {"code": 22, "msg": "failed"}


app.run(debug=True)

サービス開始後、郵便配達員を利用してリクエストしてください


 乏しい力を終わらせる

最後に、私の記事を注意深く読んでくださった皆さんに感謝します。ファンの成長と関心をずっと見ていると、相互主義が常に必要になります。それほど価値のあるものではありませんが、もしあなたがそれを持っていれば、それを奪うことができますそれが必要:

これらの資料は、[ソフトウェア テスト] の友人にとって最も包括的で完全な準備倉庫となるはずです。この倉庫は、最も困難な旅を乗り越える何万人ものテスト エンジニアにも同行してきました。あなたにも役立つことを願っています。

加入我的软件测试交流群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

ソフトウェアテストインタビューアプレット

ソフトウェア テストの質問バンクには、何百万人もの人が参加しました。誰が知っているのか!ネットワーク全体で最も包括的なクイズ ミニ プログラムです。携帯電話を使用して、地下鉄やバスの中でもクイズに答えることができます。

次の面接の質問セクションが取り上げられます。

1. ソフトウェアテストの基礎理論、2. Web、アプリ、インターフェース機能テスト、3. ネットワーク、4. データベース、5. Linux

6. Web、アプリ、インターフェイスの自動化、7. パフォーマンス テスト、8. プログラミングの基本、9. 時間面接の質問、10. 公開テストの質問、11. セキュリティ テスト、12. コンピューターの基本

入手方法:

おすすめ

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