python自動テストについて話す(3)-自動化フレームワークとツール

Python自動テスト(3)

自動化フレームワークとツール

1。概要

手順の方法論は、前の記事で述べたポイントに基づいています。

  • 機能テストを自動化することはお勧めしません
  • 最も費用効果の高いインターフェーステスト
  • インターフェイステストを自動化できます

後で説明するテストの自動化についても、インターフェイスの自動化について紹介します。

このシリーズで選択されたテスト言語は、pythonスクリプト言語です。その公式文書には原理のより明確な説明があるので、この記事はいくつかの冗長な翻訳作業を行いません。実際の戦闘に偏っていますが、実際の戦闘に偏っているために、IDEツールやプロジェクト編成と併せて説明します。

その理由は次のとおりです。

1.スクリプト言語、開発と反復で非常に効率的

2.サードパーティの拡張ライブラリがたくさんあり、使用できる既製のツールがたくさんあります

自動テストの分野に正式に参入する前に、まずそのような値を確立する必要があります。これは、Googleの内部エンジニアが発行したソフトウェアテストの出版物に記載されています。

「ソフトウェアの自動テストにはコストがかかり、コストは低くありません。基本的に、元の機能開発プロジェクトに基づいて並列テスト開発プロジェクトを確立するのと同じです。」

言い換えれば、自動テストに期待している場合は、対応する価格とエネルギーを支払う必要があります。良いことはまた、素晴らしい人々が完了するために多くの時間を費やす必要があります。

この記事はコレクションに含まれています:「Pythonベースのインターネットソフトウェアのテストと開発(自動テスト)-完全なコレクション」、訪問を歓迎します:

Pythonベースのインターネットソフトウェアのテストと開発

2PyUnitテストフレームワーク

自動プログラミング言語としてpythonを使用する場合、自動テストフレームワークとしてpyunitを使用するのは自然なことです。

次のパートの内容は、主にpyunitの公式文書からのものです。この記事では、翻訳と構造を簡単に調整するだけです。この部分は、テストフレームワークの基本原則と概念に属しています。コードを作成する前に理解する必要があります。

PythonのユニットテストフレームワークPyUnitは、Java言語でのユニットテストフレームワークJUnitのPython言語実装バージョンと見なすことができ、その作成者の1人であるKentBeckでさえJUnitの作成者です。

Unittestは、次の目標を達成する必要があります。

  • 自動テストをサポートする
  • すべてのテストスクリプトで、開く(セットアップ)および閉じる(シャットダウン)のコードを共有します
  • テストケーススクリプトは、コレクションを使用して整理できます
  • すべてのテストスクリプトをテストレポートフレームワークから分離します

上記の目標を達成するために、unittestは次の重要な概念をサポートしています。

  • テストフィクスチャ(テストフィクスチャ)1つ以上のテストケースの準備を行います。たとえば、データベースに接続する、ディレクトリを作成する、プロセスを開始するなどです。

  • テストケース(テストケース)テストケースは、テスト動作の最小単位であり、いくつかの入力値と出力値を比較することによってテストおよびチェックされます。

  • テストスイート(テストスイート)テストケースまたはテストケースのコレクションを集約して編成されたコレクション。テストスイート内のすべてのテストケースをバッチ実行できます

  • テストランナー
    は、テストスクリプト実行アクティビティのコンポーネントを整理および配置します。テストエグゼキュータは、いくつかのグラフィカルインターフェイス、テキストインターフェイスを介して、またはいくつかの特別な値を返すことにより、テストスクリプトのテスト結果を表示します。主にテストレポートの生成に使用されます

3基本的な例

次の例も公式ドキュメントbasic_demo.pyからのものです。

# coding:utf-8
"""
基本的自动化测试脚本 basic_demo.py
"""
__author__ = 'zheng'

import unittest


