4

私はテストに不慣れで、やりたいです

1)ログインをテストします

2)フォルダを作成します

3)フォルダにコンテンツ(ページ)を追加します

私はそれぞれのテストを作成し、それらは機能しますが、明らかにお互いの上に構築したいと思います。たとえば、3を実行するには、1を実行してから2を実行する必要があります。2を実行するには、1を実行する必要があります。私の基本的なテスト構造:

class TestSelenium(unittest.TestCase):
    def setUp(self):
        # Create a new instance of the Firefox driver
        self.driver = webdriver.Firefox()

    def testLogin(self):
        print '1'
        ...

    def testFolderCreation(self):
        print '2'
        ...

    def testContentCreation(self):
        print '3'
        ...

    def tearDown(self):
        self.driver.quit()

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

最初は、テストが順番に実行され、最初の関数が中断したところから2番目の関数が続行されると思いましたが、そうではないことがわかりました。各テストで最初からやり直しているようです。また、逆の順序で実行されることにも気づきました。ターミナルで3,2,1の出力が得られます。どうすれば私が望むことを達成できますか?必要な関数を実行する前に前の関数を呼び出すと、それぞれがテストであるため、同じことを何度も繰り返しテストしているように感じます(たとえば、ではtestContentCreation、「testLogin」を呼び出してから呼び出しtestFolderCreation、 insidecallを実行しtestFolderCreationますtestLogin。私はもっ​​とやることになっていた、testLogin何度も呼ばれていたでしょう!)。代わりに、前の手順を通常の非テスト関数に変換し、最後の最後の手順(テスト関数)で前の手順を順番に呼び出す必要がありますか?そのようにすると、いずれかの手順が失敗した場合、最後の手順が失敗した場合、1つの大きなテスト関数があると思います。

このタイプのテストをどのように書くべきかについての提案はありますか?また、なぜテストが逆の順序で実行されるのですか?

ありがとう!

4

1 に答える 1

3

あなたはあなたが見ているものを見ていると私は思います、なぜならあなたは仮定がすることについていくつかの間違った仮定unittestをしているからです。各テストケースは自己完結型のエンティティであると想定されているため、実行順序は課されません。さらに、個々のケースの前後に操作しますSetUp()TearDown()グローバルセットアップ/ティアダウンが必要な場合は、およびという名前のクラスメソッドを作成する必要がありSetUpClass()ますTearDownClass()TestSuiteまた、クラスを調べたい場合もあります。詳細はこちら:http ://docs.python.org/library/unittest.html

unittestライブラリがテスト検出を実行する場合(実行するテストケースを見つけるためにテストケースクラスを反映する)、本質的に順序付けられていないオブジェクトの値.__dict__と値の表示に本質的に制限されることに注意してください。dir()

于 2012-05-30T14:47:27.710 に答える