首页 > 其他分享 >webUI自动化测试框架

webUI自动化测试框架

时间:2022-10-25 21:44:35浏览次数:49  
标签:info 框架 self element webUI 自动化 login type find

一、设计思路

框架采用python3+yaml+po+unittest+HTMLTestRunner等技术编写的UI自动化测试框架
1.使用Page Object模式将页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),一个页面建一个对象类,提高用例的可维护性;
2.使用yaml管理页面空间元素和测试用例数据。例如一个页面元素发生变化时,不需要去修改代码,只需要在对应的页面元素yaml文件中修改即可。
3.以每个页面作为模块管理,随时组装,互不影响。

二、测试框架分层

 

 

1.框架层:基础组件封装,支撑整个框架的流程执行及功能扩展
2.用例层:根据用例场景构造test测试方法
3.业务层:封装页面对象类,一个页面建立一个类,业务层基础基础层page类
4.基础层:二次开发selenium的元素定位已经操作
 

三、编写用例方法

例如我需要新增百度搜索测试场景用例:

1.在testyaml目录下新增一个页面对象yaml文件,利用封装的yamlload方法将yaml文件中的dom元素读取出来,提供给封装页面对象类调用并定元素操作。

testinfo:
      - id: test_login001
        title: 登录百度网页测试
        info: 打开百度首页
testcase:
      - element_info: s-usersetting-top
        find_type: ID
        operate_type: click
        info: 打开登录对话框
      - element_info: userName
        find_type: ID
        operate_type: send_keys
        info: 输入用户名称
      - element_info: TANGRAM__PSP_11__password
        find_type: ID
        operate_type: send_keys
        info: 输入密码
      - element_info: TANGRAM__PSP_11__submit
        find_type: ID
        operate_type: click
        info: 单击登录按钮

check:
      - element_info: //*[@id="user"]/span[2]
        find_type: XPATH
        info: 检查用户是否登录

  

2.在testdata目录下新增一个yaml文件提供给用例测试数据

-
  id: test_login001.1
  detail : 验证登录成功
  screenshot : phone_pawd_empty
  data:
    username: 13501198450
    password: Han520520
  check :
     - hhil833

3.在page_obj目录编写百度搜索场景的页面对象类封装

testData = getyaml(setting.TEST_Element_YAML + '/' + 'baidu_login.yaml')
class baidu_login(Page):

    def  open_login(self,username,pwd):
        """

              :return:
              """
        dig_login_button_loc = (By.ID, testData.get_elementinfo(0))
        self.find_element(*dig_login_button_loc).click()
        sleep(1)
    def go_login(self,username,pwd):
        self.find_element(By.ID, testData.get_elementinfo(1)).send_keys(username)
        sleep(1)
        self.find_element(By.ID, testData.get_elementinfo(2)).send_keys(pwd)
        sleep(1)
        self.find_element(By.ID, testData.get_elementinfo(3)).click()

    def user_login(self, username, pwd):
        self.go_login(username,pwd)
        sleep(1)
        check = (By.ID, By.ID,testData.get_CheckElementinfo(0))
        return  self.find_element(*check).text

4.在testcase目录编写测试用例文件,采用ddt数据驱动读取yaml测试数据源文件

    @ddt.data(*testData)
    def user_login_verify(self, username, password):
        """
               用户登录
               :param phone: 手机号
               :param password: 密码
               :return:

               """

        baidu_login(self.driver).user_login(username,password)
    def test_login(self,datayaml):
        """
                登录测试
                :param datayaml: 加载login_data登录测试数据
                :return:
                """
        self.log.info("当前执行测试用例ID-> {0} ; 测试点-> {1}".format(datayaml['id'],datayaml['detail']))
        # c = self.user_login_verify(datayaml["username"],datayaml["password"])
        # log.info("检查点-> {0}".format(c))
        # self.assertEqual(c, datayaml['check'][0],
        #                  "成功登录,返回实际结果是->: {0}".format(c))

5.通过多线程将驱动传给执行方法,并行开启多个浏览器执行测试

    def run_case(self,function,name):
        thread_list=[]
        for i in range(1):
            appium_server = threading.Thread(target=function,args=(name,))
            thread_list.append(appium_server)
            for j in thread_list:
                j.start()

    def run_casea(self):
        name = ["chrome", "chrome"]
        for i in name:
            self.run_case(self.test_baidu,i)

  

6.操作元素封装

def get_element(self, find_type, element=""):
    # getdata = getyaml(file)

    # type = getdata.get_find_type(find_type_index)
    if find_type == "id" or find_type == "ID":
        print(1111111111111111111111)
        return self.driver.find_element_by_id(element)
    elif find_type == "xpath" or find_type == "XPATH":
        return self.driver.find_element_by_xpath(element)
    elif find_type == "name" or find_type == "NAME":
        return self.driver.find_element_by_name(element)
    else:
        raise Exception("错误!")

7.浏览器驱动封装

 

  

 

  

 

标签:info,框架,self,element,webUI,自动化,login,type,find
From: https://www.cnblogs.com/hanjialong/p/16826318.html

相关文章

  • 【2022-10-25】前端Vue框架(二)
    一、Style和class数据绑定语法:属性名=js变量/js语法:class=’js变量、字符串、js数组’class:三目运算符、数组、对象{red:true}:style=’js变量、字符串、js数......
  • APP自动化效果测试工具
    1.背景项目测试过程中经常需要在手机端体验语音产品的识别效果和稳定性,识别效果与手机硬件强相关无法抛开硬件影响。因此开发了一套基于uiautomator2+pythonUI自动化工具,......
  • ELK 不香了?试试接入这款更轻量的日志框架,真的很省心!
    当我们公司内部部署很多服务以及测试、正式环境的时候,查看日志就变成了一个非常刚需的需求了。是多个环境的日志统一收集,然后使用Nginx对外提供服务,还是使用专用的日志收......
  • Python3自动化打包项目发布到pypi
    效果D:\Program\Python310\python.exeD:\data\git\PythonLinuxBasicModule\upload.pyC:\Users\刘某usage:twine[-h][--version][--no-color]{register,check,upl......
  • SpringCloud微服务实战——搭建企业级开发框架(四十六):【移动开发】整合uni-app搭建移动
      近年来uni-app发展势头迅猛,只要会vue.js,就可以开发一套代码,发布移动应用到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、......
  • project 属性不能选择 .net目标框架版本
    project属性不能选择.net目标框架版本 如下图       右键卸载项目  卸载卸载项目后 右键编辑项目  将下面这句话 <TargetFrameworkVersion......
  • 手写基于 http 的RPC框架
    一、模块划分聚合工程顶级模块:​new_rpc​​父模块:​httpclient_rpc​​子模块:​​httpclient_rpc_server、httpclient_rpc_client​、​httpclient_rpc_pojo​​​使用顶级......
  • 接口自动化测试面试题
    1json和python中字典的区别?字典是一种数据类型,而json不是,json是一种数据交换格式,但他又类似与字典,都是key/values储存,所以json和字典可以相互转化,json.lodes()、jso......
  • ui自动化测试面试题总结
    1UI自动化框架如何让搭建?首先按照Po模式搭建自动化框架,搭建框架使用的技术是selenium+pytest,将框架分为6层,common层(公共层:basepage[基础操作封装]、hander_config......
  • 「行业应用」界面框架Kendo UI助力企业加速完成财务数据可视化
    爱尔兰某知名数字化服务机构研发主管RichardOrmond:“CRH是一家知名的建筑材料经销上市公司,年收入超过18亿欧元。为了更好地向公司投资者展示公司财务、业务策略等,最近他......