前言
自从将项目放到 github(https://github.com/jerrylizilong/autotest_platform ), 不少人对其中的一些设计和运行原理提出了疑问。闲来无事,把其中的一些设计和架构整理一下,也是自己的一个总结。
上一篇:
jerrylizilong/autotest_platform 自动化测试平台设计解析 (1)- flask 平台结构 https://testerhome.com/articles/17604
这一篇介绍一下用例运行的设计思路和逻辑。
1. 用例(test_case)与用例集 (test_suite)、执行记录(test_batch)的关系
- 用例(test_case):用例的基本信息,如名称、所属模块、步骤等。
- 用例集 (test_suite):某个测试集合。根据测试的需求,可建立多个不同的测试集合,如分模块、分版本,等。
- 执行记录(test_batch): 用例和用例集的关联表,也是用例真正的执行记录。
下图是三者的关系:
- 一条用例可以在多个不同的用例集中,一个用例集也可以关联多条不同的用例。
- 执行记录里的步骤是从用例里复制而来,如果用例做了修改,重跑该条用例时会重新复制步骤进行执行。
2. 单条用例(test_batch)执行流程:
由于用例管理是通过关键字驱动,所以执行过程中需要进行一些转化。具体流程大致如下:
2.0 用例执行进程:
实际上启动了一个任务,定时去查找是否有待执行状态的用例,有则执行,无则继续等待:
def coreservice():
while (1):
if(main()):
time.sleep(6)
2.1 用例状态控制:
- 待执行:默认状态。 处于该状态时,才会被定时任务查到并执行。
- 执行中:用例正在被执行
- 执行成功:已执行完成,并且成功。
- 执行失败:已执行,并且执行失败
- 无法执行:由于没有可用的 selenium 服务或无法初始化浏览器,导致无法执行
2.2 公共方法拼接:实际上是将公共方法的步骤拼接到当前用例中,形成一个完整的步骤。 例如:
# 用例步骤:
公共方法|登录,截图,验证|成功
# 公共方法 登录 的步骤:
Chrome,前往|HTTP://localhost:8080/login,填写|id@@username@@admin,填写|id@@password@@123456,点击文字|登录
# 拼凑后的实际步骤:
Chrome,前往|HTTP://localhost:8080/login,填写|id@@username@@admin,填写|id@@password@@123456,点击文字|登录,截图,验证|成功
注意: 公共方法可以多层调用,但要注意不要调用到本身,否则会造成死循环。
2.3 用例转换流程:关键字映射
每个关键字和其对于的方法之间存在映射关系:
关键方法:
@retry(stop_max_attempt_number=3,wait_fixed=5000)
def do_step(self,driver,steps):
comed = buildCase.buildCase().build_case(keyword, steps[1]) # 转换为可执行语句
try:
exec(comed) # 执行语句
result = '1'
except UnexpectedAlertPresentException as e:
log.log().logger.info(e)
3 用例集的执行流程:
理解了单条用例的执行流程后,用例集的执行流程就简单很多了:
4. selenium 的运行方式:
用例的实际运行是以 selenium 为载体:
- selenium server 的调用: 查找 test_hubs 表中可用的 selenium server
- 以 docker、selenium hub 等方式启动 selenium server 后,需要将对应的 host 和 端口配置到 test_hubs 表中(可通过页面 - 节点管理 进行添加)才能运行。
转载文章时务必注明原作者及原始链接,并注明「发表于 TesterHome 」,并不得对作品进行修改。