HUOXIU

ChatGPTでテスト効率を向上 - テストエンジニアのための新ツール(パート1)


出典: JDテクノロジー

導入

この記事では、ChatGPTを活用してテストの効率を向上させる方法を探ります。ChatGPTを用いた人間とコンピュータのインタラクションを通じて、ソフトウェアテストエンジニアは要件分析、テストケースの作成、不具合報告、テストスクリプトの自動生成といった分野で効率を高めることができます。ChatGPTの機能を最大限に活用することで、ソフトウェアテストエンジニアはタスクをより効率的かつ正確に完了し、テスト品質を向上させることができます。




01  
序文


今年のアジャイルチーム構築中に、Suite Executorを使ってワンクリックで自動ユニットテストを実装しました。Suite Executorの他に、JuintにはどんなExecutorがあるのでしょうか?こうして、私のRunner探求の旅が始まりました!

ChatGPTの爆発的な普及に伴い、様々な業界で業務効率向上のための活用が検討され始めています。中でもテストエンジニアは、ChatGPTを活用してテスト業務を強化する方法を模索し始めています。この記事では、テストエンジニアの視点から、テストにおけるChatGPTの応用について解説します。ChatGPTを活用することで、テストエンジニアは人間とコンピュータのインタラクションを迅速に構築し、テストタスクの実行を加速させることができます。要件分析、テストケースの作成、不具合報告、自動テストスクリプトの生成など、ChatGPTは的確な提案とガイダンスを提供します。同時に、ChatGPTを活用することでテストエンジニアの作業負荷を軽減し、より難易度の高いテストタスクに集中できるようになります。

さらに、ChatGPTはテストエンジニアがテスト実行中に問題解決を行うのにも役立ちます。テスト環境の設定、テストデータの生成、テストケースの設計などで困難に直面した場合、テストエンジニアはChatGPTとの対話を通じてリアルタイムのヘルプとガイダンスを得ることができます。つまり、ChatGPTは作業効率を向上させる強力なツールであると同時に、テストエンジニアにとって信頼できるインテリジェントアシスタントでもあります。ChatGPTの機能を最大限に活用することで、テストエンジニアはテスト作業においてより効率的かつ正確にタスクを完了し、ソフトウェアの品質を確保することができます。



02  
  

機能テストケースの生成

  


簡単に説明すると、MCubeはまずテンプレートキャッシュの状態に基づいて、ネットワークから最新のテンプレートを取得するかどうかを判断します。テンプレートが取得されると、テンプレートをロードします。ロードフェーズでは、出力がビューツリー構造に変換されます。変換が完了すると、式エンジンが式を解析し、正しい値を取得します。イベント解析エンジンは、ユーザー定義イベントを解析し、イベントバインディングを完了します。解析、値の割り当て、イベントのバインディングが完了したら、ビューがレンダリングされ、最終的に対象ページが画面に表示されます。
テストプロセス全体において、要件分析とテストケースの作成はテストエンジニアにとって重要な部分を占めています。chatGPTを用いて要件分析を行い、高品質なテストケースを生成することで、テストエンジニアの効率を大幅に向上させることができます。しかしながら、chatGPTに要件を入力しても満足のいく結果が得られない場合もあります。しかし、システムレベルやフォームレベルの要件であれば、chatGPTの結果は概ね満足のいくものです。さらに、フロントエンドの機能コードから直接テストケースを生成することも可能となっています。

例: マルチテナントシステムに全く馴染みのない方のために、chatGPT ではテストポイントと手順をいくつか提供しています。注: スクリーンショットは長すぎるため、一部しか表示されていません。

図1と図2。

例: 指定されたフォームの各フィールドの入力パラメータ、パラメータ値の範囲、および制約が与えられた場合、chatGPT は様々なテストケースの組み合わせを生成する必要があります。注: 結果のスクリーンショットは長すぎるため、一部のみが表示されています。

図3、4、および5。

例: フロントエンドコードの一部から直接機能テストケースを生成します(コードのセキュリティ保護に注意してください)。注: スクリーンショットは長すぎるため、一部のみが表示されています。

































































