このチュートリアルでは、Pythonがテストプログラミングにどのように使用できるかを説明し、トップPythonテストフレームワークの機能と比較を一覧表示します。
人工知能の広範な応用により、Pythonは人気のあるプログラミング言語となっています。
このチュートリアルでは、いくつかのPythonベースのテストフレームワークと一緒にPythonをテストプログラミングに使用する方法を説明します。
始めましょう!
始めましょう!!P>
=>ここですべてのPythonチュートリアルをチェックしてください。p>
Pythonとは何ですか?
伝統的な定義によると、Pythonは、プログラマが小規模および大規模なプロジェクトのために管理しやすく論理的なコードを書くのに役立つ、解釈された、高レベルの、一般的なプログラミング言語です。
Pythonの利点のいくつかは次のとおりです。
- コンパイルがないと、Edit-Test-Debugサイクルが高速に実行されます。
- 簡単なデバッグ
- 広範なサポートライブラリ
- データ構造を学ぶのが簡単
- 高い生産性
- チームコラボレーション
Pythonで作業
- インタプリタは、ソースファイルからpythonコードを読み取り、構文エラーを調べます。
- コードにエラーがない場合、インタプリタはコードを同等の”バイトコード”に変換します。
- このバイトコードはPython仮想マシン(PVM)に送信され、バイトコードがある場合はエラーのために再度コンパイルされます。
Pythonテストとは何ですか?
- 自動テストは、テストの世界ではよく知られているコンテキストです。 これは、テスト計画が人間の代わりにスクリプトを使用して実行されている場所です。
- Pythonには、システムの自動テストをサポートするツールとライブラリが付属しています。
- Pythonのテストケースは比較的簡単に書くことができます。 Pythonの使用が増加するにつれて、Pythonベースのテスト自動化フレームワークも人気が高まっています。
Pythonテストフレームワークのリスト
あなたが知っておくべきいくつかのPythonテストフレームワークが参加しています。P>
- ロボット
- PyTest
- Unittest
- DocTest
- Nose2
- 証言
Pythonテストツールの比較
これらのフレームワークを簡単な比較表で簡単に要約してみましょう:th>
特別な機能
ライセンス | カテゴリの一部 | カテゴリ 特別な機能 |
||
---|---|---|---|---|
ライセンス | カテゴリ | カテゴリ 特別な機能 |
||
ロボット |
フリーソフトウェア (asfライセンス} |
pythonの汎用テストライブラリ。 | 受け入れテスト | キーワード駆動型テストアプローチ。 |
PyTest |
Free software (MIT License) | Stand alone, allows compact test suites. | Unit Testing | Special and simple class fixture for making testing easier. |
unittest |
Free software (MIT License) | Part of Python standard library. | Unit Testing | Fast test collection and flexible test execution. |
DocTest |
Free software (MIT License) | Part of Python standard library. | Unit Testing | Python Interactive Shell for the command prompt and inclusive application. |
Nose2 |
Free software (BSD License) |
Carries unittest features with additional feature and plugins. | unittest extension | A large number of plugins.Td> |
証言 |
フリーソフトウェア (ASFライセンス) |
追加の機能とプラグインでunittestと鼻の機能を運びます。 | unittest拡張機能 | テスト検出機能の強化。 |
(略語:MIT=マサチューセッツ工科大学(1980)、BSD=バークレーソフトウェア配布(1988)、ASF=Apache Software Foundation(2004))
始めましょう!!
#1)Robot
- 最も人気のあるロボットフレームワークは、Pythonに基づくオープンソースの自動化テストフレームワークです。
- このフレームワークは完全にPythonで開発されており、受け入れテストとテスト駆動開発に使用されます。 キーワードスタイルは、Robot frameworkでテストケースを記述するために使用されています。
- ロボットは、Javaと.Netを実行することが可能であり、また、デスクトップアプリケーション、モバイルアプリケーション、webアプリケーションなどのWindows、Mac OS、Linuxのようなクロスプラットフォーム上での自動化テストをサポートしています。
- 受け入れテストに加えて、ロボットはまた、ロボットプロセス自動化(RPA)のために使用されます。
- Pip(Python用パッケージインストーラ)は、ロボットのインストールに強くお勧めします。
- 表形式のデータ構文、キーワード駆動テスト、豊富なライブラリの使用&ツールセット、および並列テストは、テスターの間でそれが人気
例:
*** Settings ***Library SeleniumLibrary*** Variables ***${SERVER} localhost:7272${BROWSER} Firefox${DELAY} 0${VALID USER} demo${VALID PASSWORD} mode${LOGIN URL} http://${SERVER}/${WELCOME URL} http://${SERVER}/welcome.html${ERROR URL} http://${SERVER}/error.html*** Keywords ***Open Browser To Login Page Open Browser ${LOGIN URL} ${BROWSER} Maximize Browser Window Set Selenium Speed ${DELAY}Login Page Should Be Open Title Should Be Login PageGo To Login Page Go To ${LOGIN URL} Login Page Should Be OpenInput Username ${username} Input Text username_field ${username}Input Password ${password} Input Text password_field ${password}Submit Credentials Click Button login_buttonWelcome Page Should Be Open Location Should Be ${WELCOME URL} Title Should Be Welcome Page
失敗したテスト実行のサンプルを次に示します。
Here is a sample of Successful Test Execution.
Packages/Methods:
Package Name | Working | Package Import |
---|---|---|
run() | To run tests. | from robot import run |
run_cli() | To run tests with command line argument. | ロボットからのインポートrun_cli |
rebot() | テスト出力を処理します。 | from robot import rebot |
APIへのリンク:ロボットフレームワークユーザーガイド
ダウンロードリンク:Robot
#2)PyTest
- PyTestは、一般的に万能であるオープンソースのPythonベースのテストフレームワークである。特に機能およびapiのテストのために。 PyTestのインストールにはPip(Package Installer for Python)が必要です。
- API、データベース、Uiをテストするための単純または複雑なテキストコードをサポートしています。
- シンプルな構文は、テストの実行を簡単にするのに役立ちます。
- 豊富なプラグインと並行してテストを実行することができます。
- テストの任意の特定のサブセットを実行できます。
例:
import pytest //Import unittest module//def test_file1_method(): //Function inside class// x=5 y=6 assert x+1 == y,"test failed"
テストを実行するにはpyを使用します。テストコマンド。
参考のためのスクリーンショット:
パッケージ/メソッド:Th>
rel=None,
abs=None,
nan_ok=False
pytrace(bool)
returncode (int)
plugins=None
特定のファイルで書かれたテストにアクセスしたい場合は、以下のコ
py.test <filename>
Pytestフィクスチャ:Pytestフィクスチャは、コードの繰り返しを避けるために、テストメソッドを実行する前にコードを実行するために使用 これは基本的にデータベース接続を初期化するために使用されます。以下に示すようにPyTestフィクスチャを定義できます。
@pytest.fixture
アサーション:アサーションは、trueまたはfalseを返す条件です。 アサーションが失敗すると、テストの実行が停止します。
以下は例です:
def test_string_equal():assert double(55) == 62assert 25 == 62+ where 25 = double(55)
APIへのリンク:Pytest API
ダウンロードリンク:Pytest
#3)Unittest
- Unittestは、Python標準ライブラリで動作するように設計された最初のPythonベースの自動化された単体テストフレームワークです。
- は、テストスーツとテスト組織の再利用をサポートしています。
- JUnitに触発され、テストコレクション、テストの独立性、テストのセットアップコードなど、テストの自動化をサポートしています。これはPyUnitとも呼ばれています。
- Unittest2は、Unittestに追加された追加の新機能のバックポートです。Unittestの標準ワークフロー:
- プログラムコードでUnittestモジュールをインポートします。
- 独自のクラスを定義することができます。
- 定義したクラス内に関数を作成します。
- ユニットテストを配置します。main()は、テストケースを実行するためのコードの下部にあるmainメソッドです。
例:
import unittest //Import unittest module//def add(x,y): return x + yclass Test(unittest.TestCase): //Define your class with testcase// def addition(self): self.assertEquals(add(4,5),9)<strong>//Function inside class//if __name__ == '__main__': unittest.main()<strong>//Insert main() method//
参照用のスクリーンショット:
パッケージ/メソッド:Tr>
メソッド 作業 セットアップ() テストのインストールを準備するために、テストメソッドの実行前に呼び出されます。 tearDown() テストが例外をスローした場合でも、テストメソッドの実行後に呼び出されます。 setUpClass() 個々のクラスのテストの後に呼び出されます。 tearDownClass() 個々のクラスのテストの後に呼び出されます。 run() 結果を使ってテストを実行します。 debug() 結果なしでテストを実行します。 addTest() テストスイートにテストメソッドを追加します。 Discover() 特定のディレクトリからサブディレクトリ内のすべてのテストモジュールを検索します。 assertEqual(a,b) 二つのオブジェクトの等価性をテストします。 Assertrue/assertFalse(condition) ブール条件をテストします。 (注:unittest。mock()は、システム部品をモックオブジェクトに置き換えることを可能にするPythonテスト用のライブラリです。 コアモッククラスは、テストスイートを簡単に作成するのに役立ちます。)
APIへのリンク:Unittest API
ダウンロードリンク:Unittest#4)DocTest
- DoctestはPythonの標準配布に含まれているモジュールであり、ホワイトボックス単体テストに使
- 対話型のpythonセッションを検索して、必要に応じて正確に動作しているかどうかを確認します。
- これは、docstrings、Python対話型シェル、Pythonイントロスペクション(実行時にオブジェクトのプロパティを決定する)などの選択的なPython機能を利用します。
- コア関数:
- docstringの更新
- 回帰テストの実行
- 関数testfile()とtestmod()は、基本的なインターフェイスを提供するために使用されます。
例:
def test(n): import math if not n >= 0: raise ValueError("n must be >= 0") //number should be 0 or greater than 0 if math.floor(n) != n: raise ValueError("n must be exact integer") //Error when number is not an integer if n+1 == n: raise OverflowError("n too large") //Error when number is too large r = 1 f = 2 while f <= n: //Calculate factorial r *= f f += 1 return rif __name__ == "__main__": import doctest //Import doctest doctest.testmod() //Calling the testmod method
参照のためのスクリーンショット:
パッケージ/関数:
Function Parameters doctest.testfile() filename (mendatory) doctest.testmod() m] doctest.DocFileSuite() *paths, doctest.DocTestSuite() Note: テキストファイル内の対話型の例を確認するには、testfile()関数を使用できます。
doctest.testfile ("example.txt”)
コマンドラインから直接テストを実行できます。
python factorial.py
APIへのリンク:DocTest API
ダウンロードリンク:Doctest#5)Nose2
- nose2はnoseの後継であり、doctestsとunittestsを実行できるpythonベースのユニットテストフレームワークです。
- Nose2はunittestに基づいているため、テストを簡単かつ簡単にするために設計されたプラグインでunittestまたはunittestを拡張すると呼ばれます。
- Noseはunittestの集合テストを使用します。testcaseは、テストと例外を書くための複数の関数をサポートしています。
- Noseは、頻繁に書くのではなく、一度に定義されるパッケージフィクスチャ、クラス、モジュール、および複雑な初期化をサポートしています。
例:
from mynum import *import nosedef test_add_integers(): assert add(5, 3) == 8def test_add_floats(): assert add(1.5, 2.5) == 4def test_add_strings(): nose.tools.assert_raises(AssertionError, add, 'paul', 'carol') // To throw one of the expected exception to passif __name__ == '__main__': nose.run()
参照のためのスクリーンショット:
パッケージ/メソッド:
Method Parameters Working nose.tools.ok_ (expr, msg = None) Shortcut to assert. nose.tools.ok_ (a,b, msg = None) Shortcut to ‘assert a==b,
“%r != %r” % (a, b)nose.tools.make_decorator (func) To replicate metadata for the given function. nose.tools. (*exception) 期待される例外の1つをスローします。/td> 鼻。ツール。timed (limit) テストがパスを取得する時間制限を指定します。/td> 鼻。ツール。with_setup (setup=None,teardown=None) テスト関数にセットアップメソッドを追加します。/td> 鼻。ツール。intest (func) メソッドまたは関数は、テストとして参照することができます。/td> 鼻。ツール。nottest (func) メソッドまたは関数をtestとして参照することはできません。 APIへのリンク:Nose2のプラグイン
ダウンロードリンク:Nose2#6)証言
- 証言は、unittestとnoseを置き換えるように設計されています。 証言はunittestよりも高度な機能を持っています。
- 証言は、セマンティックテストのJava実装(学習し、ソフトウェアテスト仕様を実装するのは簡単)として人気があります。
- 自動化されたユニット、統合およびシステムテストを実行することは証言する方が簡単です。
機能
- フィクスチャメソッドへの簡単な構文。
- 即席テスト発見。
- クラスレベルのセットアップとティアダウンフィクスチャメソッド。
- 拡張可能なプラグインシステム。
- テストユーティリティを処理するのは簡単です。
例:
from testify import *class AdditionTestCase(TestCase): @class_setup def init_the_variable(self): self.variable = 0 @setup def increment_the_variable(self): self.variable += 1 def test_the_variable(self): assert_equal(self.variable, 1) @suite('disabled', reason='ticket #123, not equal to 2 places') def test_broken(self): # raises 'AssertionError: 1 !~= 1.01' assert_almost_equal(1, 1.01, threshold=2) @teardown def decrement_the_variable(self): self.variable -= 1 @class_teardown def get_rid_of_the_variable(self): self.variable = Noneif __name__ == "__main__":run()
参照のためのスクリーンショット:
パッケージ/メソッド:Th>
パッケージ名 作業中 パッケージインポート パッケージ名 作業中 パッケージインポート パッケージ名 作業中 パッケージインポート パッケージ名 作業中 パッケージインポート パッケージ名 パッケージ名 パッケージ名 パッケージ名 td>assert
は、システムテストのための包括的なテストツールを提供します。 インポート”github.com/stretchr/testify/assert” モック あなたのオブジェクトと呼び出しをテストするのに便利です。 インポート”github.com/stretchr/testify/mock” require アサートと同じように動作しますが、テストが失敗したときにテストの実行を停止します。 インポート”github.com/stretchr/testimate/require” suite テストスイートの構造とメソッドを作成するためのロジックを提供します。 インポート”github.com/stretchr/testify/suite” APIへのリンク:証言のパッケージファイル
ダウンロードリンク:証言追加のPythonテストフレームワーク
これまで 将来的に人気になるかもしれないこのリスト上のいくつかのより多くの名前があります。
#7)Behavior
- Behaviorは、ブラックボックステストにも使用されるBDD(Behavior Driven Development)テストフレームワークと呼ばれています。 Behaviorは、テストの記述に自然言語を使用し、Unicode文字列で動作します。
- 動作ディレクトリは、自然言語とPythonのステップの実装のように見えるプレーンテキスト形式を持つ機能ファイルが含まれています。APIへのリンク:動作ユーザーガイド
ダウンロードリンク:動作#8)レタス
- レタスは、動作駆動開発テストに便利です。 それはテストプロセスを容易、拡張可能にさせます。
-
- 動作を記述する
- Pythonでのステップ定義。
- コードの実行
- テストに合格するためにコードを変更します。
- 変更されたコードを実行します。
- これらの手順は、ソフトウェアをエラーフリーにし、それによって品質を向上させるために3–4回続いています。
APIへのリンク:Letastus Documentation
ダウンロードリンク:Letastusよくある質問と回答
このトピックに関する最も一般的なFaqのいくつかを見てみましょう-
Q#1)Pythonが自動化に使用されるのはなぜですか?答え:’Pythonにはシステムの自動テストをサポートするツールとライブラリが付属している’ため、Pythonがテストに使用される理由は他にもいくつかあります。
- Pythonはオブジェクト指向で機能的であり、プログラマは関数とクラスが要件に従って適切であるかどうかを結論づけることができます。
- Pythonは’Pip’をインストールした後のテストに便利なパッケージの豊富なライブラリを提供しています。
- ステートレス関数と単純な構文は、読み取り可能なテストを作成するのに役立ちます。
- Pythonは、テストケースとテストコードの間のブリッジの役割を果たしています。
- Pythonは動的なダックタイピングをサポートしています。
- は、よく構成されたIDEとBDDフレームワークへの良好なサポートを提供します。
- 豊富なコマンドラインのサポートは、手動チェックを実行するのに役立ちます。
- シンプルで優れた構造、モジュール性、豊富なツールセット、およびパッケージは、スケール開発に役立ちます。Q#2)Pythonテストをどのように構造化するのですか?回答:Pythonでテストを作成するまでに、以下の2つのことを考慮する必要があります。
- どのモジュール/システムの一部をテストしますか?
- どのタイプのテストを選択していますか(単体テストか統合テストか)?Pythonテストの全体的な構造は、入力、実行されるテストコード、出力、期待される結果との出力の比較などのテストのコンポーネントを決定する他のものと同Q#3)どの自動化ツールがPythonで書かれていますか?答え:Buildoutは、Pythonで記述および拡張された自動化ツールであり、ソフトウェアアセンブリを自動化するために使用されます。 ビルドアウトは、開発から展開までのすべてのソフトウェアフェーズに適用できます。
このツールは、3つのコア原則に基づいています:
- 再現性:それは関係なく、その歴史の同じ結果を生成する必要があり、同じ環境で開発されたプロジ
- コンポーネント化:ソフトウェアサービスには自己監視ツールが含まれ、製品の展開中に監視システムを構成する必要があります。
- 自動化:ソフトウェアの展開は高度に自動化され、時間を節約する必要があります。Q#4)PythonはSeleniumで使用できますか?
答え:はい。 Python言語はSeleniumと一緒にテストを実行するために使用されます。 Python APIは、Seleniumを介してブラウザに接続するのに役立ちます。 Python Seleniumの組み合わせは、Selenium WebDriverを使用して機能テスト/受け入れテストを作成するために使用できます。Q#5)PythonのSeleniumは良いですか?回答:SeleniumとPythonが良い組み合わせと見なされる理由はいくつかあります。
- Seleniumは、迅速なテスト自動化をサポートする最も強力なツールセットです。
- Seleniumは、実際のアプリケーションの動作を調べるのに役立つwebアプリケーションのテストを実行するための専用のテスト関数を提供しています。
- 一方、Pythonは、単純なキーワード構造を持つ高レベル、オブジェクトベース、ユーザーフレンドリーなスクリプト言語です。さて、PythonでSeleniumを使用することになると、以下に述べるようにいくつかの利点があります。
- コードと読み取りが簡単です。
- Python APIは、Seleniumを介してブラウザに接続するのに非常に便利です。
- Seleniumは、そのデザインのバリエーションに関係なく、さまざまなブラウザにPythonの標準コマンドを送信します。
- Pythonは他のプログラミング言語よりも比較的シンプルでコンパクトです。
- Pythonには、自動化テストを実行するためにPythonでSeleniumを使用することがまったく初めての人をサポートする大きなコミュニティが付属しています。
- これは、すべての時間を無料で開いているプログラミング言語です。
- Selenium WebDriverは、PythonでSeleniumを使用するもう1つの強力な理由です。 Selenium WebDriverには、Pythonの簡単なユーザーインターフェイスの強力なバインディングサポートがあります。Q#6)最適なPythonテストフレームワークを選択するための措置は何ですか?
答え
答えp: 最高のPythonのテストフレームワークを選択するために、以下の点を考慮する必要があります。
- スクリプトの品質と構造は、あなたの目的を達成している場 プログラミングスクリプトは、理解しやすく、保守しやすく、欠陥がないようにする必要があります。
- Pythonのプログラミング構造は、属性、ステートメント、関数、演算子、モジュール、標準ライブラリファイルで構成されるテストフレームワークを選択する際に重要
- どのくらい簡単にテストを生成でき、どの程度再利用できますか?
- テスト/テストモジュールの実行(モジュール実行技術)のために採用された方法。Q#7)どのように最高のPythonテストフレームワークを選択するには?回答:各フレームワークの利点と制限を理解することは、最良のPythonテストフレームワークを選択するためのより良い方法です。 私たちが探検してみましょう–
ロボットフレームワーク:
利点:
- キーワード駆動型テストアプローチは、簡単な方法で読み取り可能なテストケースを作成す
- 複数のApi
- 簡単なテストデータ構文
- Selenium Grid経由の並列テストをサポートしています。
制限事項:
- カスタマイズされたHTMLレポートを作成することは、Robotでは非常にトリッキーです。
- 並列テストへのサポートが少なくなります。
- Python2.7.14以上が必要です。Pytest:
利点:
- コンパクトなテストスイートをサポートしています。
- デバッガや明示的なテストログは必要ありません。
- 複数のフィクスチャ
- 拡張可能なプラグイン
- 簡単で簡単なテスト作成。
- バグの少ないテストケースを作成することが可能です。
制限事項:
- 他のフレームワークと互換性がありません。
Unittest:
利点:
- 追加のモジュールは必要ありません。
- 初心者のレベルでテスターのために学ぶのは簡単です。
- シンプルで簡単なテスト実行。
- 迅速なテストレポート生成。
制限
- pythonのsnake_caseの命名とJUnitのcamelCaseの命名は少し混乱を引き起こします。
- テストコードの不明確な意図。
- 定型コードの膨大な量を必要とします。
Doctest:
利点:
- 小さなテストを実行するための良いオプション。
- メソッド内のテストドキュメントでは、メソッドの動作に関する追加情報も提供されます。
制限事項
- 印刷された出力のみを比較します。 出力の変動は、テストの失敗の原因となります。Nose2:
利点:
- Nose2はunittestよりも多くのテスト構成をサポートしています。
- これは、アクティブなプラグインの実質的なセットが含まれています。
- エラーに関する詳細情報を提供するunittestとは異なるAPI。
制限事項:
- サードパーティ製のプラグインをインストールするときは、nose2はPython3をサポートしていますが、サードパーティ製のプラグインはサポートしていないため、setup tool/distributeパッケージをインストールする必要があります。
証言:
利点:
- 理解して使いやすいです。
- ユニット、統合およびシステムテストを簡単に作成することができます。
- 管理しやすく再利用可能なテストコンポーネント。
- Testifyに新しい機能を追加するのは簡単です。
制限事項:
- 最初はUnittestとNoseを置き換えるために開発されましたが、pytestに移行するプロセスがオンになっているため、ユーザーは今後のプロジェクトで証言を使用しな
フレームワークを動作させる:
利点:
- すべてのタイプのテストケースを簡単に実行できます。
- 詳細な推論&思考
- QA/Dev出力の明快さ。
制限事項:
- ブラックボックステストのみをサポートしています。
レタスフレームワーク:
利点:
- 複数のテストシナリオを作成するための簡単な言語。
- ブラックボックステストの動作駆動型テストケースに役立ちます。
制限事項:
- それは強く、開発者、テスターの間で強力な調整を必要とします&利害関係者。上記の利点と制限を考慮して、ビジネスニーズに適した基準を開発するのに役立つ最適なPythonテストフレームワークを選択することができます。
Q#8)Pythonの自動化に最適なフレームワークはどれですか?
答え
答えp: 利点と制限を考慮しながら、テストタイプを最適なテストフレームワークを選択するための手段の一つとして考えることができます。
- 機能テスト:Robot,PyTest,Unittest
- Behavior-Driven Testing:Behavior,Letta
Robotは、Pythonテストに慣れていない人にとっては最高のフレームワークです。
結論
サブユニット、トライアル、テストリソース、サンチョ、Testtoolsは、Pythonテストフレームワークのリストに追加されたいくつかのより多くの名前です。 しかし、Pythonテストはテストの世界で導入された比較的新しい概念であるため、これまで普及してきたツールはごくわずかです。
企業は、彼らが理解し、テストを実行することが容易であるように、より良いこれらのツールを作ることに取り組んでいます。 豊富で正確なクラスフィクスチャ、プラグイン、パッケージを使用すると、これらのツールは精通しており、Pythonテストを実行するのに適しています。
一方、Unittestから証言する上記のフレームワークは、意図したシステムパフォーマンスを達成するために多くの必要なサポートとサービスを提供しています。
=>> Contact us to suggest a listing here.