环境:

系统:window7 64

软件:pycharm

版本:2016.3.2

问题描述:

使用unittest类的时候出现问题,问题截图如下

Pycharm 2016.2执行单元测试遇到如下问题:

RuntimeWarning: Parent module ‘YOUR_MODULE_HERE’ not found while handling absolute import 
import unittest

解决方法,使用旧的utrunner.py文件替换当前版本,文件路径为…/PyCharm.app/Contents/helpers/pycharm/utrunner.py(macos平台)或者…\JetBrains\PyCharm 2016.2.2\helpers\pycharm\utrunner.py(windows平台)。utrunner.py的内容如下(替换文件前请先做好备份):

utrunner.py如下:

  1. import sys
  2. import imp
  3. import os
  4. import fnmatch
  5.  
  6. helpers_dir = os.getenv("PYCHARM_HELPERS_DIR", sys.path[0])
  7. if sys.path[0] != helpers_dir:
  8. sys.path.insert(0, helpers_dir)
  9.  
  10. from tcunittest import TeamcityTestRunner
  11. from nose_helper import TestLoader, ContextSuite
  12. from pycharm_run_utils import import_system_module
  13. from pycharm_run_utils import adjust_sys_path
  14. from pycharm_run_utils import debug, getModuleName, PYTHON_VERSION_MAJOR
  15.  
  16. adjust_sys_path()
  17.  
  18. os = import_system_module("os")
  19. re = import_system_module("re")
  20.  
  21. modules = {}
  22.  
  23. def loadSource(fileName):
  24. baseName = os.path.basename(fileName)
  25. moduleName = os.path.splitext(baseName)[0]
  26.  
  27. # for users wanted to run unittests under django
  28. #because of django took advantage of module name
  29. settings_file = os.getenv('DJANGO_SETTINGS_MODULE')
  30. if settings_file and moduleName == "models":
  31. baseName = os.path.realpath(fileName)
  32. moduleName = ".".join((baseName.split(os.sep)[-2], "models"))
  33.  
  34. if moduleName in modules and len(sys.argv[1:-1]) == 1: # add unique number to prevent name collisions
  35. cnt = 2
  36. prefix = moduleName
  37. while getModuleName(prefix, cnt) in modules:
  38. cnt += 1
  39. moduleName = getModuleName(prefix, cnt)
  40. debug("/ Loading " + fileName + " as " + moduleName)
  41. if os.path.isdir(fileName):
  42. fileName = fileName + os.path.sep
  43. module = imp.load_source(moduleName, fileName)
  44. modules[moduleName] = module
  45. return module
  46.  
  47. def walkModules(modulesAndPattern, dirname, names):
  48. modules = modulesAndPattern[0]
  49. pattern = modulesAndPattern[1]
  50. # fnmatch converts glob to regexp
  51. prog_list = [re.compile(fnmatch.translate(pat.strip())) for pat in pattern.split(',')]
  52. for name in names:
  53. for prog in prog_list:
  54. if name.endswith(".py") and prog.match(name):
  55. modules.append(loadSource(os.path.join(dirname, name)))
  56.  
  57. # For default pattern see https://docs.python.org/2/library/unittest.html#test-discovery
  58. def loadModulesFromFolderRec(folder, pattern="test*.py"):
  59. modules = []
  60. # fnmatch converts glob to regexp
  61. prog_list = [re.compile(fnmatch.translate(pat.strip())) for pat in pattern.split(',')]
  62. for root, dirs, files in os.walk(folder):
  63. files = [f for f in files if not f[0] == '.']
  64. dirs[:] = [d for d in dirs if not d[0] == '.']
  65. for name in files:
  66. for prog in prog_list:
  67. if name.endswith(".py") and prog.match(name):
  68. modules.append(loadSource(os.path.join(root, name)))
  69. return modules
  70.  
  71. testLoader = TestLoader()
  72. all = ContextSuite()
  73. pure_unittest = False
  74.  
  75. def setLoader(module):
  76. global testLoader, all
  77. try:
  78. module.__getattribute__('unittest2')
  79. import unittest2
  80.  
  81. testLoader = unittest2.TestLoader()
  82. all = unittest2.TestSuite()
  83. except:
  84. pass
  85.  
  86. if __name__ == "__main__":
  87. arg = sys.argv[-1]
  88. if arg == "true":
  89. import unittest
  90.  
  91. testLoader = unittest.TestLoader()
  92. all = unittest.TestSuite()
  93. pure_unittest = True
  94.  
  95. if len(sys.argv) == 2: # If folder not provided, we need pretend folder is current
  96. sys.argv.insert(1, ".")
  97.  
  98. options = {}
  99. for arg in sys.argv[1:-1]:
  100. arg = arg.strip()
  101. if len(arg) == 0:
  102. continue
  103.  
  104. if arg.startswith("--"):
  105. options[arg[2:]] = True
  106. continue
  107.  
  108. a = arg.split("::")
  109. if len(a) == 1:
  110. # From module or folder
  111. a_splitted = a[0].split("_args_separator_") # ";" can't be used with bash, so we use "_args_separator_"
  112. if len(a_splitted) != 1:
  113. # means we have pattern to match against
  114. if os.path.isdir(a_splitted[0]):
  115. debug("/ from folder " + a_splitted[0] + ". Use pattern: " + a_splitted[1])
  116. modules = loadModulesFromFolderRec(a_splitted[0], a_splitted[1])
  117. else:
  118. if os.path.isdir(a[0]):
  119. debug("/ from folder " + a[0])
  120. modules = loadModulesFromFolderRec(a[0])
  121. else:
  122. debug("/ from module " + a[0])
  123. modules = [loadSource(a[0])]
  124.  
  125. for module in modules:
  126. all.addTests(testLoader.loadTestsFromModule(module))
  127.  
  128. elif len(a) == 2:
  129. # From testcase
  130. debug("/ from testcase " + a[1] + " in " + a[0])
  131. module = loadSource(a[0])
  132. setLoader(module)
  133.  
  134. if pure_unittest:
  135. all.addTests(testLoader.loadTestsFromTestCase(getattr(module, a[1])))
  136. else:
  137. all.addTests(testLoader.loadTestsFromTestClass(getattr(module, a[1])),
  138. getattr(module, a[1]))
  139. else:
  140. # From method in class or from function
  141. debug("/ from method " + a[2] + " in testcase " + a[1] + " in " + a[0])
  142. module = loadSource(a[0])
  143. setLoader(module)
  144.  
  145. if a[1] == "":
  146. # test function, not method
  147. all.addTest(testLoader.makeTest(getattr(module, a[2])))
  148. else:
  149. testCaseClass = getattr(module, a[1])
  150. try:
  151. all.addTest(testCaseClass(a[2]))
  152. except:
  153. # class is not a testcase inheritor
  154. all.addTest(
  155. testLoader.makeTest(getattr(testCaseClass, a[2]), testCaseClass))
  156.  
  157. debug("/ Loaded " + str(all.countTestCases()) + " tests")
  158. TeamcityTestRunner().run(all, **options)

