zoukankan      html  css  js  c++  java
  • Appium+python的单元测试框架unittest(2)——fixtures

    unittest提供的Fixtures用以在测试执行前和执行后进行必要的准备和清理工作,可以定义在模块、类、用例执行前后的工作

    1、模块

    在模块中定义setUpModule()和tearDownModule()处理模块执行前后的工作

    def setUpModule():
        print('module start')
    
    def tearDownModule():
        print('module end')

    2、测试类

    在测试类中定义setUpClass()和tearDownClass()函数处理测试类执行前的工作,setUpClass和tearDownClass的写法稍微不同:

    a、需通过@classmethod进行装饰

    b、方法的参数是cls,cls与self并无不同之处,只是大家都习惯了这样的命名

    @classmethod   
    def setUpClass(cls):
        print('Class start')
    @classmethod
    def tearDownClass(cls):
        print('class end')

    3、测试用例

    即我们前面熟悉的setUp()和tearDown()方法,每个用例执行前后都会调用

    def setUp(self):
        print('test case start')
    def tearDown(self):
        print('test case end')

    在前面我们把Desired Capabilities 启动 session 时相关的配置放在setUp()中,把driver的退出放在tearDown()中。导致每执行一个测试用例,就需要配置连接一次移动端设备。

    我们可以把相关的配置工作和清理工作放到测试类中,这样就不必每次执行一个case都重新配置和退出。比如,在计算器中,配置连接到移动端应用,连续执行加运算和减运算case,再退出。

    # coding:utf-8
    from appium import webdriver
    import unittest, time
    
    #模块的fixtures处理
    def setUpModule(): print('module start') def tearDownModule(): print('module end') class TestFixture(unittest.TestCase):
    #测试类中配置参数 @classmethod
    def setUpClass(cls): print('Class start') # Desired Capabilities启动session时配置的参数 desired_caps = {} desired_caps['platformName'] = 'Android' #移动平台 desired_caps['platformVersion'] = '4.4.2' # 指定平台的系统版本 desired_caps['deviceName'] = 'Android Emulator' # 设备名称 desired_caps['appPackage'] = 'com.android.calculator2' # 包名 desired_caps['appActivity'] = '.Calculator' # launcherActivity
    cls.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) # 定义webdriver对象 @classmethod def tearDownClass(cls): print('class end') cls.driver.quit() #所有用例执行完之后退出 def setUp(self): print('test case start') #用例执行前 def tearDown(self): print('test case end') #用例执行后 #加号运算case def test_add(self): print('add case is running') self.driver.find_element_by_name("5").click() self.driver.find_element_by_name("+").click() self.driver.find_element_by_name("8").click() self.driver.find_element_by_android_uiautomator("new UiSelector().text(\"=\")").click() time.sleep(2) self.driver.find_element_by_name("CLR").click() #减运算case def test_sub(self): print('sub case is running') self.driver.find_element_by_name("9").click() self.driver.find_element_by_xpath("//android.widget.Button[contains(@content-desc,'minus')]").click() self.driver.find_element_by_name("1").click() self.driver.find_element_by_name("=").click() time.sleep(2) self.driver.find_element_by_name("CLR").click() if __name__ == '__main__': #构造测试集 suite = unittest.TestSuite() suite.addTest(TestFixture('test_sub')) suite.addTest(TestFixture('test_add')) #执行测试 runner = unittest.TextTestRunner() runner.run(suite)

    测试输出结果如下:

    module start
    Class start
    test case start
    sub case is running
    test case end
    test case start
    add case is running
    test case end
    class end
    module end

    可以看到,在测试机上,执行完减运算后马上执行加运算,测试用例连续执行。执行完所有的测试用例后才退出

    转载请注明出处并带上原链接

  • 相关阅读:
    Python初学笔记
    linux学习笔记一----------文件相关操作
    Linux目录结构及常用命令(转载)
    最简单冒泡事件及阻止冒泡事件
    IDEA 从SVN检出项目相关配置
    拦截器实现原理
    CUDA基本概念
    1.2CPU和GPU的设计区别
    RAM和DDR
    Myriad2 简介
  • 原文地址:https://www.cnblogs.com/fancy0158/p/10046333.html
Copyright © 2011-2022 走看看