示例代码: < div class = "valign_wrap" > <!-- +.withqrc 切换--> < div class = "login_pop" > < div class = "login_pop_inner login_withpc" style = "height: auto;padding-top:40px;padding-bottom: 20px" > < div id = "checkCodeDiv" style = "display: none;font-size: 18px" class = "login_form_row account" > < div style = "width: 100%;text-align: center;" >登录账号: < span style = "font-weight:bold" > wywangyanjie </ span > </ div > < br > < div >请在您的< span style = "color: red;font-weight:bold" >京Me </ span >上确认,登录验证码< br > < span style = "text-align: center;display:-moz-inline-box;display:inline-block;width:90px;color: red;font-weight:bold;font-size: 22px;" > </ span > ,请在< span style = "color: red;font-weight:bold" >分钟内</ span >完成操作! </ div > < input type = "hidden" id = "checkCode" name = "checkCode?if_exists" value = "" > < br > </ div > < div id = "reSubmitDiv" style = "display: none;font-size: 18px" class = "login_form_row account" > < div style = "width: 100%;text-align: center;" >您的账号< span style = "font-weight:bold" > wywangyanjie </ span > ,本次登录已超时,请重新登录! </ div > < br > < div class = "login_form_row formsubmit" > < input class = "formsubmit_btn" type = "button" onclick = "refreshPage()" value = "重新登录" > </ div >
</ div > < div id = "errorDiv" style = "display: none;font-size: 18px" class = "login_form_row account" > < div style = "width: 100%;text-align: center;" >您的账号< span style = "font-weight:bold" > wywangyanjie </ span > ,本次登录存在异常情况,请重新登录! </ div > < br > < div class = "login_form_row formsubmit" > < input class = "formsubmit_btn" type = "button" onclick = "refreshPage()" value = "重新登录" > </ div > </ div > < div id = "loginDiv" style = "display: none;font-size: 18px" class = "login_form_row account" > < div style = "width: 100%;text-align: center;" >您的账号< span style = "font-weight:bold" > wywangyanjie </ span > ,已被拒绝登录,请重新登录! </ div > < br > < div class = "login_form_row formsubmit" > < input class = "formsubmit_btn" type = "button" onclick = "refreshPage()" value = "重新登录" > </ div > </ div >
</ form > < a class = "login_style to_qrcode" href = "javascript:;" tologintype = "2" title = "切换到扫码登录" > </ a > </ div > < div class = "login_withqrc_result" > div < div class = "login_withqrc_succ" >扫描成功! </ div > < div class = "login_withqrc_tip" >请在手机上确认是否登录</ div > <a class="login_style to_password" href="javascript:;" tologintype="1" title="パスワードログインに切り替える"> </ div > < a class = "login_style to_password" href = "javascript:;" tologintype = "1" title = "切换到密码登录" > </ a > < div id = "otherDiv" class = "login_pop_inner" style = "height: auto;padding-top:20px;padding-bottom: 20px" > </ div > < div style = "text-align: center" > < div class = "login-way" id = "passwordDiv" title = "密码登录" style = "width: 22%;" > < div >密码登录</ div > </ div > < div class = "login-way" id = "qrcodeDiv" title = "扫码登录" style = "width: 22%;" > < div >扫码登录</ div > </ div > </ div > < div class = "login_form_row formsubmit" > < input class = "formsubmit_btn" type = "button" id = "formsubmitButton" value = "登 录" > </ div > < div class = "login_form_row findback" id = "forgetPwdDiv" > < a href = "/sso/findpwd/index" >忘记密码? </ a > </ div > < div class = "login_form_row warntip hide" style = "margin-top: 10px; display: block;" > < i class = "warntip_icon" > </ i > < span class = "warntip_text" >用户名或密码错误,请重试! </ span > </ div > < div class = "login-language" > < span class = "lan-title" >语言选择</ span > < div class = "lan-part" > < select class = "lanselect" id = "lanSelect" onchange = "selectLan()" > < option value = "zh_CN" >中文</ option > < option value = "en_US" > English </ option > </ select > </ div > </ div >
</ div > </ div > </ div >

図6と図7。



03  
  

コード生成支援

  


簡単に説明すると、MCubeはまずテンプレートキャッシュの状態に基づいて、ネットワークから最新のテンプレートを取得するかどうかを判断します。テンプレートが取得されると、テンプレートをロードします。ロードフェーズでは、出力がビューツリー構造に変換されます。変換が完了すると、式エンジンが式を解析し、正しい値を取得します。イベント解析エンジンは、ユーザー定義イベントを解析し、イベントバインディングを完了します。解析、値の割り当て、イベントのバインディングが完了したら、ビューがレンダリングされ、最終的に対象ページが画面に表示されます。

コードアシスタンスは基本的な機能です。一部のメソッドや関数については、chatGPTコマンドまたは特定の要件を指定することでコードを自動生成できます。生成されたコードにはエラーが含まれていたり、期待どおりに動作しなかったりする場合もありますが、いくつかのアイデアや基本的なコードが提供されます。自動生成されたコードに基づいて修正や最適化を行うことで、コーディング効率が大幅に向上します。

図8と図9。


04  
  インターフェーステストケースの生成   


プロセスの理解:まず、MCubeはテンプレートキャッシュの状態に基づいて、ネットワークから最新のテンプレートを取得するかどうかを判断します。テンプレートが取得されると、そのテンプレートをロードします。ロードフェーズでは、出力がビューツリー構造に変換されます。変換後、式エンジンが式を解析し、正しい値を取得します。イベント解析エンジンは、ユーザー定義イベントを解析し、イベントバインディングを完了します。解析、値の割り当て、イベントのバインディングが完了した後、ビューがレンダリングされ、最終的に目的の結果が表示されます。

