自从将项目放到 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 为载体: