zoukankan      html  css  js  c++  java
  • UI自动化框架介绍

    测试技术:

    python3+selenium+PO+unittest+HTMLTestRunner

    PO模型介绍:

    PO为什么会出现?
    页面对象模型,当页面特别多的时候,我们的代码更容易维护

    PO是什么?
    1、Page Object,是一种设计模式,用来管理和维护一组web元素的对象库;
    2、在PO模式下,应用程序的每一个页面都有一个对应的page class;
    3、每一个page class维护着页面的元素集合和操作这些元素方法;

    PO的优势:
    1、PO提供了一种业务流程与页面元素分离的模式,这使得测试代码变得更加清晰;
    2、页面对象与用例分离,能够更好的复用对象;
    3、可复用的页面代码会使代码风格更加优化;

    代码结构:

    find element封装:

    将element信息转变为元组

     def selector_to_locator(self, key):

        selector_by = self.get_by_key(key)
        selector_value = self.get_value(key)
        if selector_by == 'id':
            locator = (By.ID, selector_value)
        elif selector_by == 'name':
            locator = (By.NAME,selector_value)
        elif selector_by == 'class_name':
            locator = (By.CLASS_NAME,selector_value)
        elif selector_by == 'link_text':
            locator = (By.PARTIAL_LINK_TEXT,selector_value)
        elif selector_by == 'tag_name':
            locator = (By.TAG_NAME, selector_value)
        elif selector_by == 'xpath':
            locator = (By.XPATH,selector_value)
        elif selector_by == 'css_selector':
            locator = (By.CSS_SELECTOR,selector_value)
        else:
            raise NameError("Please enter a valid selector of targeting elements.")
        return locator
     
    find element方法
    def find(self,key,value=''):
        '''  定位到元素,返回元素对象,没定位到,Timeout异常 loctor 传元祖,如("id", "kw")  '''
        if not isinstance(key, tuple):
            locator = self.selector_to_locator(key)
        else:
            locator = key
        if isinstance(locator, tuple):
            if value != '':
                ele = WebDriverWait(self.driver, setting.UI_WAIT_TIME).until(
                    ES.text_to_be_present_in_element_value(locator, value))
                return ele
            else:
                ele = WebDriverWait(self.driver, setting.UI_WAIT_TIME).until(ES.presence_of_element_located(locator))
                if ele:
                    return ele
                else:
                    print(f"定位失败:定位方式->{locator[0]}, value值->{locator[1]}")
                    return False
    定位元素数据分离:

    unittest介绍:

    nittest中最核心的四个概念是:test fixture,test case, test suite, test runner 。

    1. unittest是Python自带的单元测试框架,可以用其来作为自动化测试框架的用例组织执行框架
    2. unittest的流程:写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中
    3. 一个class继承unittest.TestCase即是一个TestCase,其中以 test 开头的方法在load时被加载为一个真正的TestCase。
    4. 用 setUp()tearDown()setUpClass()以及 tearDownClass()可以在用例执行前布置环境,以及在用例执行后清理环境
    5. 参数中加stream,可以将报告输出到文件:可以用TextTestRunner输出txt报告,以及可以用HTMLTestRunner输出html报告

    最终执行效果:

    不积跬步,无以至千里;不积小流,无以成江海。
  • 相关阅读:
    如何用vue实现树形菜单?
    spring+springMVC,声明式事务失效,原因以及解决办法
    java提高同步锁的几点建议
    java自定义before和after
    java线程池
    jdk并发工具包之锁
    ReentrentLock重入锁
    java守护线程
    ReentrantLock
    java多线程基础
  • 原文地址:https://www.cnblogs.com/xuezhimin-esage-2020/p/14107355.html
Copyright © 2011-2022 走看看