前言

自从将项目放到 github(https://github.com/jerrylizilong/autotest_platform ), 不少人对其中的一些设计和运行原理提出了疑问。闲来无事,把其中的一些设计和架构整理一下,也是自己的一个总结。

上一篇:

jerrylizilong/autotest_platform 自动化测试平台设计解析 (1)- flask 平台结构 https://testerhome.com/articles/17604

这一篇介绍一下用例运行的设计思路和逻辑。

1. 用例(test_case)与用例集 (test_suite)、执行记录(test_batch)的关系

下图是三者的关系:

2. 单条用例(test_batch)执行流程:

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

2.0 用例执行进程:

实际上启动了一个任务,定时去查找是否有待执行状态的用例,有则执行,无则继续等待:

def coreservice():
    while (1):
        if(main()):
            time.sleep(6)

2.1 用例状态控制:

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 为载体:


↙↙↙阅读原文可查看相关链接,并与作者交流