自从将项目放到 github(https://github.com/jerrylizilong/autotest_platform ), 不少人对其中的一些设计和运行原理提出了疑问。闲来无事,把其中的一些设计和架构整理一下,也是自己的一个总结。
jerrylizilong/autotest_platform 自动化测试平台设计解析 (1)- flask 平台结构 https://testerhome.com/articles/17604
这一篇介绍一下用例运行的设计思路和逻辑。
下图是三者的关系:

由于用例管理是通过关键字驱动,所以执行过程中需要进行一些转化。具体流程大致如下:

实际上启动了一个任务,定时去查找是否有待执行状态的用例,有则执行,无则继续等待:
def coreservice():
    while (1):
        if(main()):
            time.sleep(6)
 # 用例步骤:
公共方法|登录,截图,验证|成功
# 公共方法 登录 的步骤:
Chrome,前往|HTTP://localhost:8080/login,填写|id@@username@@admin,填写|id@@password@@123456,点击文字|登录
# 拼凑后的实际步骤:
Chrome,前往|HTTP://localhost:8080/login,填写|id@@username@@admin,填写|id@@password@@123456,点击文字|登录,截图,验证|成功
 
注意: 公共方法可以多层调用,但要注意不要调用到本身,否则会造成死循环。
每个关键字和其对于的方法之间存在映射关系:


关键方法:
@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)
 理解了单条用例的执行流程后,用例集的执行流程就简单很多了:

用例的实际运行是以 selenium 为载体:
