• 多测师讲解 ---面试课程之自动化python讲解(204)---高级讲师肖sir


    自动化笔试题:

    一、

    什么项目适合做自动化?

    项目周期长、需求稳定、前期版本稳定、在回归测试实现自动化、测试人员必须具备自动化测试的能力、项目进度压力不大、自动化脚本可重复使用,有自动化需求。
    二、
    2.1、公司自动化的流程?或如何做自动化
    第一种回答:测试需求分析,设计出自动化测试用例,从而搭建自动化测试的框架,设计与编写自动化脚本,验证测试脚本的正确性,最终完成自动化测试测试脚本,并输出测试结果。
    第二种:首先我们对自动化的需求进行评审,对测试的场景进行选择,还有测试工具的选择,之后根据评审后的需求文档在RF­ride里进行用例的编写,执行测试用例,对用例结果进行分析,最后做出总结报告
    2.2
    (1)分层设计测试用例;
    详解:(封装的话一般分为三层,即元素层、流程层和案例层,我首先是对关键字进行提取到元素层,关键字的提取的话可以运用selenium2library库或者自己创建关键字进行提取,然后将元素层导入到流程层进行编写,最后将流程层导入到案例层,这样的话极大得节省了时间,并且方便后期的调用和维护,同时在后期调用时也不会对之前的案例产生影响)
    (2) 规划命名,做好注释,
    (3)定期执行用例,进行增删改
    三、
    你用做自动化遇到的定位问题?(自动实现过程中遇到哪些问题)
     
    解答思路:

    定位问题(携程网的选人的类型,立即抢,伪类元素)

    框架本身的问题出发?

    从用例的角度(编写、执行、维护)出发?


    解答:
    定位问题:

    Select Frame(第三方登录-iframe导致定位不到元素)

    Execute Javascript(携程官网成人儿童数量选择、滚动条)

    Switch Browser(百度京东窗口切换)

    Select Window(新开页面的选择)

    Select From List By Value(JS下拉列表)

    Mouse Over(隐藏列表)

    • alert弹框
     
    1.使用某种定位方式无法定位时,更换定位方式(比如用文本内容无法定位时,改用id)
    2.页面元素过多时,等待时间不够长,导致无法定位到元素,此时需要延迟等待时间
    3.页面过长,无法直接定位元素,需要使用js语句,来将页面滑动到对应位置
    4.页面有iframe,无法直接定位到元素,需要先切换进到iframe里面,再对元素进行相应的操作,如果是多个iframe嵌套在一起,需要一层一层的切换进去,在完成相应的操作之后,需要退出iframe,这里有2种方法,一种是逐级退出,另一种是直接退回到HTML主文档
    5.在打开了多个浏览器窗口时,需要先获取窗口句柄,然后通过索引来切换窗口,当分不清楚当前窗口是哪一个时,可以通过打印窗口标题来确认
    6.当一个元素操作完成之后可能会遮挡住另一个元素,这时候我们需要考虑把这两个元素的操作顺序换过来
    7.访问首页时,有临时广告挡住了需要定位的元素,可以先通过点击操作关闭广告
     
    1)印象最深的是在测登录的时候,因为做出借项目的时候涉及到第三方资金存管,刚开始登录成功的时候会跳出弹框,所以在写用例的时候设计了自动点击取消,当我要测试资金管理模块,注册了银行存管账户并绑定了银行卡,所以在我再去测试资金模块的时候一直在报错,登录之后就无法执行下一步,后来经过仔细排查后发现这个问题,把那个点击取消的步骤删除后就可以正常执行了。
    2) 登录后会跳出风险提示框,一直无法定位那个我已知悉,用了xpath等等,后来是找的上上级去定位成功的。
    3) 有的时候网络不好,页面跳转的慢,以及页面跳转需要时间,无法定位到元素,所以用了sleep 休眠
    4) 没有最大化窗口,定位不到被遮挡的元素
    5)iframe框 再进行点击
    四、自动化熟记常用的关键字?和自动定义关键字实现?
    Open Browser https://www.baidu.com/ gc 打开浏览器并访问网页
    Input Text id=kw 多测师 通过id属性定位
    Execute Javascript document.getElementById('kw').value='多测师' 通过js定位
    sleep 2 强制等待2s
    Maximize Browser Window 窗口最大化
    Reload Page 刷新页面
    Go To https://www.sogou.com/ 当前窗口访问指定url
    Go Back 回退
    Input Text id=userAccount admin 输入账户名
    Input Password id=loginPwd 123456 输入密码
    Click Button id=loginBtn 点击按钮(只使用于type=”Button”的标签)
    Click Element id=loginBtn 点击元素
    Click Link hao123 点击链接hao123
    Click Link //div[@id="s-top-left"]/a[2] 通过xpath定位hao123元素
     
    ${title} Get Title 获取标题
    Switch Browser 1 切换浏览器(序号从1开始)
    Switch Browser a 根据别名切换浏览器
    Select Window 领券中心 切换窗口到领券中心
    Select Window main 切换到第一个窗口
    Select Window ${handel_1[1]} 切换窗口(按索引取值,正向从0开始,负向从-1)
    Select From List By Index 索引从0开始
    Close window 关闭当前窗口
    Close browser 关闭当前浏览器
    Close all browser 关闭所有浏览器
    Title should be 百度一下,你就知道 验证当前窗口的title
    ${text} get text 获取文本内容
    Log ${text}
    ${value} get value 获取value属性值
    Log ${value}
    Execute Javascript window.scrollTo(0,1000) 滚屏
    ${size} get window size 获取窗口大小
    Log ${size}
    Select radio button sex girl 单选框选值
    Select checkbox xpath=//*[@value=’python’] 复选框选值
    Select Frame id=e_iframe 进入iframe
    Unselect Frame 退出iframe
    Select From List By Index //select[@id="J_roomCountList"] 2 通过索引来选(索引从0开始)
    Select From List By value //select[@id="J_roomCountList"] 2 通过value值来选
    Select From List By label //select[@id="J_roomCountList"] 2间 通过值来选
    Mouse over id=3 鼠标悬停在某个元素上
    Handle alert accept 点击确认
    Handle alert dismiss 点击取消
    Page should contain 百度一下 断言当前页面是否含有该文本信息
    Page should not contain 百度一下 断言当前页面是否不含有该文本信息
    Page should contain element id=kw 断言当前页面是否含有该元素
    Page should not contain element id=kw 断言当前页面是否不含有该元素
    Assign id to element kw=dcs 修改某个元素的id属性
    Wait until page contains 设置 直等到页面包含该文本信息
    Wait until page dose not contain 设置 直等到页面不包含该文本信息
    Wait until page contains element kw 直等到页面包含该元素
    Wait until page dose not contain element kw 直等到页面不包含该元素
    ${cell} get table cell //table[@class="_table"] 7 2 获取表格的值
    Log ${cell}
    RF连接数据库:
    1.安装mysqldb客户端
    2.Pip  install  robotframework-databaselibrary
    3.导入DatabaseLibrary库
    语法:
    Connect To Database MySQLdb jyf root 123 192.168.135.129 3306 连接数据库
    Table Must Exist duoceshi 判断表存在
    Check If Exists In Database select * from duoceshi; 判断查询的数据存在
    Check If Not Exists In Database select * from duoceshi; 判断查询的数据不存在
    Delete all rows from table duoceshi; 删除表内所有数据
    disconnect from Database 断开数据库连接
    Execute Sql Script D:sql.txt 执行数据库脚本文件
    Execute Sql String insert into duoceshi values(5,1834,'wangwu',37); 执行sql语句
    ${a} Query select * from duoceshi; 查询
    Log ${a}
    ${b} Row Count select * from duoceshi; 获取查询结果行数
    Log ${b}
    Row Count Is 0 select * from duoceshi where id=3; 判断查询结果是否为0
    Row Count Is Equal To X select * from duoceshi; 3 判断查询结果是否为3
    Row Count Is Greater Than X select * from duoceshi; 3 判断查询结果是否大于3
    Row Count Is Less Than X select * from duoceshi; 3 判断查询结果是否小于3
     
    RF自定义关键字:
    (一)在C:Python27Libsite-packages目录下新建python package 包 (名为duoces),查看C:Python27Libsite-packagesduoces目录下是否有__init__.py ,若没有则自行创建
    (二)C:Python27Libsite-packagesduoces目录下新建关键词文件yzm.py,把类封装在里面
    (三)在__init__.py 文件中写入:
    # coding=utf-8
    from yzm import Yzm
    class duoces(Yzm): 类名需要与自定义的库名一致
    ROBOT_LIBRARY_SCOPE = "GLOBAL" 将库设置为全局
    (四)在RF中,导入库
    注:一次定义多个关键字,则在关键字文件的类中写多个方法
    或者写多个类,在__init__.py中使用多继承
     
    4.1自动化关键字:   
    Open Browser +完整的url +操作平台   
    Close Browser 关闭浏览器
    close all Browser 关闭所有浏览器   
    Maximize Browser Window 使当前打开的浏览器全屏
    Input Text 文本输入       
    input password密码框输入
    Click Element 点击元素   
    Click Button 点击按钮   
    Sleep 线程等待      
    Get Title获得当前浏览器窗口的title 信息          
    Get Text 获取文本信息,定位文本信息的元素
    go to当前窗口访问指定url  
    go back返回上一步
    自定义关键字流程
    1、打开pycharm点击file中的settings按钮
    2、点击project pycharm中的project structure
    3、点击add content root将python添加进去
    4、点击external libraries中的python包,然后点击lib目录,点击site-packages目录
    5、创建一个新的文件夹,名字自定义
    6、然后根据路径找到你所创建的文件,里面会有一个.py结尾的文件,复制粘贴
    将复制的文件名改为你的目录名
    7、回到pycharm,点开你所创建的目录,点击你改名后的文件,在这个文件里根据
    需求编写代码
    8、写好之后这个文件就是一个模块,里面的函数代码就是方法
    9、在原文件里导入你所写模块里的方法,并将这个模块设为全局变量,使其可以
    rf导入和使用
    from duoceshi import uties
    class duoceshi(uties):
        ROBOT_LIBRARY_SCOPE = "GLOBAL"
     
    4.2   RF自定义关键字:
    (一)在C:Python27Libsite-packages目录下新建python package 包 (名为duoces),查看C:Python27Libsite-packagesduoces目录下是否有__init__.py ,若没有则自行创建
    (二)C:Python27Libsite-packagesduoces目录下新建关键词文件yzm.py,把类封装在里面
    (三)在__init__.py 文件中写入:
    # coding=utf-8
    from yzm import Yzm
    class duoces(Yzm): 类名需要与自定义的库名一致
    ROBOT_LIBRARY_SCOPE = "GLOBAL" 将库设置为全局
    (四)在RF中,导入库
    注:一次定义多个关键字,则在关键字文件的类中写多个方法
    或者写多个类,在__init__.py中使用多继承
     
    自动化关键字:   
    Open Browser +完整的url +操作平台   
    Close Browser 关闭浏览器
    close all Browser 关闭所有浏览器   
    Maximize Browser Window 使当前打开的浏览器全屏
    Input Text 文本输入       
    input password密码框输入
    Click Element 点击元素   
    Click Button 点击按钮   
    Sleep 线程等待      
    Get Title获得当前浏览器窗口的title 信息          
    Get Text 获取文本信息,定位文本信息的元素
    go to当前窗口访问指定url  
    go back返回上一步
    4.4   自定义关键字流程
    1、打开pycharm点击file中的settings按钮
    2、点击project pycharm中的project structure
    3、点击add content root将python添加进去
    4、点击external libraries中的python包,然后点击lib目录,点击site-packages目录
    5、创建一个新的文件夹,名字自定义
    6、然后根据路径找到你所创建的文件,里面会有一个.py结尾的文件,复制粘贴
    将复制的文件名改为你的目录名
    7、回到pycharm,点开你所创建的目录,点击你改名后的文件,在这个文件里根据
    需求编写代码
    8、写好之后这个文件就是一个模块,里面的函数代码就是方法
    9、在原文件里导入你所写模块里的方法,并将这个模块设为全局变量,使其可以
    rf导入和使用
    from duoceshi import uties
    class duoceshi(uties):
        ROBOT_LIBRARY_SCOPE = "GLOBAL"
     
    10、结合你的项目讲解自动化?
    我在上家公司也做过自动化测试,当时公司主要是用RF做自动化测试
    RF是基于python语言开发的一个测试框架,它主要结合了ride、wxpython、第三方库selenium2library,RF是通过ride工具编写用例脚本,执行脚本后生成测试报告
      我当时搭建自动化测试环境的时候,首先安装了python,因为要用到python语言,然后就是安装wxpython(GUI图形库),再就是安装ride工具和setuptools,setuptools是用来安装第三方库的,最后就是安装我在测试中需要用到的库,例如selenium2library。这样我的自动化测试环境就搭好了
      我讲一下我项目中精英标这块的流程,这个模块的主要流程是注册-我要出借-精英标。首先我引用open browser关键字,后面接我们项目的网址,来打开浏览器,浏览器我们用的是谷歌,当时有出现网址打不开的情况,后面查明是因为浏览器驱动未升级,版本过低导致的;接下来我为了保证网页打开后使页面元素都显示出来,引用了关键字maxmize
    Browser window来进行窗口最大化,然后通过click link关键字来点击注册,在这里我引用sleep关键字来等待页面跳转至注册页面;接着引用input text关键字来进行账号输入,引用input password来进行密码输入和密码确认输入;然后引用click element关键字来选取已同意注册协议等,接着引用click button关键字来点击确定注册按钮;注册完成后系统会自动登录,引用sleep关键字等待页面跳转至项目主界面;接下来就是引用mouse over关键字将鼠标悬停在‘我要出借’模块上面,利用click link点击精英标字段;然后sleep等待页面跳转到新窗口,这里需要切换窗口,所以我先定义一个变量,在引用get window handles来获取所有窗口的句柄,并传参给定义的变量,然后引用select window关键字,通过句柄索引来进行窗口切换;窗口切换成功后,通过execute JavaScript+window.scrollTo(0,1000)关键字来进行窗口下滑,然后引用click element来选择想要投的精英标,引用sleep等待页面跳转;然后引用input text输入借出金额,引用select from list by value关键字来操作下拉框,进行借出期限的选择,引用click button来点击确认按钮,这里会弹出一个确定借出的弹框,当时我看了页面HTML代码,发现这是一个frame框,所以我引用select frame关键字进入框内,然后click button点击确认,最后引用Unselect frame关键字退出frame框。按照我的习惯,完成一个流程后我会关闭浏览器,这里引用了关键字close browser。好了,这就是我项目模块流程的介绍,谢谢
     
    6、python
     
     
     
     
     
     
    面试题:你觉得是自动化重要,还是功能重要?
    都重要,优势互补
  • 相关阅读:
    数据结构的理解
    等价、偏序和全序
    等价、偏序和全序
    二叉树与树的理解
    SICP 习题 (2.10)解题总结: 区间除法中除于零的问题
    div:给div加滚动栏 div的滚动栏设置
    textarea文本域宽度和高度(width、height)自己主动适应变化处理
    OSX: 逻辑卷管理系统Core Storage(1)
    垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
    string实现
  • 原文地址:https://www.cnblogs.com/xiaolehua/p/13859581.html
Copyright © 2020-2023  润新知