フロントエンドプロジェクトの自動テストを実装するにはどうすればよいですか? 1 つの記事に 4 つのステップが含まれているため、成功することができます。

これは実際には「UI 自動テスト」と呼ばれることが多いのですが、この質問に答えるために、まず次のアイデアをお知らせします。

1. UI オートメーションとは何ですか? 利点は何ですか?
2. UI 自動化の実践ではどのような困難に遭遇しますか?
3. 問題を解決し、UI を実践するにはどうすればよいですか? 【ポイント】
4. UI自動化学習教材

1. UI オートメーションとは何ですか? UI オートメーションを使用する理由

1. UI オートメーションとは何ですか?

本質的に、UI 自動テストは、スクリプトまたはツールを使用して機能テスト ケースの手動実行を置き換え、テスト ケースの実行を自動的に完了することです。ユーザー インターフェイスの機能、互換性、安定性を検証するためによく使用され、主に回帰テストを実行するために使用されます。

UI 自動テストでは、アプリケーションまたは Web サイトとのユーザー操作をシミュレートし、ボタンのクリック、テキストの入力、オプションの選択などのユーザー インターフェイス上の操作を自動的に実行し、アプリケーションまたは Web サイトの応答と動作が期待どおりであるかどうかを確認できます。ソフトウェアでは、開発プロセス中にバグがあるかどうかを検出するのに役立ちます。

2. UI 自動化の利点は何ですか?

UI自動テストは、手動でのテスト実行を模擬することができ、実際のユーザーの操作に最も近いテスト方法であることがUI自動テストの最大の魅力であり、さらに以下のようなメリットもあります

手動テストと比較して、UI 自動テストは多数のテスト ケースを迅速かつ正確に実行し、テスト効率を向上させ、手動テストの作業負荷を軽減します。

利点 2: テスト カバレッジが向上します。

UI 自動テストは、アプリケーションや Web サイトのさまざまな機能やページをカバーし、各機能がテストされていることを確認し、テスト カバレッジを向上させ、テスト漏れのリスクを軽減します。

利点 3: テストの一貫性が向上します。

UI 自動テストは、さまざまなプラットフォーム、ブラウザー、またはデバイス上で一貫したテストの実行を保証し、手動テストの主観的な要素を減らし、テストの一貫性と信頼性を向上させることができます。

メリット 4: ソフトウェアの品質が向上します。

UI 自動テストは、アプリケーションや Web サイトのエラーや欠陥を検出して修正し、ソフトウェアの品質を向上させ、ソフトウェアのリリース後の問題を軽減するのに役立ちます。

しかし、UI 自動テストは実際には「とげのあるバラ」のようなものです。ユーザーが実際にアプリケーションやフロントエンドWebサイトを操作している状態をシミュレートできるため、ユーザーの実際の動作に最も近いシミュレーションテストですが、実際にはいくつかの困難があるため、UIの自動化に多大な投資をしても成果が得られない可能性があります。良い結果。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

2. UI 自動化の実践ではどのような困難に遭遇しますか?

UI 自動化は役に立たないという人もいますが、その主な理由は、UI 自動化は実際のアプリケーションではいくつかの困難に遭遇し、結果が良くないからです。現在、UI 自動化テストは次のような課題に直面しています。

1. UI自動テストの入出力比率が低い。

良い結果を得たい場合は、初期段階でスクリプト開発に多くのリソースを投資する必要がありますが、後で使用したときに期待した結果が得られないことが多く、投資の中断につながりやすいですか?

2. スクリプトのメンテナンスを確実にすることは大きな問題です。

プロジェクトを頻繁に繰り返すと、フロントエンド ページが急速に変更されるため、対応するスクリプトを常に変更する必要があり、スクリプトのメンテナンスをどのように確保するかが大きな問題となります。

3. UI 自動テストの安定性も課題です。

スクリプトを実行すると、さまざまな奇妙なバグに遭遇することがよくあり、スクリプトの安定性をどのように確保するかは頭の痛い問題です。

3. 上記の 4 つの問題を実際に解決するにはどうすればよいですか? 【キーポイント】

実際のプロセスでは、上記の 4 つの問題をどのように最適化するか? フロントエンド Web UI 自動化をプロジェクトとして取り上げ、Python+Selenium フレームワークをバックグラウンドとして使用して、プロジェクトで自動テストを実行する必要がある場合に何をすべきかを見てみましょう。

最適化1:入出力比をどう確保するか?

UI の自動テストに取り組む人の多くは、その方法について明確に考えたことがないのではないでしょうか? 枠組みを手に入れて、まずそれをスタートさせて、多大な人的資源と物的資源を投資し、途中で多くの問題を発見して、最終的には終わってしまいます。したがって、始める前に、綿密な計画を立て、目標を明確にする必要があります。新しく始めるUI自動テストの場合は、まずフレームワークを選択し、次にケースとしてビジネスプロセスを選択し、そのケースをゴールとしてフレームワークの構築とスクリプトの開発を行うことをお勧めします。回帰テストに投資してみて、実際の導入効果はどうなのか、投資した時間と人件費を計算して次のステップに進みます。

最適化 2: スクリプトのメンテナンスを確実に行うにはどうすればよいですか?

現在のプロジェクトは頻繁に反復されており、これは変更できない事実であるため、スクリプトは作成後に保守および変更する必要があります。この事実に基づいて、最適化できるのは変更の数を減らすことであり、UI 自動化において最も一般的に使用される最適化方法は、カプセル化に PO モードを使用することです。

では、PO モードとは何でしょうか?

