Python テクノロジースタックの単体テストでのモックの使用

1. モックとは何ですか?

モック テストは、仮想オブジェクトを使用して、テスト プロセス中に構築または取得するのが容易ではない一部のオブジェクトのテスト方法を作成するテスト方法です。

2. モックの役割

特に、開発プロセスの上流および下流の未完成のプロセスにより、現時点ではテストが不可能であり、一部の特定のオブジェクトはテストのために仮想化する必要があります。

Unittest は Python に組み込まれた単体テスト ライブラリです。インターフェイス テストを行うとき、開発されたインターフェイスが開発されていない場合、インターフェイスの共同デバッグをテストしたい場合、待つことはできません。この時点では、 Unittest.mock を使用してインターフェイスの戻りをシミュレートし、インターフェイス テストを実行します。

3. 栗を取る

例: 1. A と B がそれぞれ開発した、ログインと個人情報の取得という 2 つの新しいインターフェイスを追加します。2. A さんはログイン インターフェースがまだ開発されておらず、B さんは個人情報を取得するためのインターフェースが開発されています。3. 既知のログイン インターフェイスは、ログイン成功、ログイン失敗、ログイン異常の 3 つの状態を返します。

シーンのソースコード: case.py

インターフェイス自動テストを学習したい場合は、ここで一連のビデオをお勧めします。このビデオは、ステーション B のネットワーク全体でナンバー 1 のインターフェイス自動テスト チュートリアルであると言えます。ユーザーが 1,000 人に達し、収集して使用するメモがあります。各種マスターの技術交流: 798478386      

【更新】B局が教えるPythonインターフェースの自動テストの最も詳しい実践チュートリアル集(実戦最新版)_哔哩哔哩_bilibili 【更新】Pythonの自動テストの最も詳細な実践チュートリアル集B局が教えるインターフェース(実戦編) 最新版)には以下の動画が合計200本あります: 1. 【インターフェース自動化】ソフトウェアテストの市場状況とテスターの能力基準。, 2. [インターフェイスの自動化] Requests ライブラリとその基礎となるメソッド呼び出しロジックに精通した、3. [インターフェイスの自動化] インターフェイスの自動化戦闘と正規表現と JsonPath エクストラクターの適用など。さらにエキサイティングなビデオについては、注目してください。 UPアカウント。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337

# -*-coding:utf-8 -*-

def login():
    # 登录接口,尚未开发完成
    # 登录成功返回:{"result": "success", "message": "登录成功"}
    # 登录失败返回:{"result": "fail", "message":"账号或密码错误"}
    # 登录异常返回:{"code": "404", "message": "找不到页面"}
    # message返回失败原因

    pass


def get_user_info():
    # 根据登录的结果success or fail,判断跳转到对应页面

    result = login()
    print(result)
    try:
        if result["result"] == "success":
            return "登录成功"
        elif result["result"] == "fail":
            return "登录失败"
        else:
            return "未知失败"
    except:
        return "服务端异常"

単体テストケースの設計:

# -*-coding:utf-8 -*-
from unittest import mock
import unittest
import case


class TestLogin(unittest.TestCase):
    # 单元测试用例

    def test_login_success(self):
        # 测试登录成功场景
        # mock一个支付成功的数据

        case.login = mock.Mock(return_value={"result": "success", "message": "登录成功"})
        # 根据支付结果测试页面跳转
        statues = case.get_user_info()
        self.assertEqual(statues, "登录成功")

    def test_login_fail(self):
        # 测试登录失败场景
        # mock一个登录失败的数据

        case.login = mock.Mock(return_value={"result": "fail", "message": "账号或密码错误"})
        # 根据登录结果测试页面跳转
        statues = case.get_user_info()
        self.assertEqual(statues, "登录失败")

    def test_login_fail2(self):
        # 测试登录失败场景
        # mock一个登录失败的数据

        case.login = mock.Mock(return_value={"result": "", "message": "账号或者密码为空"})
        # 根据登录结果测试页面跳转
        statues = case.get_user_info()
        self.assertEqual(statues, "未知失败")

    def test_login_error(self):
        # 测试登录异常场景
        # mock一个登录异常的数据

        case.login = mock.Mock(return_value={"code": "404", "message": "找不到页面"})
        # 根据登录结果测试页面跳转
        statues = case.get_user_info()
        self.assertEqual(statues, "服务端异常")


if __name__ == "__main__":
    unittest.main()

Unittest 単体テスト ケースを実行します。

 

おすすめ

転載: blog.csdn.net/caixiangting/article/details/132190588