cyl531207502 2021-08-31 18:19 采纳率: 64.3%
浏览 81
已结题

关于unittest继承类的问题


from selenium import webdriver
from selenium.webdriver.common.by import By
import unittest
class TestCase1(unittest.TestCase):
    def test_01(self):
        global driver
        #webdriver实例化
        driver = webdriver.Chrome()
        driver.get('https://www.baidu.com')
        driver.maximize_window()
        driver.find_element(by=By.ID,value='kw').send_keys('码上学院')
        driver.find_element(by=By.ID,value='su').click()
if __name__ == '__main__':
    print('11111111111111')
    unittest.main()

代码如上
在pycharm中,如果执行的时候是选择python,并且路径为此py文件对应的路径,那么会执行main,如果是python tests,那么不会执行main,我想问下这是什么 原因,有什么资料介绍嘛?
另外第二个问题,如果是执行main,为什么这里写成unittest.main也会执行test_01?我理解的是TestCase1这个类继承了unittest.TestCase,test_01的方法应该是这个类重写的,也是他独有的,不应该影响到父类啊,为什么这里调用父类会调用到这个方法,请知道的告诉下谢谢

  • 写回答

1条回答 默认 最新

  • 比特控 2021-08-31 21:01
    关注

    第一个问题:

    python向来就不是用if __name__ == '__main__'作为入口的,都是严格从上而下顺序执行的。只是恰好你run的文件,python会给他起一个名字,叫做__main__。你看是if __name__ == '__main__':,是个判断对吧,所以只有你直接run文件的时候才会执行“main”中的方法。
    很多框架性的组件中,采取的是加载运行。就像Flaskdjangotornado等一系列框架,unitest也是类似。他们为了更好的支持扩展功能,比如说多线程、多进程、或者更好的监控和管理程序的运行,会有一个执行器。
    也就是我们通常命令行运行的那个东西,也是你提到的python tests(本质上帮助你调用了一下命令行),然后用这个执行器来之行你的python代码。这样的话这个代码python就不管它叫__main__了。
    你可以print(__name__)看一看它具体叫什么,一般来说会是你的模块名。
    另外,有一些框架是动态加载类的,比如说debug框架pdb

    第二个问题:

    简单的说,运行unittest.main()的,实际上会获取你当前的python文件,然后会有一个加载器分析这个文件里面有没有它所期望的类(TestCase),如果有就加载进来。获取类的方法是根据后缀去匹配的,默认的后缀是test
    如果希望更细致的了解可以点进去main(),然后设置断点逐步执行看到底做了些什么。
    下面是unittest.main()中的几行:

            self.testRunner = testRunner # 设置runner
            self.testLoader = testLoader # 设置loader
            self.progName = os.path.basename(argv[0])
            self.parseArgs(argv) # 加载参数,其中会调用createTests方法,createTests方法就是Test类加载器。
            self.runTests() # 运行获取到的Test类,返回结果。
    

    希望对你有帮助。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月9日
  • 已采纳回答 9月1日
  • 创建了问题 8月31日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。