【实测】django平台启动某脚本时的引入问题 (一期自动化平台的同学必看!)

简介: 【实测】django平台启动某脚本时的引入问题 (一期自动化平台的同学必看!)

前言:这是一个基础,a文件引入b模块的文件,在python中再简单不过。但是在django平台上去执行这个文件的时候,就会莫名的报错找不到b模块文件。这种问题在一些特殊需求的时候是属于一种疑难杂症的。


本篇文章,就来给大家好好研究和解决一下这个问题。


先来看demo:

【DEMO: 正常无django导入】

文件结构:

640.png


a.py:

640.png


b.py:

640.png


在a文件位置运行a文件:

640.png


可以看到是成功导入的。


然后我们换个执行位置,再运行a文件试试:

640.png


可以看到仍然是成功导入的。


【DEMO: django项目内】

然后我们引入django平台试试,文件目录如下:

640.png


注意,此时的a文件和b文件的位置已经比较复杂了。

然后我们先手动在终端运行a文件来测试(需要采用不同写法导入b):

  1.  

在a文件位置运行a:

640.png


如上图所示,此刻需要用sys.path.append方法临时添加上级目录,才能正常导入,其他写法全部报错。


2. 在其他位置运行a:

640.png


如图所示,用sys的方案依然可以成功导入,其他写法基本全会报错。


3. pycharm启动平台,从平台上接口触发的方式,调用subprocess.call方法来使用新进程执行a文件:

640.png

640.png


如图所示,只有这种写法可以成功导入。


4. 在终端上启动django平台,然后再次用接口触发新进程的方式执行a:

640.png


如图,依然可以成功导入。


从这里我们可以得出结论,平台执行 等价于 于在django根目录下使用python命令直接执行。因为manage.py的位置也就是根目录,是django默认命令寻址的初始地。


那么现在问题来了,a脚本的单独本地执行也就是在a文件位置上执行。和平台执行 这俩种情况,能不能让代码不变的方式同时满足呢???


毕竟我们假设a.py文件 就是 自动化脚本,它既需要本地调试,又需要在平台上接口触发的方式执行。


好,公布答案:

640.png


这样的写法就可以同时让a.py成功导入b的内容了。


然后我们进阶一下,复杂化一点目录层级:(和培训版本自动化测试平台同样目录设计了)

640.png


结果:平台调用成功

640.png


本地调试成功:

640.png


可以看到,这样的方案,仍然成功导入了。


然后我们就要再复杂一点:(和培训版本自动化测试平台的动态目录一致了)

注意,因为client_50这个50并不确定,所以要做成动态获取:


并且我还打印了下这个 __file__  大家可以来直观的看到这个__file__是个什么东西。(用re正则来获取这个50,比用split切片要靠谱)

640.png


import sys,re
print(str(__file__))
try:
    sys.path.append( 'MyClient/client_%s'% re.findall(r'client_(.\d?)', str(__file__))[0] )
except:
    sys.path.append('..')
from public.b import b
b()


结果如下:

平台调用:

640.png


本地调试:

640.png


如图所示,两种情况均已成功导入。

大家也明白了,两种情况下,__file__的值并不相同,所以要用一个try/except的写法。


欢迎关注:测试开发干货

进群加v:qingwanjianhua

相关文章
|
28天前
|
数据采集 监控 数据挖掘
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
|
21天前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
27 7
|
19天前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
27天前
|
SQL 测试技术 API
如何编写API接口的自动化测试脚本
本文详细介绍了编写API自动化测试脚本的方法和最佳实践,涵盖确定测试需求、选择测试框架、编写测试脚本(如使用Postman和Python Requests库)、参数化和数据驱动测试、断言和验证、集成CI/CD、生成测试报告及维护更新等内容,旨在帮助开发者构建高效可靠的API测试体系。
|
24天前
|
运维 Devops
自动化运维:从脚本到DevOps的进化之旅
在数字化时代,自动化运维不仅是提高生产效率的关键,更是企业竞争力的象征。本文将带领读者穿越自动化运维的发展历程,从最初的脚本编写到现代DevOps文化的形成,揭示这一演变如何重塑IT行业的工作模式。通过具体案例,我们将展示自动化工具和实践如何简化复杂任务,优化流程,并促进团队协作。你将发现,自动化运维不仅关乎技术的进步,更体现了人、流程和技术三者之间协同增效的深层逻辑。
|
25天前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
28天前
|
机器学习/深度学习 人工智能 运维
自动化运维之路:从脚本到工具的演进
在IT运维领域,效率和准确性是衡量工作成效的关键指标。随着技术的发展,自动化运维逐渐成为提升这两个指标的重要手段。本文将带领读者了解自动化运维的演变历程,从最初的简单脚本编写到现今复杂的自动化工具应用,展示如何通过技术提升运维效率。文章不仅介绍理论和实践案例,还提供了代码示例,帮助读者理解自动化运维的实际应用场景。
|
1月前
|
运维 监控 网络安全
自动化运维的崛起:如何利用Python脚本简化日常任务
【10月更文挑战第43天】在数字化时代的浪潮中,运维工作已从繁琐的手工操作转变为高效的自动化流程。本文将引导您了解如何运用Python编写脚本,以实现日常运维任务的自动化,从而提升工作效率和准确性。我们将通过一个实际案例,展示如何使用Python来自动部署应用、监控服务器状态并生成报告。文章不仅适合运维新手入门,也能为有经验的运维工程师提供新的视角和灵感。
|
1月前
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
69 2
|
1月前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
82 3