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

【ソフトウェアテスト面接短期集中コース】ソフトウェアテストの8部構成の小論文チュートリアルを1週間で強制的に終わらせる方法 面接終了後は安定、高収入のソフトウェアテストエンジニア(自動テスト)にもなれる

1.模擬実装原理と実装メカニズム

バックエンドがインターフェースを開発しているとき、処理ロジックが非常に複雑になることがありますが、テストする場合、インターフェースを完成させずにバックエンドでどのようにテストすればよいでしょうか?

テストする必要がありますが、一部のリクエストでは、ステータス コードの変更、生成された画像の置き換え、実行ファイルの置き換えなど、パラメータを変更したり、リクエストの実装方法を変更したりする 必要があります。

モックの紹介

Mock という言葉は英語でシミュレーションを意味するので、このライブラリの主な機能は何かをシミュレートすることであると推測できます。正確に言うと、Mock は単体テストをサポートするために使用される Python のライブラリであり、その主な機能は、モック オブジェクトを使用して指定された Python オブジェクトを置き換え、オブジェクトの動作をシミュレートすることです。

プロジェクトの単体テスト プロセス中に、次のような問題が発生します。

1. インターフェースの依存関係

2. 外部インターフェース呼び出し

3. テスト環境は非常に複雑です

単体テストは現在のユニットのみをテストする必要があります。すべての内部または外部の依存関係は安定していて、他の場所でテストされている必要があります。モックを使用すると、外部依存コンポーネントの実装をシミュレートして置き換えることができるため、単体テストは現在のユニットのみに焦点を当てます。ユニット機能。

テストの依存関係を解決する

たとえば、モジュール A をテストすると、モジュール A はモジュール B の呼び出しに依存します。ただし、モジュール B の変更により、モジュール A から返される結果が変更され、モジュール A のテスト ケースが失敗します。実際、モジュール A とモジュール A のユースケースには変更がないため、失敗することはありません。

ここでモックが活躍します。モックを使用して、モジュール A (モジュール B) に影響を与える部分をシミュレートします。モック化された部分 (モジュール B) については、他のユースケースでテストする必要があります。

import requests
from unittest import mock
 
def request_lemonfix():
    """
    :return:
    """
    res = requests.get('http://www.baidu.com')
    return res.status_code.encode('utf-8')
 
 
if __name__ == '__main__':
    request_lemonfix = mock.Mock(return_value="我已经替换了数据")
    print(request_lemonfix())
    
结果:
我已经替换了数据
    ```
 
2. モックの単純なケース実装
  • 基本的なスキル
# function.py
def multiply(x, y):
return x * y
 
def add_and_multiply(x, y):
    addition = x + y
    multiple = multiply(x, y) # 回调函数
    return (addition, multiple)
  • add_and_multiply() 関数のテスト ケースを作成する
import mock
import requests
import unittest
 
url = "www.baidu.com/login"
data = {
    "user_id": "001",
    "password": "caichen"
}
 
 
def post_request(url, data):
    """登陆百度账号"""
    res = requests.post(url, data).json()
    return res
 
 
class TestLogin(unittest.TestCase):
    """单元测试"""
    def setUp(self) -> None:
        print("case开始执行")
 
    def tearDown(self) -> None:
        print("case执行结束")
 
    def test_01(self):
        """模拟数据判断是否正确"""
        url = "www.baidu.com/login/tieba"
        data = {
            "user_id": "001"
        }
        sucess_test = mock.Mock(return_value=data)
        post_request = sucess_test
        res = post_request
        self.assertEqual("654321", res())
        # self.assertEqual({'user_id': '001'},res())
 
 
if __name__ == '__main__':
    unittest.main()
 
# 错误结果
F
case开始执行
======================================================================
case执行结束
FAIL: test_01 (__main__.TestLogin)
模拟数据判断是否正确
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:/Users/x1c/Desktop/untitled/mocktest.py", line 35, in test_01
    self.assertEqual("654321", res())
AssertionError: '654321' != {'user_id': '001'}
 
----------------------------------------------------------------------
Ran 1 test in 0.001s
 
FAILED (failures=1)
 
# 正常结果
case开始执行
.
case执行结束
----------------------------------------------------------------------
Ran 1 test in 0.000s
 
OK
 
 
3.mockはデータ取得シミュレーションを実装します
举个例子来说:我们有一个简单的客户端实现,用来访问一个URL,当访问正常时,需要返回状态码200,不正常时,需要返回状态码404。首先,我们的客户端代码实现如下:
 
```
import requests
 
 
def send_request(url):
    r = requests.get(url)
    return r.status_code
 
 
def visit_ustack():
    return send_request('http://www.ustack.com')
```
 
# 外部模块调用visit_ustack()来访问baidu的官网。下面我们使用mock对象在单元测试中分别测试访问正常和访问不正常的情况。
```
import unittest
import mock
import client
 
 
class TestClient(unittest.TestCase):
 
def test_success_request(self):
    success_send = mock.Mock(return_value='200')
    client.send_request = success_send
    self.assertEqual(client.visit_ustack(), '200')
 
def test_fail_request(self):
    fail_send = mock.Mock(return_value='404')
    client.send_request = fail_send
    self.assertEqual(client.visit_ustack(), '404')
    
```

1. 置き換えるオブジェクトを見つけます。テストする必要があるのは visit_ustack 関数で、次に send_request 関数を置き換える必要があります。

2. Mock クラスをインスタンス化してモック オブジェクトを取得し、このモック オブジェクトの動作を設定します。テストが成功した場合は、モック オブジェクトの戻り値を文字列「200」に設定し、テストが失敗した場合は、モック オブジェクトの戻り値を文字列「404」に設定します。

3. このモック オブジェクトを使用して、置き換えるオブジェクトを置き換えます。client.send_request を置き換えました。

4. テストコードを作成します。client.visit_ustack() を呼び出し、その戻り値がデフォルトと同じであることを期待します。

上記は、モック オブジェクトを使用するための基本的な手順です。上記の例では、自分で作成したモジュールのオブジェクトを置き換えましたが、標準ライブラリやサードパーティのモジュールのオブジェクトも置き換えることができます。方法は同じで、最初にインポートしてから、指定したオブジェクトを置き換えます。 。

4. Mockとmockrunnerの違い
Mockrunnerは、J2EE環境でのアプリケーションのシミュレーションテストに使用されます。Struts アクション、サーブレット、フィルター、タグ クラスをサポートするだけでなく、EJB ベースのアプリケーションのテストに使用できる JDBC および JMS テスト フレームワークも含まれています。

Mockrunner は JUnit を拡張し、実際のインフラストラクチャを呼び出すことなく必要な動作をシミュレートします。アプリケーション サーバーやデータベースを実行する必要はありません。また、Web コンテナや Struts ActionServlet は呼び出しません。これは非常に高速であり、ユーザーはテストのすべてのステップで、関連するすべてのクラスとモック オブジェクトを操作できます。これを使用すると、オーバーヘッドを発生させることなく、J2EE ベースのアプリケーションの非常に複雑な単体テストを作成できます。Mockrunner は、いかなる種類のコンテナ内テストもサポートしません。

Mockrunner は、web.xml や struts-config.xml などの構成ファイルを読み取りません。Mockrunner API を使用してすべてのパラメータを指定できます。したがって、アプリケーションで使用するセットアップに関係なく、サーブレット、フィルター、タグ、および Struts アクションを再利用可能なコンポーネントとしてテストできます。構成ファイル内の定義をテストできません。これを行う場合は、Struts ベースのアプリケーションまたは Cactus の StrutsTestCase を使用できます。

Mockrunner は、Java バージョン 1.3 から 1.6 と、J2EE 1.3、J2EE 1.4、および JavaEE5 をサポートします。EJB 3.0 はまだサポートされていません。Mockrunner は、Struts バージョン 1.1、1.2、および 1.3 をサポートします。

ダウンロード アドレス: Mockrunner ダウンロード | SourceForge.net

モックランナーは Java 環境を設定する必要があります

コマンドの使用を開始します: java -jar moco-runner-0.12.0-standalone.jar http -p 8801 -c config.json

データを模擬するように config.json ファイルを構成する

[
{
"response" :
  {
    "text" : "Hello, Moco"
  }
}
]
    ```
 
使用命令启动:
java -jar moco-runner-0.12.0-standalone.jar http -p 8801 -c config.json
访问http://localhost:8801
就会显示 Hello, Moco
 

MockRunner は、複雑なリンク ルールを構築することで機能します。

[
{
"request":{
    "uri":"/monitorApplication/alert/confirm",
    "method":"PUT",
    "text":"{\"id\":\"123\"}"
},
"response":{
    "status":200,
    "json":{
        "code":"0",
        "msg":"OK!",
        "data":null
    }
}
}
]
5.インターフェーステスト基礎面接
  • プロジェクトでインターフェイスのテストを行うにはどうすればよいですか?

    テスト ツールを使用してパラメータを検証し、パラメータを要求し、パラメータを返す

  • インターフェース開発時のケースの書き方

    ルール文書は模擬検証形式に慣れています

  • モックを理解する方法

    戻りパラメータのシミュレート、インターフェイスのシミュレート

  • 職場でモックランニング?

    フロントエンドが正常な開発を達成できるように支援する

以下はサポート学習教材です。[ソフトウェア テスト] を行っている友人にとって、これは最も包括的で完全な準備倉庫となるはずです。この倉庫は、最も困難な旅にも同行してくれました。また、あなたのお役に立てれば幸いです。

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

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

次のインタビューの質問セクションをカバーします。

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

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

 

書類の入手方法:

このドキュメントは、[ソフトウェア テスト] に参加したい友人にとって、最も包括的で完全な準備倉庫となるはずです。この倉庫は、私が最も困難な旅を乗り越えるのにも同行してくれました。また、あなたのお役に立てれば幸いです。

おすすめ

転載: blog.csdn.net/2301_76643199/article/details/133207035