一:介绍
RF(Robot Framework)项目的三层架构是一种用于自动化测试设计的分层方法,旨在提高测试用例的灵活性、减少冗余代码,并方便脚本的维护。这种架构将数据和流程分离,使得测试逻辑更加清晰和可维护。
RF项目的三层架构主要包括以下三个部分:
- 元素层(Element Layer):这一层主要包含了库中的关键字,每个关键字都被视为一个元素。这些关键字是自动化测试的基本组成单元,可以执行特定的操作或验证。
- 流程层(Flow Layer):流程层由多个元素(即关键字)组成,用于构建测试用例的操作流程。这些流程可以重复使用,从而提高测试脚本的复用性。当需要编写新的测试用例时,只需将相关的流程组合起来,并传入必要的参数即可。
- 案例层(Case Layer):案例层是用户编写的具体测试用例,由多个元素和流程组成。这些用例需要导入流程层中定义的流程,以便执行实际的测试操作。案例层关注于具体的测试场景和预期结果,是自动化测试的核心部分。
通过这种三层架构的设计,RF项目能够实现以下优势:
- 灵活性高:由于元素层和流程层的分离,测试用例可以灵活地组合和修改,以适应不同的测试需求。
- 关键字使用率高:将关键字存储在元素层中,可以在多个测试用例中重复使用,提高了关键字的利用率。
- 脚本维护方便:分层设计使得脚本结构清晰,便于定位问题和进行修改。当需要更新某个功能或操作时,只需在相应的层进行修改,而无需影响其他层的代码。
二:应用
流程+案例
*** Settings ***
Library RPA.Browser.Selenium auto_close=${false}
Resource E:\\code\\RIDE\\RIDE\\helper\\public\\data.robot # 公共数据模块
Resource E:\\code\\RIDE\\RIDE\\helper\\public\\element.robot # 公共关键字模块
Resource element.robot # 登录关键字模块
Resource data.robot # 登录关键字模块
*** Test Cases ***
Main_function
# 正常登录
login page
Input Text xpath=${input_class} ${user_name}
Input Password xpath=${input_password_class} ${password}
Click Element xpath=${button_class}
set wait
# 进入首页 点击案件开始
Click Element xpath = ${start_class}
# 添加邀请人 (后续可做成循环)
Input Text xpath = ${people_name_class} ${people_name}
Input Text xpath = ${people_phone_class} ${people_phone}
Click Element xpath = ${role_list}
${element}= Get WebElement xpath=${role_tjy}
Click Element ${element}
元素
*** Variables ***
# 登录
${user_name} ****
${password} ****#A4#1511
${span_class} //*[@id="app"]/div/div/div/div[1]/div/div/div[2]/div[2]/div/div[1]/div/div/div/div[1]/div[2]/div/span
${input_class} //*[@id="app"]/div/div/div/div[1]/div/div/div[2]/div[2]/div/div[2]/div/form/div[1]/div[1]/div/div[1]/div[1]/input
${input_password_class} //*[@id="app"]/div/div/div/div[1]/div/div/div[2]/div[2]/div/div[2]/div/form/div[2]/div[1]/div/div[1]/div[1]/input
${button_class} //*[@id="app"]/div/div/div/div[1]/div/div/div[2]/div[2]/button
# 首页
# 未开始列表 开始按钮
${start_class} //*[@id="app"]/div/div/div/div[1]/div/div[2]/div/div/div/div[1]/div/div/div/div[2]/div/div/div/div[2]/div/div[3]/button[1]
# 添加邀请人按钮
${add_people_class} //*[@id="app"]/div/div/div/div[1]/div/div[2]/div/div/div/div[1]/div/div/div[3]/div[1]/button/span
# 邀请人姓名
${people_name_class} //*[@id="app"]/div/div/div/div[1]/div/div[2]/div/div/div/div[1]/div/div/div[3]/div[2]/div/div[2]/tr/td[2]/div/div[1]/div/input
${people_name} xiaoshuai2
# 邀请人手机号码
${people_phone_class} //*[@id="app"]/div/div/div/div[1]/div/div[2]/div/div/div/div[1]/div/div/div[3]/div[2]/div/div[2]/tr/td[3]/div/div[1]/div/input
${people_phone} 1*0
# 身份下拉框
${role_list} //*[@id="app"]/div/div/div/div[1]/div/div[2]/div/div/div/div[1]/div/div/div[3]/div[2]/div/div[2]/tr/td[4]/div/div/div/div/div[1]
${role_tjy} //*[contains(text(), '调解员')]