chatGPTにインターフェース、対応する入力パラメータ、そしてそれらの制約を与えると、テストケースが生成されます。chatGPTはほぼすべてのシナリオをカバーするテストケースを提供しており、4つのパラメータで20個のテストケースを生成します(この機能は満点に値します)。実際には、具体的なシナリオに基づいてテストを合理化できますが、銀行システムのように要件の高いシステムでは、できるだけ多くのテストケースを提供する必要があるかもしれません。

図10.


05  
  インターフェース自動化スクリプト生成  


プロセスの理解:まず、MCubeはテンプレートキャッシュの状態に基づいて、ネットワークから最新のテンプレートを取得するかどうかを判断します。テンプレートが取得されると、そのテンプレートをロードします。ロードフェーズでは、出力がビューツリー構造に変換されます。変換後、式エンジンが式を解析し、正しい値を取得します。イベント解析エンジンは、ユーザー定義イベントを解析し、イベントバインディングを完了します。解析、値の割り当て、イベントのバインディングが完了した後、ビューがレンダリングされ、最終的に目的の結果が表示されます。

詳細については、「JD Technology」WeChat公式アカウントの記事「効率重視:ChatGPTとHttpRunnerによるアジャイル自動テストの実装(パート2)」をご覧ください。

実装プロセスは以下のとおりです。まず、記述したAPI自動化スクリプトのサンプルをchatGPTに提供し、次に生成されたAPIテストケースをchatGPTに提供します。chatGPTは、提供されたサンプルに基づいて、API自動化テストケースをスクリプトに自動変換します。もちろん、具体的なアサーションは実際の状況に応じて変更する必要があります。注:結果のスクリーンショットは長すぎるため、一部のみを示しています。

図11、12、および13。

注: 上記の自動化スクリプトは、Httprunner (https://httprunner.com/) フレームワークを使用して実装されています。


06  
  他の  


プロセスの理解:まず、MCubeはテンプレートキャッシュの状態に基づいて、ネットワークから最新のテンプレートを取得するかどうかを判断します。テンプレートが取得されると、そのテンプレートをロードします。ロードフェーズでは、出力がビューツリー構造に変換されます。変換後、式エンジンが式を解析し、正しい値を取得します。イベント解析エンジンは、ユーザー定義イベントを解析し、イベントバインディングを完了します。解析、値の割り当て、イベントのバインディングが完了した後、ビューがレンダリングされ、最終的に目的の結果が表示されます。
ChatGPTは、SQL、Dockerfile、Nginx設定、シェルスクリプトなど、他の分野でも役立ちます。ここではスクリーンショットで詳しく説明しません。これは初心者にとって非常に使いやすいツールです。検索エンジンでも関連情報を見つけることはできますが、手動でのフィルタリングや統合が必要になる場合があります。chatGPTの力を借りれば、正しく使用すれば初心者でも簡単に中級者レベルに到達できます。

全体的に見て、ChatGPTを使用してコード、テストケース、SQL文、Dockerfile、Nginx設定、シェルスクリプトを生成することは、ある程度のガイダンスとリファレンスとなるものの、生成されたコンテンツが期待どおりであることを確認するためには、手動による検証と最適化が依然として必要です。いくつかの簡単な作業は最初から手動で行うこともできますが、chatGPTを使用してコマンドで自動生成し、その後手動で修正と検証を行う方が、最初から実装するよりも間違いなく高速です。



07  
  要約  


プロセスの理解:まず、MCubeはテンプレートキャッシュの状態に基づいて、ネットワークから最新のテンプレートを取得するかどうかを判断します。テンプレートが取得されると、そのテンプレートをロードします。ロードフェーズでは、出力がビューツリー構造に変換されます。変換後、式エンジンが式を解析し、正しい値を取得します。イベント解析エンジンは、ユーザー定義イベントを解析し、イベントバインディングを完了します。解析、値の割り当て、イベントのバインディングが完了した後、ビューがレンダリングされ、最終的に目的の結果が表示されます。
テストにおいて、chatGPTは要件分析やコード解釈(コードセキュリティに配慮)後のテストケース生成を支援します。また、コード、APIテストケース、自動化スクリプトなどの生成も支援します。もちろん、実際には、生成された結果には異なるプロンプトが表示されるため、複数回の手動トレーニングセッションが必要になる場合があります。しかし、chatGPTを使用すると、使用しない場合と比較して作業効率が確実に向上します。もちろん、実装後の効率向上や抽象化をどのように定量化するかはまだ検討段階であり、最初の一歩を踏み出した後も、道のりは長いです。