相关文档:

  1. Pycharm import RuntimeWarning after updating to 2016.2 - 简书
  2. RuntimeWarning: Parent module ‘YOUR_MODULE_HERE’ not found while handling absolute import : PY-20171
  3. RuntimeWarning: Parent module ‘settings’ not found while handling absolute import - 常城的专栏 - 博客频道 - CSDN.NET
  4. http://blog.csdn.net/wirelessqa/article/details/53465854

本人个人博客巫章鹏的个人博客​​​​​​​

pycharm下运行unittest的问题的更多相关文章

  1. 亲测——pycharm下运行第一个scrapy项目 ©seven_clear

    最近在学习scrapy,就想着用pycharm调试,但不知道怎么弄,从网上搜了很多方法,这里总结一个我试成功了的. 首先当然是安装scrapy,安装教程什么的网上一大堆,这里推荐一个详细的:http: ...

  2. Pycharm下运行程序查看每个变量的值的方法(类似于Spyder和MATLAB)

    昨天,用了大量篇幅讲了Spyder的各种问题,之所以要用Spyder,最重要的一个原因就是能够非常方便的查看中间变量的值.类似MATLAB的工作空间,非常方便.如下图所示: 但是Spyder的代码自动 ...

  3. pycharm下运行和调试scrapy项目

    1. 新建项目 默认在本地已经新建了一个scrapy爬虫项目 2. 打开项目 点击open à 选择刚刚那个本地的scrapy项目meijutt100 3. 项目结构 各个py文件的作用不作介绍,不懂 ...

  4. pycharm右键运行unittest、pytest文件

    在实际学习过程中,有时候会出现右键运行文件,但没有任何结果的情况.这就是没有使用unittest/pytest 的方式运行. 解决方法: 添加好

  5. PyCharm 默认运行 unittest

    若文件里面有某个函数名称或模块名称以test为前缀,Pycharm的话,就会自动认为是单元测试: 报错信息:test_file() missing 1 required positional argu ...

  6. Pycharm取消默认的右击运行unittest方法

    Pycharm取消默认的右击运行unittest方法:File-> Settings -> Tools -> Python Integrated Tools -> Defaul ...

  7. PyCharm下创建并运行我们的第一个Django项目

    PyCharm下创建并运行我们的第一个Django项目 准备工作: 假设读者已经安装好python 2x或3x,以及安装好Django,以及Pycharm 1. 创建一个新的工程 第一次运行Pycha ...

  8. pycharm上运行django服务器端、ip地址访问

    安装Django  下载Django包,解压缩. CMD 进入解压路径下. 执行:python setup.py install 增加环境变量: C:\Python27\Scripts 测试djang ...

  9. pycharm上运行django服务器端、以及创建app方法

     快来加入群[python爬虫交流群](群号570070796),发现精彩内容. 安装Django  下载Django包,解压缩. CMD 进入解压路径下. 执行:python setup.py in ...

