初めに
2023.10 にて正式リリースとなったコード化されテストケースを使ってテスト自動化してみようと思います。
テストケース概要
1.UiPath Orchestrator に登録されたテストキューアイテム(ローン申請データ)を取得する
2.取得したキューデータに対して、年齢データが18以下のものを省く
3.UiBank(自動化練習用ウェブサイト)を開く(https://uibank.uipath.com/loans/apply)
4.ひたすら申請項目を入力し、申請ボタンを押下
5.承認された金利を画面から取得する
6.取得した金利に対して、判定を行う
金利=8%の場合、 結果はOK
上記以外の場合、結果はNG
実際に作ってみたもの
c# LoanApplication.cs
namespace _2024_TestCase
{
//ローン申請データをクラス化
public class LoanApplication
{
public string age {get;set;}
public string yearlyIncome {get;set;}
public string emailAddress {get;set;}
public string loanAmount {get;set;}
public string loanTerm {get;set;}
public string loanRate {get;set;}
public string loanID {get;set;}
}
}
c# UiBankLoanApplication.cs
namespace _2024_TestCase
{
public class UiBankLoanApplication : CodedWorkflow
{
LoanApplication newLoan = new LoanApplication();
//テストケースはここから
[TestCase]
public void Execute(System.Collections.Generic.IDictionary<System.String, System.Object> UiBankLoanApplication_TestDataQueue)
{
var queueitem = new Dictionary<string,object>();
for(int i = 0; i < 5; i++) {
// テストキューからテストデータを取得する
// キューの名前:UiBankLoanApplication_TestDataQueue
// キューの格納先フォルダ名:Shared
queueitem = testing.GetTestDataQueueItem("UiBankLoanApplication_TestDataQueue","Shared");
// 年齢データが18以下のものを省く
if (Convert.ToInt32(queueitem["Age"].ToString())>18 )
{
// Initialize loan application variables
initializeLoanClass(queueitem["Age"].ToString(),queueitem["Email ID"].ToString(),queueitem["Loan Amount"].ToString(),queueitem["Loan Term"].ToString(),queueitem["Yearly Income"].ToString());
// UiBankを開き、ローン申請画面に遷移
NavigateToLoanApplicationScreen();
// 関数ApplyforLoanを呼び出し、ローン申請処理を行い、金利データを取得する
newLoan.loanRate = ApplyForLoan();
//金利は8%であるかを確認
testing.VerifyExpression(newLoan.loanRate.Contains("8"));
}
}
}
//Loanクラスを初期化
public void initializeLoanClass(string age, string emailAddress, string loanAmount, string loanTerm, string yearlyIncome)
{
newLoan.age = age;
newLoan.emailAddress = emailAddress;
newLoan.loanAmount = loanAmount;
newLoan.loanTerm = loanTerm;
newLoan.yearlyIncome = yearlyIncome;
}
//UiBankを開き、UI操作でローン申請画面に繊維
public void NavigateToLoanApplicationScreen()
{
//オブジェクトリポジトリを利用します。
var homeScreen = uiAutomation.Open(Descriptors.Chrome__UiBank_app.Chrome__UiBank);
homeScreen.Click(Descriptors.Chrome__UiBank_app.Chrome__UiBank.Products);
homeScreen.Click(Descriptors.Chrome__UiBank_app.Chrome__UiBank.Loans);
homeScreen.Click("Apply For A Loan");
}
//金利申請
public string ApplyForLoan()
{
string loanRate = null;
//オブジェクトリポジトリを利用します。
var loanScreen = uiAutomation.Attach(Descriptors.Chrome__UiBank_app.Chrome__UiBank);
//文字入力で申請項目を埋める
loanScreen.TypeInto(Descriptors.Chrome__UiBank_app.Chrome__UiBank.Email_Address,newLoan.emailAddress);
loanScreen.TypeInto(Descriptors.Chrome__UiBank_app.Chrome__UiBank.Loan_Amount_Requested,newLoan.loanAmount);
loanScreen.TypeInto(Descriptors.Chrome__UiBank_app.Chrome__UiBank.Loan_Term,newLoan.loanTerm);
loanScreen.TypeInto(Descriptors.Chrome__UiBank_app.Chrome__UiBank.Current_Yearly,newLoan.yearlyIncome);
loanScreen.TypeInto(Descriptors.Chrome__UiBank_app.Chrome__UiBank.Age,newLoan.age);
// Submit Applicationボタンをクリック
ClickOptions co = new ClickOptions();
// クリック操作はシミュレートで行う
co.InteractionMode = NChildInteractionMode.Simulate;
loanScreen.Click(Descriptors.Chrome__UiBank_app.Chrome__UiBank.Submit_Loan_Application,co);loanScreen.Click(Descriptors.Chrome__UiBank_app.Chrome__UiBank.Submit_Loan_Application);
//申請結果画面にアタッチ
var LoanApprovedScreen = uiAutomation.Attach(Descriptors.Chrome__UiBank_app.Loan_Approved_or_Denied);
//申請結果金利を返却
return LoanApprovedScreen.GetText(Descriptors.Chrome__UiBank_app.Loan_Approved_or_Denied.Loan_Rate);
}
}
}
感想
・ オブジェクトリポジトリとの相性が抜群(UI操作簡単にコード化できる)
・ 開発作業効率ですが、アクティビティでテストケース作成することと比べたら、それほど差はない。(アクティビティの利用に慣れていることが大きいでしょうね)
・ UI操作の調整(シミュレート、Delayなど)を行う場合、少しなれが必要。
・ 成果物が.csファイルとなりましたので、差分管理がしやすくなる想定。