Seleniumで単一のテスト定義で複数のブラウザをテストする

Pythonでこれを行う簡単な方法はありますか?私はそのように定義されたpytest funcargを持っています。

def pytest_funcarg__selenium(request):
    sel = selenium('10.3.10.154', 5555, '*firefox', 'http://10.3.10.180:8000')
    sel.start()

    return sel

テストで特定のブラウザを変更する手段がないため、明らかにうまくいかないでしょう。つまり、ブラウザのリストをループするこのfuncargでは、セレンの周りにダミーのクラスをラップすることができますが、テストに失敗すると、すべてのブラウザで失敗します。これは、失敗したブラウザを見つけるのにあまり実用的ではありません。

私はテスト機能でデコレータを使用するという考え方もありました。これはモジュール内の関数をモジュールごとに別の名前で再定義しますが、同じ結果です。funcargはどのブラウザを使うかを知る方法がありません。

1

3 答え

Selenium Gridを使用すると、複数のブラウザで単一のテストを実行できます。それはあなたが意図したものですか?

0
追加された
これが機能するにはブラウザの文字列で何を指定すればよいですか?
追加された 著者 user719958,
私はどのブラウザーでどのテストが自動的に1つのテストを実行するのか見当たりません。 「すべてのノード」のブラウザ文字列はありません。
追加された 著者 user719958,
Wntr. selenium grid、testng.xmlファイルで、ブラウザ文字列をとして指定します。
追加された 著者 user766038,

環境変数を使用してブラウザ文字列を指定し、提供されていない場合は便利なもの( * firefox )にデフォルト設定します。次に、テストクラスをコマンドラインから実行する前に値を設定するだけです。

0
追加された
これは、私たちの自動化されたテストシステムがちょっと奇妙なことを除いて、素晴らしい解決策になるでしょう。そういったものはかなり難しいでしょう。より良いテストシステムでは、私はこのアプローチをしたいと思います。
追加された 著者 user719958,

私が使用した手法の1つは、クラス内でテストを整理し、サブクラス化を使用してテストするブラウザを示すクラス変数を切り替えることです。

class TestFirefox:
    browser = '*firefox'

    def pytest_funcarg__selenium(self, request):
        sel = selenium('10.3.10.154', 5555, self.browser, 'http://10.3.10.180:8000')
        sel.start()
        return sel 

class TestChrome(TestFirefox):
    browser = '*opera'

コードの再利用を最大限にすることに加えて、この技術を使用すると、さまざまなブラウザの選択されたテストをオーバーライドおよびカスタム化することもできます。

py.testでは、生成テストを行います。

0
追加された
これは今のところ最高の解決策のように見えます。また、funcargsをクールなクラスレベルのメソッドとして定義できるかどうかはわかりませんでした。
追加された 著者 user719958,