1. 输入url后浏览器又什么变化?

image.png
1.首先在客户端浏览器中输入url地址
2.检查浏览器中是否存在此地址的缓存,有的话直接在界面显示,没有进行DNS域名解析,获取相应的IP地址
3.通过TCP三次握手建立连接
4.浏览器向服务器发送http请求,请求数据包
5.服务器将请求进行处理,形成数据库中增删改查的sql
6.服务器将sql发送到数据库
7.数据库处理sql,将结果返回给服务器
8 .服务器对结果进行处理,发送至浏览器
9.通过TCP四次挥手断开连接
10.浏览器对静态资源进行缓存(静态资源:无论访问多少次,得到结果都是一致css,js,图片,音视频等)
11.解析html,DOM树,document,css,js
12.ajax异步刷新(ajax异步刷新不需要重新加载整个页面,得到新的数据并且进行渲染)

2.gui自动化测试采用了哪些具体技术

:::info

  • python做一个基本代码的编写
    • 单例保证浏览器为一个
    • po模式元素的集中管理
    • ddt的设计思想,一个测试数据的多次执行
  • selenium库对界面元素进行定位和操控
  • pytest库进行测试用例的管理和调度
  • allure进行报告的输出
  • jenkins进行集成
  • git脚本的自动管理
  • tomcat做页面的展示 :::

    3.selenium定位元素有哪些

    :::info

  • 八大元素定位

  • id定位
  • name、 class name(多个class用.来标识)、tagname
  • link text 、partial link text(链接中文本值得一部分)
  • css selector,xpath
  • find_elemen与find_elements的区别,返回多个和返回列表
  • 平时用id,name的唯一,定位不到,使用xpath,层层定位 :::

    4.gui自动化过程中元素操作碰到了哪些问题,如何解决的?

    :::info

  • 场景+解决

  • 元素属性的属性限制,readonly,使用document移除
  • 路径动态变化避免绝对路径,采用相应路径来定位,()
  • 页面存在悬停,actionchain的方法进行点击和操作
  • 元素在页面下方,未显示在当前窗口,使用window.scrollto(x,y)
  • alert弹窗
  • frame框架 需要进行切换
  • 浏览器版本和驱动版本必须一致,否则闪退或者运行异常
  • 匹配多个元素,使用elements进行下标
  • 元素尚未加载,找不到元素,需要加载等待
  • 要操作的页面控件出现在不同的浏览器窗口,需要进行window窗口切换处理
  • 操作某个页面目标元素时,这个元素被其他的窗口或者元素遮挡,要对被遮挡的元素进行操作或者添加等待时间,使的目标元素可以被正常操作。在空白处进行点击
  • 某些页面无法通过以上常规手段进行用户行为模拟,可以通过图像识别的技术结合坐标时间鼠标的模拟
  • id属性的动态变化,借助其它属性操作
  • 当前元素没有合适的属性进行识别,采用父子路径,兄弟路径进行元素识别(补充) :::

    6. ui自动化的框架介绍一下

    :::info
  1. 分层 驱动层->行为组件层()->测试用例层()->测试执行层—>报告层
    login+barcodeSearch+payment+logout 非会员的购买行为 login+barcodeSearch+memberCreditSearch+payment+logout 会员的购买行为
  2. 公共的封装: common 文件读取,DB读取操作 config:db信息,目录信息进行配置管理
  3. Pytest
  4. 数据文件 数据是如何组织并进入测试用例的
  5. 个人
    1. common 公共层,封装文件读写,DB操作,
    2. page页面层
    3. test测试用例层
    4. main.py测试执行
    5. config 配置信息层
    6. data数据层
    7. report 报告层 :::

      7.UI自动化是人工触发执行的,还是自动运行,多长时间执行一次

      :::info
  • 自动定期执行,测试脚本设计完成后,调试没有问题后,推送到svn中进行脚本管理
  • svn和jenkin进行配置设置,每隔两个小时执行一次
  • ui用例有三四百个测试用例,大概执行一个小时和两个小时
  • 生成的测试报告在tomcat中,可以通过网页查看 :::

    8.gui自动化什么时候介入,为什么要做gui的自动化测试

    :::info

  • 为了回归测试时,解放人力,测试新功能是否对原有功能造成影响

  • 下个版本的回归测试时接入
  • 每做完功能测试后,抽取20%设计脚本,
  • 不断迭代,工作量会不断增大,进行回归时,减少任务量, :::

    9.自动化测试用例是如何设计和准备的

    :::info

  • 主要基于编写的测试用例,要求做自己的自动化测试脚本转化

  • 重要基本的用例进行编写代码
  • 利用pytest进行管理,添加相应的标记(测试方法,所属模块) :::

    10. 自动化脚本是怎么生成的?是录制的吗?

    :::info

  • latalongl工具的录制(不建议说)录制虽然简单,但是效率不高

  • python编写,F12界面元素抓取

    • 元素抓取定位
    • selenium编写
    • pom元素管理 :::

      11. 口述一下你自动化测试项目中比较核心的一部分代码,具体用到什么方法

      :::info
  • ddt的模型

    • 驱动层
      • 单例,避免重复打开浏览器
        • 定义类方法,类变量,如果有值直接返回,没值创建浏览器
    • 业务层
      • 类变量实现元素的集中管理单例,元组当时
    • 测试层
      • 对业务层的调用
    • 测试执行层
      • 对用例的调用
    • 公共层
      • 公共的方法
    • 配置层
      • ip等配置信息
    • 行动层
  • 或者说kdt

    • excal数据的解析hasattr,getattr :::

      12. 自动化测试用例你们是怎么维护的

      :::info
  • 通过pycharm本地编写,svn的操作

  • jenkins做部署,自动化的执行
  • 多个人员时的合并,老大来做 :::

    13. 自动化的报告你们是如何生成的,一什么样的方式进行展现的?

    :::info

  • pytest+allure

  • ptest自己中的模块或者全部执行
  • tomcat的部署发布到端口中 :::

    14. 自动化时验证码是如何解决的

    :::info

  • 开发人员做一个万能验证码,或者功能屏蔽

  • python的图像识别

    • Image类进行指定区域的截取
    • Tesseract图像识别 :::

      15. selenium webdriver 误报

      :::info 有的。
      驱动版本在处理浏览器多窗口进行切换时,对窗口的句柄处理时,提示不是字符串类型报错,但实际上获取到的句柄信息就是字符串;
      排查对比后,是驱动版本问题,更换后操作正常 :::

      16. xpath 的了解

      :::info
  • 相对路径(//),和绝对路径(从/)

  • 属性的方式(//标签)
  • 多属性(@属性=值 and @属性=值)
  • 父节点(parent::),子节点(../..)
  • 哥哥 弟弟
  • 文本匹配的方式(text()= 值)(contains(text(),值)) :::

    17. UI测试用例设计了多少?

    :::info 注:UI自动化测试用例一般是在手工测试用例的基础上转化的,测试用例四个模块大概700条
    1. 可以根据手工用例的数量,按照一定的比例进行计算自己相关项目的UI用例数量,比例不同公司会有-区别,20%-60%都行,150左右
    2. 其中自己编写的测试用例大概有多少?”
    3.半个小时-一个小时 :::

    18.用例执行多长时间,如何执行

    :::info

  • UI自动化一般模拟用户操作,页面加载等也都需要一定的时间,所以执行速度并不快,一般300个用例执行时间以小时为单位计算,可以按照300左右用例/小时进行大致估算

  • 自动化的测试用例是按照自动测试需要,人工触发执行还是周期性自动执行
  • 一般生产环境和自动化的测试环境可以设置周期性自动执行(需要任务调度)
  • 也可以测试人员在需要回归时,人工触发后脚本自动执行,不触发不执行的模式” :::

    19.Selenium webdriver的quit和close的区别

    :::info

  • quit是关闭整个浏览器,包括进程

  • close是关闭浏览器中的当前窗口 :::

    20. Selenium webdriver的工作原理

    :::info

  • 客户端脚本如python,在执行时,会向驱动发送http请求

  • 驱动作为http server,会接收并处理请求,对浏览器进行操控,然后返回结果给客户端 :::

    21.po模式介绍

    :::info

  • pagobject 页面对象模型,主要是为了减少代码重复,让代码可读性更强,更容易维护,

  • 包括3层:对象层、操作层、业务层,对象层主要封装一些元素定位的方法,
  • 操作层封装元素的特定操作,业务层把一个或多个操作组合具体的业务,实现具体的功能测试 :::