zoukankan      html  css  js  c++  java
  • python+ selenium&APPium自动化 page Object 设计模式

    题记: 之前公司项目比较稳定, 在进行了系统测试,想用自动化测试进行冒烟测试,或者对主要功能进行测试, 因此用到了PO模式 因此做个记录:

    Page Object

    Page Object模式是使用Selenium的广大同行最为公认的一种设计模式。在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织。

    Page Object模式,创建一个对象来对应页面的一个应用。故我们可以为每个页面定义一个类,并为每个页面的属性和操作构建模型。体现在对界面交互细节的封装,测试在更上层使用页面对象,在底层的属性或者操作的更改不会中断测试。减少代码重复,提高测试代码的可读性和可维护性。

    我理解就是:把重复用的代码封装成个方法 或者类,在维护脚本的时候只需要改一个地方,有点像解耦(请大神指教是这个意思吗?)

    下面以登录为案例:使用的是unitest框架

    image:放置每次执行用例的截图,方便调试

    report:放置每次执行的测试报告

    test_case:

      -drvier:封装了driver类

      -model:封装了从文件读取数据等一下工具类

      -page_object:存放一些页面的元素和定位文件,base.py 把selenium的定位重新封装;

    case1

    case2 : 真正的测试用例

    run_all_test 执行用例

    主要思路:在driver.py 封装了driver的方法, myunit.py 调用driver方法,在case类中继承myunit 类 就等于每次用例都有生产driver

    driver.py:

    def browser():
    
        desired_caps = {
            'platformName':'Android',
            'deviceName': '1f9XXXX08b',
            'platformVersion':"5.1",
            'appPackage':'com.XXXXXss',
            'appActivity':'com.meXXXXXXXXs.activity.LoginActivity',
            'unicodeKeyboard': True,
            'resetKeyBoard': True,
            "automationName":"uiautomator2"
    
        }
    
    
        driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
        time.sleep(10)
        # d = driver.current_activity
        # print(d)
    
        return driver

     myunit.py

    import driver
    
    class MyTest(unittest.TestCase):
    
        def setUp(self):
            self.driver = browser() #调用driver
            self.driver.implicitly_wait(10)
    
    
        def tearDown(self):
            self.driver.quit()

    login_case.py

    class LoginTest(myunit.MyTest):
    
        def test_login_user_null(self):
            '''用户名为空'''
            #配置IP地址
            ipo = IPConfigPage(self.driver)
            lpo = LoginPage(self.driver)
            lpo.click_ip_btn()
            ipo.ipconfig_action("127.0.0.1")
            #配置登录信息
            lpo.login_action("","")
            result = driverwait.find_toast(self.driver, u'账号为空')
            print(u"用户名和密码为空校验结果%s"%result)
            function.insert_image(self.driver, "login_user_null.jpg")

     最后总结:个人ui自动化测试局限性比较大,相对于接口自动化,俗话说越后介入成本越高,ui自动化属于中后期,需要在项目稳定情况,小公司很难用的上,如果遇到项目迭代快,需求变化大,维护成本过高。而接口自动化能更早介入测试较早介入测试,维护成本低,而且能部分解决安全问题,人力资源成本高相对

  • 相关阅读:
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    重读《深入理解Java虚拟机》三、Java虚拟机执行的数据入口(类文件结构)
  • 原文地址:https://www.cnblogs.com/shoebill/p/10824104.html
Copyright © 2011-2022 走看看