首页 > 分享 > python运行run在哪

python运行run在哪

在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样?

先贴一下代码段:

#-*- coding: utf-8 -*-

'''Created on 2015-1-28

@author: z.q.ot'''

importunittestfrom driver importDriverfrom new_plan_api importnew_plan_check, new_plan_accept, new_plan_reject,

plans_detail, plans_detail_todayimportjsonfrom unittest importrunner

new_plan_id_array=[]classTest(unittest.TestCase):defsetUp(self):print "setUp"self.driver_info= Driver(usr='soil',pwd='soil',channel=1,typ=3)

self.token_id=self.driver_info.driver_login()#self.new_plan_id_array = []

deftearDown(self):print "tearDown"

#@unittest.skip("not check new plan")

deftestA_Check_new_plan(self):print "testCheck_new_plan......"result=new_plan_check(self.token_id)printresult

JsonResult= json.loads(result,"utf-8");if JsonResult["result"] ==0:print "check new plan is success and the new plan count is: %d"%JsonResult["data"]["page"]["total"]

self.new_plan_count= JsonResult["data"]["page"]["total"]for i inrange(self.new_plan_count):

new_plan_id_array.append(JsonResult["data"]["rows"][i]["id"])else:print "check new plan is fail and result code is: %d"%JsonResult["result"]

@unittest.skip("not accept new plan")deftestB_Accept_new_plan(self):print "testAccept_new_plan......"

printnew_plan_id_arrayfor i innew_plan_id_array:print "new_plan_id is %d" %i

new_plan_accept(i, self.token_id)#@unittest.skip("not Reject new plan")#def testC_Reject_new_plan(self):#print "testReject_new_plan......"

#new_plan_reject(plan_id=1, self.token_id)#@unittest.skip("not get detail today")

deftestD_detail_today(self):print "Get today plans......"plans_detail_today(self.token_id)defsuite():

suite=unittest.TestSuite()

suite.addTest(Test("testD_detail_today"))#suite.addTest(Test("testA_Check_new_plan"))

#suite.addTest(Test("testB_Accept_new_plan"))

returnsuite#or use like this

#tests=['testA_Check_new_plan','testB_Accept_new_plan','testD_detail_today']

#return unittest.TestSuite(map(Test,tests))

if __name__ == "__main__":#import sys;sys.argv = ['', 'Test.testName']

#unittest.main()

runner =unittest.TextTestRunner()

runner.run(suite())

在eclipse中对此代码段进行调试,发现:

1,在python真正入口操作中有所不同,run方式会执行到main函数中,而python unittest不会执行到。

2,run方式会根据控制来执行对应的测试,而python unittest执行全部测试

其中,调试python unittest方式main函数进入如下函数:

def __get_module_from_str(self, modname, print_exception, pyfile):"""Import the module in the given import path.

* Returns the "final" module, so importing "coilib40.subject.visu"

returns the "visu" module, not the "coilib40" as returned by __import__"""

try:

mod= __import__(modname)//入口就进入这里for part in modname.split('.')[1:]:

mod=getattr(mod, part)returnmodexcept:

......更多的代码查看源码pydev_runfiles.py

此时的modname为文件名:handle_new_plan_test;通过这样的查看,可知,在python unittest运行的时候,文件作为一个模块导入到了执行程序pydev_runfiles.py中。似乎有点说明一个问题:Python文件的执行有"导入执行”和“未导入执行(就是执行自身)“

还是有些迷糊?那么接下来的说明会更清晰。

因为程序执行的时候,总会有一个不同的地方,那就是上面说的那个问题。那么python到底是怎么去做模块导入执行和自身执行的呢?

贴一段测试代码:

#-*- coding: utf-8 -*-

defsayHello():print "hello"

if __name__ == "__main__":print "__main__"sayHello()

python作为一种脚本语言,我们用python写得各个module都可以可以包含__main__,当然也可以不包含,主要的体现就在:

1,当单独执行此module时,会根据__main__中逻辑去执行,其结果为:

>>>

__main__hello>>>

2 ,  当该module被其他的module引入使用时,其中的"if __name__ == "__main__":所表示的逻辑不会被执行,这是因为当被其他模块引用时,__name__的值将发生变化,其将是文件module的名字,如之前__get_module_from_str()函数所获得modname,所以if条件为false,那么将不会执行到后面的逻辑。

到此,开始的疑问也就解决掉了!

相关知识

Python笔试题
《python灰帽子》源码一,运行一个程序进入调试状态
Cat Run下载
通过python
Python面向对象高级编程——多重继承
Python学习天二天
输出宠物的叫声python
python动物语音识别
Python基于大数据技术的宠物商品信息比价及推荐系统
基于Python的图像分类 项目实践——图像分类项目

网址: python运行run在哪 https://m.mcbbbk.com/newsview177308.html

所属分类:萌宠日常
上一篇: 金毛犬要比赛什么
下一篇: (10110010.1011)2