2

フォーラムのあるウェブサイトにいくつかのテストを設定しようとしています。その結果、ログイン、スレッドの作成と削除など、これらの多くのことを連続して実行する必要があります。

現時点では、Seleniumを使用してテストケースを考案し、Webドライバーを使用してPythonにエクスポートしました。

すべてのテストで1つのWebドライバーインスタンスのみを使用して、連続して実行できるようにすることは可能ですか?私はPython(Javaから来ている)にかなり慣れていないので、私が持っていた唯一のアイデアは、Webドライバーをインスタンス化し、すべてのテストでベースをサブクラス化し、Webドライバーをテストに渡すベースクラスを作成することでした。(私はこれをJavaでやりたいのですが、Pythonを学ぶことを余儀なくされています)。

または、これを実現するSeleniumに組み込まれている別の機能はありますか?

御時間ありがとうございます。

4

1 に答える 1

0

テストでサブクラス化する基本クラスを作成することで、なんとか機能させることができました。この基本クラスは、setUp()メソッドによって一度セットアップされて次のテストに戻る静的ドライバーを作成します。

from selenium import webdriver
import unittest, time, re

class TestBase(unittest.TestCase):

    driver = None
    rand =  str(random.uniform(1,10))
    base_url = "desiredtestURLhere"

    def setUp(self):
         if (TestBase.driver==None):
            TestBase.driver = webdriver.Firefox()
            TestBase.driver.implicitly_wait(30)
         return TestBase.driver

そして、私が実行した2つのテスト...

import unittest, time, re
from testbase import TestBase

class Login(TestBase):

    def test_login(self):
        driver = TestBase.driver
        base_url = TestBase.base_url
        driver.get(base_url)
        # etc

テスト#2を連続して実行します...

import random
import unittest, time, re
from testbase import TestBase

class CreateThread(TestBase):

    def test_create_thread(self):
        driver = TestBase.driver
        base_url = TestBase.base_url
        rand = TestBase.rand
        driver.get(base_url + "/forum.php")
        # etc

私のtestsuite.pyを実行します...

import unittest, sys
# The following imports are my test cases
import login
import create_thread

def suite():
    tsuite = unittest.TestSuite()
    tsuite.addTest(unittest.makeSuite(login.Login))
    tsuite.addTest(unittest.makeSuite(create_thread.CreateThread))
    return tsuite

if __name__ == "__main__":
    result = unittest.TextTestRunner(verbosity=2).run(suite())
    sys.exit(not result.wasSuccessful())

これはPythonに初めて触れたので、明白な問題がある場合は、フィードバックをいただければ幸いです。

于 2012-05-10T17:01:35.750 に答える