POとはPage Objectの略で、簡単に言うとフロントエンドプロジェクト内の各ページを「クラス」としてカプセル化し、ページ上の要素をインスタンスの「プロパティ」としてカプセル化し、ページ上での機能操作を行うものです。インスタンスとしてカプセル化されます。メソッド」。このようにカプセル化すると、将来ページがどのように変更されても、一度変更するだけで済むため、メンテナンスの効率が大幅に向上します。

PO パターンは、自動テスト プロジェクト開発の実践に最適な設計パターンの 1 つです。

最適化 3: スクリプト実行の安定性を確保するにはどうすればよいですか?

UI 自動化スクリプトを実行すると、ブラウザの起動時間が長すぎる、ページの読み込みに時間がかかりすぎる、画像がブロックされるなど、予測できないさまざまな問題が発生する可能性があります。最適化方法では、一般的に使用されるさまざまな明示的または暗黙的な待機プロセスに加えて、元の API をカプセル化することもできます。たとえば、Web UI で一般的に使用される Selenium フレームワークを例に取ると、特定の要素が表示されるのを待つ場合、確実に成功するためにはその「待機」をカプセル化する必要があります。待機を表示するだけでなく、さらに最適化して 3 回待機するループ処理を作成し、待機が失敗するたびに待機を更新することもできます。たとえば、以下に示すように、「要素を待機」メソッドが表示されるようにカプセル化して、クリックできるようにします。

def element_click_wait(self, located_type, located_key, assert_condition=None, message="执行点击超时",time_out=10, refresh=False):
        """
        【适用于页面跳转时等待元素出现,确保可以点击的场景】
        等待1个元素点击是否正常,并验证点击是否成功,每隔一段时间轮询点击1次,直到超时抛出异常为止
        @:param located_type 定位方式(8种:id name class tag link plink xpath css)
        @:param located_key 定位关键字
        @:param assert_condition 验证点击是否完成的断言条件语句【默认不验证点击是否成功】
        @:param message 点击失败提示信息
        @:param time_out 等待时长,默认为10秒
        @:param refresh 刷新标志,如果为True,则在等待超时后,刷新页面,重新再执行一轮等待执行(相当于刷新后重新执行一次)
        如果是False,则不执行刷新,直接超时报错
        """
        driver = self.driver
        is_type_true = 0  # 用户判断定位方式参数是否正确
        for i in range(int(time_out)*2):  # 循环次数为配置的2倍,以便处理刷新重试的情景
            try:
                time.sleep(1)
                if located_type == "id":
                    driver.find_element_by_id(located_key).click()
                elif located_type == "name":
                    driver.find_element_by_name(located_key).click()
                elif located_type == "class":
                    driver.find_element_by_class_name(located_key).click()
                elif located_type == "tag":
                    driver.find_element_by_tag_name(located_key).click()
                elif located_type == "link":
                    driver.find_element_by_link_text(located_key).click()
                elif located_type == "plink":
                    driver.find_element_by_partial_link_text(located_key).click()
                elif located_type == "xpath":
                    driver.find_element_by_xpath(located_key).click()
                elif located_type == "css":
                    driver.find_element_by_css_selector(located_key).click()
                else:
                    is_type_true = 1
            except:
                if i == (int(time_out)-1):  # 第1次循环到点判断
                    if refresh:  # 执行刷新后重新再执行1轮
                        refresh = False
                        self.element_refresh_wait()  # 刷新页面
                        continue
                    else:  # 不执行刷新重试
                        AutomationLog.LogMsg("点击失败,第1次等待超时啦!---【"+located_type+","+located_key+"】", 2)
                        raise ex.TimeoutException(message)
                elif i == (int(time_out)*2-1):  # 刷新后再执行1轮还是失败了
                    AutomationLog.LogMsg("点击失败,第2次等待也超时啦!---【" + located_type + "," + located_key + "】", 2)
                    raise ex.TimeoutException(message)
                elif assert_condition:  # 正常执行循环(验证点击是否成功,成功则结束循环,否则继续循环)
                    try:
                        WebDriverWait(driver, 1).until(assert_condition)
                        break
                    except:
                        continue
                else:  # 正常执行循环(不验证点击结果)
                    continue
            if is_type_true == 1:
                AutomationLog.LogMsg("定位方式写错啦,请检查located_type参数!---【" + located_type + "】", 2)
                raise ex.InvalidArgumentException("定位方式参数出错!")
            elif assert_condition:  # 正常执行循环(验证点击是否成功,成功则结束循环,否则继续循环)
                try:
                    WebDriverWait(driver, 1).until(assert_condition)
                    break
                except:
                    continue
            else:  # 正常执行循环(不验证点击结果)
                break

もちろん、上記の実践的な経験に加えて、テスト対象の共通 UI 要素の ID をエンコードする開発協力も得られるため、成功の効率が大幅に向上し、位置決めの問題も簡単に解決できます。

4. おすすめのUI自動化学習教材

UI オートメーションは、Web オートメーションとアプリ オートメーションに分けられます。UI 自動化についてさらに詳しく知りたい場合は、次のビデオを見てシステムを学ぶことをお勧めします。

最後に、私の記事をよく読んでくださった皆様に感謝申し上げます。ファンの増加と注目度を見ると、常に一定の礼儀が存在します。それほど価値のあるものではありませんが、使用できる場合は直接受け取ることができます!

ソフトウェアテスト面接文書

私たちは高給の仕事を見つけるために勉強しなければなりません。以下の面接の質問は、アリババ、テンセント、バイトなどの一流インターネット企業の最新の面接資料からのものであり、バイトの上司の中には権威ある回答をしている人もいます。 set 面接情報に基づいて、誰もが満足のいく仕事を見つけることができると思います。
 

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/IT_LanTian/article/details/132839811