これがどこか明確でない場合 (または用語が正しくない場合) は申し訳ありませんが、最善を尽くします!
実際にフォーラムに投稿するのは初めて;) ...
知識のある方からの助けをいただければ幸いです。
Python バインディングで Selenium を使用して、多数のプラットフォーム (OS) とブラウザーで Web ベースのアプリケーションの自動テストを実施しています。
この一環として、HTMLTestRunner モジュールを使用して、各テスト実行の最後にレポートを生成しています。私の問題はここにあります。
現在読み取っている私のコードの結果は、それぞれのリスト内のプラットフォーム/ブラウザーの組み合わせごとに、HTMLTestRunner モジュールが初期化され、単一のテスト ケースを実行し、レポートを生成して閉じます。
HTMLTestRunner は初期化され、すべてのテスト ケースを実行し、すべてのテスト結果を使用して 1 つのレポートを作成するように設計されているため、これにより、生成されたレポートがそれ自体を上書きするという問題が発生します (またはフォーマットの問題につながります)。
ちなみに、HTMLTestRunner の代わりに「unittest.TextTestRunner()」を使用すると、本質的に同じことが起こり、結果のみが明らかにシェルに表示されます。1 つのテストを実行しました... OK... 1 つのテストを実行しました... OK... et
「unittest.main(exit=False)」という行を使用してみましたが、これはシェル内で表示される結果に対して実際に機能しているように見えます。たとえば、レポートが提供される前にすべてのテストが実行されます。
残念ながら、HTMLTestRunner でこの機能を使用する方法が見つかりませんでした。
(誰かが、このように実行コード行をループする代わりに、メタ クラスを使用してテストを動的に生成することで戻ってくるのではないかと思います。これを調べている間、これを実装する方法と多くの開発者タイプが、これは避けなければならないことだと言っています (ここで議論を始めたくない!)。
とにかく、私が使用しているコードの簡単な例は次のとおりです。
global platform_list
platform_list = ['XP','VISTA','LINUX','WIN8','MAC']
global browser_list
browser_list = ['internet explorer','firefox','chrome','safari','opera']
class configuration(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Remote(command_executor= executor, desired_capabilities={'platform': platform, 'browserName': browser})
self.driver.implicitly_wait(30)
self.base_url = environment
self.verificationErrors = []
self.accept_next_alert = True
def is_element_present(self, how, what):
try: self.driver.find_element(by=how, value=what)
except NoSuchElementException, e: return False
return True
def is_alert_present(self):
try: self.driver.switch_to_alert()
except NoAlertPresentException, e: return False
return True
def close_alert_and_get_its_text(self):
try:
alert = self.driver.switch_to_alert()
alert_text = alert.text
if self.accept_next_alert:
alert.accept()
else:
alert.dismiss()
return alert_text
finally: self.accept_next_alert = True
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
class test_case_A(configuration):
def test_case_A(self):
try:
some code
except:
some code
class test_case_B(test_case_A):
def test_case_B(self):
self.test_case_A()
try:
some code
except:
some code
unit_test_suite = unittest.TestSuite()
unit_test_suite.addTest(test_case_A('test_case_A')), (test_case_B('test_case_B'))
results = file('results.html', 'wb')
runner = HTMLTestRunner.HTMLTestRunner(stream = results, title = 'Whatever', description = 'Whatever')
global platform
global browser
for platform in platform_list:
for browser in browser_list:
unittest.TextTestRunner().run(unit_test_suite)
上記のコードの特定の要素は、グローバル宣言など不要かもしれませんが、実際には必要であると述べたいだけです!
どんな助けでも大歓迎です!どうもありがとう...