专栏文章 jerrylizilong/autotest_platform 自动化测试平台设计解析 (2)- core 模块运行图

Jerry li · 2019年01月08日 · 最后由 Jerry li 回复于 2019年02月25日 · 4712 次阅读

前言

自从将项目放到 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 表中(可通过页面 - 节点管理 进行添加)才能运行。
共收到 6 条回复 时间 点赞

遇到一个问题,浏览器打开了百度但就是输入不了搜索的内容。

wzdtsy 回复

我这边是正常可以跑的。 麻烦检查一下你的 selenium 版本,或者看下错误的截图有没有什么问题?

Jerry li 回复

把 selenium 版本和 selenium-server-standalone-3.13.0.jar 的版本都一致了


我运行(公共方法 | 百度首页,点击 |name@@tj_trnews,验证标题 | 百度新闻,等待 |5,截图)这些都是通过的。唯独在输入框输入搜索的内容的时候就输入不了。
错误的截图

麻烦大神帮忙看看

wzdtsy 回复

刚刚尝试添加了一个元素不存在时的报错处理,可以更新代码后再跑一下看看日志

Jerry li 回复

谢谢大神,原来的 chromedriver 版本问题,D:\python_anaconda\Scripts\chromedriver.exe
D:\python_anaconda\chromedriver.exe 两个目录都放了,而且版本不一样,用的是 D:\python_anaconda\Scripts\chromedriver.exe 这个更老的版本了。

wzdtsy 回复

😂 好吧,我就觉得这个问题太奇怪了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册