App自动化之unittest单元测试框架的使用-----中级篇(10)

单元测试框架(unittest)的安装:

<1> 使用pip命令: pip install unittest

<2> 在pycharm里安装

单元测试框架(unittest)的主要方法:

setUp(): 在每条用例开始前做准备工作

tearDown(): 在每条用例结束后做清除工作

setUpClass(): 在全部用例开始前做准备工作(仅做一次)

tearDownClass(): 在全部用例结束后做清除工作(仅做一次)

TestCase(): 测试用例,一般是写入一个类,让其继承

TestSuite(): 测试容器、测试套件,将用例放入

TestLoader(): 加载器,将测试套件放入后,会去寻找所有以test开头命名的测试用例

注意事项:

在单元测试框架中,所有的自动化用例都要以test_命名开头,且它是通过ACSII码值来进行转换,根据从小到大的顺序来执行用例

补充说明,装饰器:

@classmethod: 在方法上引用,表示这是一个动态类方法

@staticmethod; 在方法上引用,表示这是一个静态类方法

测试的apk: 一家民宿

自动化用例场景三种:

<1>进入一家民宿内----点击想去的目的地/景点/-------输入内容为北京----点击下拉内容的第一个----查看主页中的目的地是否与我输入的一致(也是北京)

<2> 进入一家民宿内—点击入住-退房日期----选择入住日期为明天(5-22日)----选择退房日期(5-23日)–点击确定----
获取主页内的入住日期是否与我输入的一致

<3> 进入一家民宿内----点击入住人数—选择人数为2位房客-----获取主页内入住人数是否是我选择的(2人)

一、准备工作,使用adb命令连接模拟器,打开appium,写入要测试的apk各个参数

在这里插入图片描述
noReset: 跳过引导页

二、启动会话,获取定位元素信息

三、代码实现:

import unittest
from appium import webdriver
import time
from appium.webdriver.common.touch_action import TouchAction
caps = {}
caps["platformName"] = "Android"
caps["platformVersion"] = "5.1.1"
caps["deviceName"] = "127.0.0.1:62001"
caps["appPackage"] = "me.onehome.app"
caps["appActivity"] = ".activity.ActivitySplash_"
class YJMS(unittest.TestCase):
    def setUp(self) -> None:
        self.driver = webdriver.Remote("http://localhost:4723/wd/hub",caps)
        self.driver.implicitly_wait(20) # 隐式等待,会等元素加载完去寻找
        time.sleep(5)
        TouchAction(self.driver).tap(x=207, y=1425).perform()  # 点击立即开启
        self.width = self.driver.get_window_size()['width']  # 做适配工作,获取当前手机的宽
        self.height = self.driver.get_window_size()['height']  # 做适配工作 获取当前手机的高

    def tearDown(self) -> None:
        # 在每条用例结束后做清除工作,关闭app,提供良好的测试环境,互不干扰
        self.driver.quit()

    def test_001(self):
        # 点击想去的目的地:
        self.driver.find_element_by_id('me.onehome.app:id/tv_Destination').click()
        # 输入内容:
        input = self.driver.find_element_by_id('me.onehome.app:id/editText')
        input.send_keys('北京')

        # 点击下拉内容的第一个
        time.sleep(3)  # 因为是tap点击,所以先让下拉内容加载出来再去模拟手势去点击它
        TouchAction(self.driver).tap(x=200, y=210).perform()

        # 获取主页内容的文本信息,来与我输入的内容做断言,符合既通过,不符合既用例失败

        result = self.driver.find_element_by_id('me.onehome.app:id/tv_Destination').get_attribute('text')
        # 判断 是否包含
        unittest.TestCase().assertIn(result, "北京市", msg='用例失败')

    def test_002(self):
        #点击入住-退房日期
        self.driver.find_element_by_id('me.onehome.app:id/tv_check_data').click()

        #选择入住日期为明天(5-22日)
        x = 697/900
        #做适配工作,可以让代码在不同的分辨率下正常运行,697为要点击的x位置,900为分辨率的宽,获取的是要点击内容的x值占比
        y = 882/1600
        # 做适配工作,可以让代码在不同的分辨率下正常运行,882为要点击的x位置,1600为分辨率的宽,获取的是要点击内容的y值占比
        time.sleep(5)
        TouchAction(self.driver).tap(x = x*self.width,y = y*self.height).perform()

        # 选择退房日期(5-23日)
        x = 840/900
        y = 886/1600
        time.sleep(5)
        TouchAction(self.driver).tap(x = x*self.width,y = y*self.height).perform()

        # 点击确定:
        self.driver.find_element_by_id('me.onehome.app:id/confirmTv').click()

        # 获取一家民宿主页内的入住信息,以文本信息返回
        result = self.driver.find_element_by_id('me.onehome.app:id/tv_check_data').get_attribute('text')

        # 断言预期结果与实际结果是否相等:
        self.assertEqual("05月22日-05月23日 共1晚",result)

    def test_003(self):
        #点击入住人数 - --
        renshu = self.driver.find_element_by_id('me.onehome.app:id/tv_check_person_Sum')
        renshu.click()

        # 选择人数为2位房客
        x = 137/900
        y = 340/1600
        time.sleep(3)  #任何tap点击前都要等待下,因为tap点击是瞬时操作,与element(定位元素)不同
        TouchAction(self.driver).tap(x = x*self.width,y = y*self.height).perform()

        # 获取主页内入住人数是否是我选择的(2)
        time.sleep(2)
        result = self.driver.find_element_by_id('me.onehome.app:id/tv_check_person_Sum').get_attribute('text')
        self.assertEqual("2位房客",result)

if __name__ == '__main__':
    unittest.main(verbosity=3)  # verbosity 后面 = 是用例的条数,可以清晰的看到哪条用例通过,哪条未过

四、运行结果

在这里插入图片描述

需要注意的是,运行方式要整篇运行,首先要将当前的.py文件路径复制并放入以python的运行方式,示例:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
最后run 运行

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46457203/article/details/106266083