class TestStringMethods(unittest.TestCase):

    def setUp(self):
        print 'init by setUp...'

    def tearDown(self):
        print 'end by tearDown...'

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())
        self.assertTrue('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)


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

公式ドキュメントでは、テストケーススクリプトを整理するいくつかの方法が紹介されていますが、

1.独立したテスト機能

2.シングルユースケーステストクラス

3.マルチユースケーステストクラス

書き方によって整理方法が異なります。詳しくは公式資料をご覧ください。公式文書を検討した後、この記事の著者は、上記の基本的な例である3番目のメソッドであるマルチユースケーステストクラスを気に入っています。このメソッドには、次の特徴があります。

  • テストクラスはunittest.TestCaseから継承します
  • 1つのテストクラスで複数のテストスクリプト機能を管理できます
  • テストスクリプト関数名はtest_で始まる必要があります
  • テストクラスのすべてのテスト関数は、setUp関数とtearDown関数を共有します
  • コンソールでこのプログラムを実行します。
➜  src git:(master) ✗ python basic_demo.py
init by setUp...
Fend by tearDown...
init by setUp...
end by tearDown...
.init by setUp...
end by tearDown...
.
======================================================================
FAIL: test_isupper (__main__.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "basic_demo.py", line 24, in test_isupper
    self.assertTrue('Foo'.isupper())
AssertionError: False is not true

----------------------------------------------------------------------
Ran 3 tests in 0.001s

FAILED (failures=1)
➜  src git:(master)

前の基本的な例のmain関数で使用される最も簡単な方法は、すべてのテストケースを直接実行し、デフォルトのテキストレポートを生成することです。実際、呼び出し元の関数にいくつかの簡単な変更を加えるだけで、これらのテストケースを合理的に整理し、情報システムと統合してより優れた拡張機能を形成するために有用なデータ情報を取得できます。

if __name__ == '__main__':
    # unittest.main()
    # 装载测试用例
    test_cases = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)
    # 使用测试套件并打包测试用例
    test_suit = unittest.TestSuite()
    test_suit.addTests(test_cases)
    # 运行测试套件,并返回测试结果
    test_result = unittest.TextTestRunner(verbosity=2).run(test_suit)
    #生成测试报告
    print("testsRun:%s" % test_result.testsRun)
    print("failures:%s" % len(test_result.failures))
    print("errors:%s" % len(test_result.errors))
    print("skipped:%s" % len(test_result.skipped))

実行後に生成される出力は次のとおりです。

➜  src git:(master) ✗ python basic_demo.py
test_isupper (__main__.TestStringMethods) ... init by setUp...
FAIL
end by tearDown...
test_split (__main__.TestStringMethods) ... init by setUp...
end by tearDown...
ok
test_upper (__main__.TestStringMethods) ... init by setUp...
end by tearDown...
ok

======================================================================
FAIL: test_isupper (__main__.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "basic_demo.py", line 23, in test_isupper
    self.assertTrue('Foo'.isupper())
AssertionError: False is not true

----------------------------------------------------------------------
Ran 3 tests in 0.001s

FAILED (failures=1)
testsRun:3
failures:1
errors:0
skipped:0

明らかに、上記の入力結果は統計的にテスト結果です。これらのデータはテストアクティビティの重要な指標です。これらのデータはデータベースに保存し、テスト情報管理システムと統合できます。ダッシュボードまたは統計レポートは後で生成され、安定した製品テストの回路図。これらはすべて開発に関連しているため、ここでは繰り返しません。

上記の特定の例を組み合わせると、前のセクションの理論的な部分に対応する特定の実装オブジェクトを見つけることもできます。

  • テストフィクスチャはsetUp関数によって初期化され、tearDownによって破棄されます

  • テストケース(テストケース)はTestCaseクラスに対応し、より詳細には内部のテストスクリプト関数に対応します

  • テストスイート(テストスイート)は、TestSuiteクラスに対応します

  • テストランナー(テストランナー)はTextTestRunnerクラスに対応します

4つのIDEツール

コードの生産性を向上させる必要があるため、IDEツールであるPycharmを導入する必要があります。紛れもなく、それは現在最も熱心でプロフェッショナルなPython言語IDEです。Pyunitのサポートも改善されています。

主なサポートは次のとおりです。

  • ビジュアルプログラミング開発(これはIDEの基本機能です)

  • テスト結果の視覚的表示

  • HTMLテストレポートをエクスポートして生成する

  • ユースケースの実行を視覚的に制御します(これは開発およびデバッグ段階で非常に便利であり、指定されたコードユニットの操作を簡単に制御できます)

    a。ディレクトリ内のすべてのコマンドを実行させます
    b。
    単一ファイル内のすべてのユースケースを実行させますc。単一コマンドを単一ファイル内で実行させます

4.1操作とデバッグ

Pycharmは、テストスクリプトの柔軟な実行およびデバッグサポートを提供します。

pycharmを使用すると、開発者はmain関数を記述せずに次の関数を実行できます。

  • ファイル内のすべてのテストクラスを実行する
  • テストクラスのすべてのテストスクリプトを実行する
  • テストクラスのテストスクリプトを実行する

その中でも、「テストクラスの特定のテストスクリプトを実行する」の方が便利で、迅速な開発と、開発フェーズでの単一スクリプトのデバッグの実行に適しています。

指示:

1.カーソルをテスト関数内に移動します

2.実行ショートカットctrl + shift + F10(Eclipseショートカットキースキーム)を押します。

ブレークポイントを使用してデバッグする場合は、デバッグモードを使用して単一の関数を実行し、ブレークポイントを使用してデバッグします。

もちろん、IDEを借用せずに、testSuitを操作することで上記の機能を実現することもできますが、IDEはより柔軟で直接的な選択を提供します。これらは、言うまでもなく、IDEの使用スキルのほんの一部です。

4.2結果の視覚化

前述の例では、IDEでこのプログラムを実行することを選択すると、次の効果が表示されます。

ここに写真の説明を挿入
すべてが通過したことがわかります。それらの1つが故意に失敗した場合、次の結果が表示されます。

ここに写真の説明を挿入

4.3テストレポートの生成

Pycharmは、テスト結果表示ボックスの機能ボタンで、テスト結果レポートのエクスポート機能も提供します。

ここに写真の説明を挿入
エクスポート結果は次のとおりです。

ここに写真の説明を挿入
もちろん、情報システムとの統合を考慮しない場合は、後続のダッシュボードとテスト統計が機能し、レポートを生成するだけで、この機能で十分です。

通常の状況では、自動化されたテストと開発の場合、上記のスキルは要件を完全に満たすことができます。次に行うことは、さまざまな基本的なコンピューター知識を使用して、増え続けるビジネスニーズに対応し、テストケースを増やし続けることです。スクリプトが出ました。

機能開発プロジェクトの原則は非常に単純ですが、ボリュームが増加するにつれて、それらはスケールを形成し、同じことがテスト開発プロジェクトにも当てはまります。

5プロジェクト組織

以前、テストケースの開発ツールとデバッグツールを紹介しました。しかし、それが本当に継続的な統合自動化システムに含まれている場合、それは明らかにIDEに依存することはできません。代わりに、次のようなpython言語の編成および呼び出しメソッドを使用します。実行エントリとしてmain関数が必要であるなど。

技術的な実装の詳細については、後で機会があれば紹介する対応記事を作成します。

IDEからのプロジェクト編成方法により、次の利点があります。

すべてのスクリプトは、イベントトリガーによって実行できます(継続的な統合パイプラインの一部になる
ことができますすべてのデータを提案およびカスタマイズできます処理および処理(品質分析システムのデータソースを提供するためにテスト情報システムと統合されます)

6テストプラットフォーム

このテスト製品であるテストレポートを自動的に生成する方法については、インターフェイスの呼び出しとレポートの表示および共有機能を提供できるプラットフォームがいくつかあります。詳細については、https//blog.csdn.net/weixin_50271247/article/details/109265422を参照してください。

ここに写真の説明を挿入
7まとめ

この小さな部分の内容は、主に、Python言語に基づく自動テストフレームワークであるpyunitのいくつかの設計アイデアと基本的な使用例について説明しています。実際、ツールの使用は非常に簡単ですが、ソフトウェアの作成にこれらのツールをうまく利用するには、他のコンピュータースキルが必要です。以降の記事では、このフレームワークのアプリケーションをエンジニアリングおよび技術的な側面から詳しく説明します。 。

ソフトウェアテストは、IT関連業界で最も簡単に開始できる科目です〜開発者の論理的な思考を必要とせず、運用および保守担当者は24時間待機する必要はありません。必要なのは、慎重で真剣な態度とIT関連の知識ポイントの幅広い理解です。各テスターが業界に参入してから専門家になるまでの成長経路は、ソフトウェアテスト、自動テスト、およびテスト開発エンジニアの3つの段階に分けることができます。

ここに写真の説明を挿入

ここに私がまとめたいくつかの情報があります。自習をもう一度体験したくない場合は、情報が見つからず、誰も質問に答えず、数日後にあきらめたいと思う場合は、さまざまなソフトウェアを含むソフトウェアテスト交換グループ313782132を追加できます。テストデータと技術交換。

おすすめ

転載: blog.csdn.net/weixin_50271247/article/details/109264488