随机推荐

  1. 954I Yet Another String Matching Problem

    传送门 分析 我们先考虑暴力如何计算 对于S的子串SS,如果它有位置i使得SS[i] != T[i]那么我们就将两个字符之间用并查集连边 最后答案很明显就是并查集中所有边的个数 于是我们可以发现对于S ...

  2. JMS 之 Active MQ 的消息传输

    本文使用Active MQ5.6 一.消息协商器(Message Broker) broke:消息的交换器,就是对消息进行管理的容器.ActiveMQ 可以创建多个 Broker,客户端与Active ...

  3. 打开程序出现.Net Framework Initialization Error – Unable to find a version of the runtime to run this applicatio的解决办法

    部署一个VS2010开发的程序时遇到 了一个非常奇怪的问题,客户端上已经安装了.net framework 4.0,但运行时还是会弹出错误: .Net Framework Initialization ...

  4. activiti监听器

    activiti使用的时候,通常需要跟业务紧密的结合在一起,有些业务非常的复杂,通常有如下一些场景: 1.activiti人员动态的分配. 2.当前任务节点完成的时候,指定需要指定下一个节点的处理人( ...

  5. JSTL标签总结备用

    前言 ========================================================================= JSTL标签库,是日常开发经常使用的,也是众多 ...

  6. mysql复制表以及复制数据库

    (一)将旧表复制到新表 1.CREATE TABLE新表 SELECT* FROM旧表; 该语句只是复制表结构以及数据,它不会复制与表关联的其他数据库对象,如索引,主键约束,外键约束,触发器等. CR ...

  7. Raspberry Pi 3 安装 Lazarus 1.6.2(2017-02-09更新)

    Raspberry Pi3 Lazarus 1.6.2 安装步骤如下: 安装环境:Raspbian Jessie, RPi3 1.安装subversion和unzip Sudo Apt-get upd ...

  8. Android-bindService远程服务启动其他应用的Activity

    Service2应用,在AndroidManifest.xml文件中对外暴露MyService2服务: <!-- 代表在应用程序里,当需要该service时,会自动创建新的进程. android ...

  9. HTML5+CSS3+jQuery Mobile轻松构造APP与移动网站 (陈婉凌) 中文pdf扫描版

    <HTML5+CSS3+jQuery Mobile轻松构造APP与移动网站>以HTML与CSS为主,配合jQuery制作网页,并搭配jQueryMobile制作移动网页,通过具体的范例从基 ...

  10. 解决 centos 7 部署 tomcat 后外部不能访问应用(端口、防火墙)

    https://blog.csdn.net/Rebs_Hugo/article/details/85042602