appium 学习笔记(五)

全局变量global:

声明全局变量global之后,在以后函数的使用中都不用在前面增加self.

def setUp(self): #准备测试环境,每个用例前执行
    desired_caps = {}
    desired_caps['platformName'] = 'Android'
    desired_caps['paltformVersion'] = adbbase.platformVersion()
    desired_caps['deviceName'] = adbbase.platformName()
    desired_caps['appPackage'] = adbbase.appPackage()
    desired_caps['appActivity'] = adbbase.appActivity()
    global driver
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)

    time.sleep(5)

def test_login(self): #用例,以test开头;登录测试
    """登录"""
    driver.find_element_by_id("phoneNumber").send_keys("13575220850")
    driver.find_element_by_id("passWord").send_keys("q0125016")
    driver.back()
    driver.find_element_by_id("login").click()
    time.sleep(1)
    try:  #自动点击app授权弹框
        button = driver.find_element_by_xpath("//android.widget.Button[contains(@text,'允许')]")
        button.click()
    except:
        print("自动点击应用app授权出错!")
    time.sleep(1)
    title = driver.find_element_by_id("com.happy.food:id/title").text
    self.assertEqual(title,"开心粮票")

用例执行顺序:

添加多条用例:test_login、test_billing_details,系统并不会按编写的顺序来执行用例,而是按照名字来执行,先实行b开头的test_billing_details,再执行l开头的login。

如要想要按顺序来执行用例可以修改用例的名字,例如test_a_login、test_b_billing_details

或者用unittest的suite方法

class HappyFoodTest(unittest.TestCase): #自动化框架,继承unittest.TestCase
    """开心粮票"""

    def setUp(self): #准备测试环境,每个用例前执行
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['paltformVersion'] = adbbase.platformVersion()
        desired_caps['deviceName'] = adbbase.platformName()
        desired_caps['appPackage'] = adbbase.appPackage()
        desired_caps['appActivity'] = adbbase.appActivity()
        global driver
        driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)

        time.sleep(5)

    def test_login(self): #用例,以test开头;登录测试
        """登录"""
        # driver = self.driver
        driver.find_element_by_id("phoneNumber").send_keys("13575220850")
        driver.find_element_by_id("passWord").send_keys("q0125016")
        driver.back()
        driver.find_element_by_id("login").click()
        time.sleep(1)
        try:  #自动点击app授权弹框
            button = driver.find_element_by_xpath("//android.widget.Button[contains(@text,'允许')]")
            button.click()
        except:
            print("自动点击应用app授权出错!")
        time.sleep(1)
        title = driver.find_element_by_id("com.happy.food:id/title").text
        self.assertEqual(title,"开心粮票")



    def test_billing_details(self):
        """结算详情"""
        driver.find_element_by_id("com.happy.food:id/mine").click()
        driver.find_element_by_id("com.happy.food:id/balanceDetail").click()
        title = driver.find_element_by_id("com.happy.food:id/title").text
        self.assertEqual(title,"结算详情")
        # assert_equal(title,"结算详情")

    def tearDown(self): #清理环境,用例执行完后执行
        driver.quit()

def Suite():
    suiteTest = unittest.TestSuite()
    suiteTest.addTest(HappyFoodTest("test_login"))
    suiteTest.addTest(HappyFoodTest("test_billing_details"))
    return suiteTest

if __name__ == '__main__':
    Suite()


当执行用例后发现问题,每条用例在执行前都会先运行setUp,再执行完后又运行tearDown。这样的话每次都会执行driver.quit(),也就是每次都没退出驱动重新打开,这样一来每次都需要重新登录,且很浪费时间。

这里可以用到@classmethod装饰器使每个case里的setUp和tearDown只执行一次

from appium  import webdriver
import time
import adbbase
import unittest


class HappyFoodTest(unittest.TestCase): #自动化框架,继承unittest.TestCase
    """开心粮票"""

    @classmethod
    def setUpClass(cls): #准备测试环境,每个用例前执行
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['paltformVersion'] = adbbase.platformVersion()
        desired_caps['deviceName'] = adbbase.platformName()
        desired_caps['appPackage'] = adbbase.appPackage()
        desired_caps['appActivity'] = adbbase.appActivity()
        global driver
        driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)

        time.sleep(5)

    def test_login(self): #用例,以test开头;登录测试
        """登录"""
        driver.find_element_by_id("phoneNumber").send_keys("13575220850")
        driver.find_element_by_id("passWord").send_keys("q0125016")
        driver.back()
        driver.find_element_by_id("login").click()
        time.sleep(1)
        try:  #自动点击app授权弹框
            button = driver.find_element_by_xpath("//android.widget.Button[contains(@text,'允许')]")
            button.click()
        except:
            print("自动点击应用app授权出错!")
        time.sleep(1)
        title = driver.find_element_by_id("com.happy.food:id/title").text
        self.assertEqual(title,"开心粮票")

    def test_billing_details(self):
        """结算详情"""
        driver.find_element_by_id("com.happy.food:id/mine").click()
        driver.find_element_by_id("com.happy.food:id/balanceDetail").click()
        driver.get_screenshot_as_file("./scr/"+sys._getframe().f_code.co_name+'.png')
        title = driver.find_element_by_id("com.happy.food:id/title").text
        self.assertEqual(title,"结算详情")

    @classmethod
    def tearDownClass(cls): #清理环境,用例执行完后执行
        driver.quit()

def Suite():
    suiteTest = unittest.TestSuite()
    suiteTest.addTest(HappyFoodTest("test_login"))
    suiteTest.addTest(HappyFoodTest("test_billing_details"))
    return suiteTest

if __name__ == '__main__':
    Suite()

在使用@classmethod是需要把def setUp(self): 、def tearDown(self): 换成 def setUpClass(cls): 、def tearDownClass(cls):


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值