1

Python で Selenium RC を使用してテスト スイートを実行したいと考えています。この一連のテストでは、次のことを行います。

  1. Selenium の助けを借りて、Web サイト上のユーザー入力データをシミュレートします
  2. データがデータベースに正しく配置されているかどうかを確認する
  3. 選択したアカウントからメールを取得し、解析してデータが正しいかどうかを確認します

すべてのテストは原則として終了していますが、これら 3 つのテストを含むテスト スイート全体として機能するわけではありません。setUpメソッドでデータを生成しようとしましたが、すべてのテストでデータが異なっていました。すべてのテスト実行でsetUp()およびtearDown()メソッドが実行されることをすでに知っているので、データジェネレーターをテストクラスコンストラクターに移動しようとしましたが、まだ処理できません。

テストの構造は次のようになります。

class TestClass(unittest.TestCase):
  def __init__(self, TestClass):
     unittest.TestCase.__init__(self, TestClass)
     self.define_random_data()
  def setUp(self):
    db_connection_function(self)
  def some_internal_methods(self):
    ...
  def test_website_data_input(self):
    ...
  def test_db_test(self):
    ...
  def test_email_parse(self):
    ...
  def tearDown(self):
    ...
suite = unittest.TestLoader().loadTestsFromTestCase(TestClass)
unittest.TextTestRunner(verbosity=2).run(suite)

私は何を間違っていますか?すべてのテストで生成されたデータは異なり、それを処理する方法がわかりません。このメソッドを可能な限りすべての場所で実行しようとしましたが、それでも間違っています。

4

1 に答える 1

1

うん、いいよ。実行されるテスト メソッドごとに、TestClass の新しいインスタンスが作成されます。したがって、これを行う必要があります。

import unittest
import random
random_data = random.random()

class TestClass(unittest.TestCase):
    def __init__(self, TestClass):
        unittest.TestCase.__init__(self, 'test_first')
        self.data = random_data

    def test_first(self):
        self.fail(self.data)

    def test_second(self):
        self.fail(self.data)

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

それをテストしたところ、各テストで同じ失敗メッセージが出力されました。ランダム データは、テスト モジュールのインポート時にのみ生成されます。

于 2012-08-08T08:32:45.120 に答える