UI自动化

UI自动化测试

      针对于界面上的操作,来让程序自动的安装一定的规则来跑起来。

web端的UI自动化 app端UI自动化

市场上对自动化的需求

接口自动化 (60%)

      unittest: 写用例,做断言

      requests:发送http请求的

      pymysql:查询数据库校验数据正确的

web端自动化 (30%)

      selenuim:帮助你去操作页面的元素的(操作HTML)

移动端自动化 (10%)

      appium-client-python:写代码的

      appium:编制adb命令

      adb:操作手机

自动化测试

# 什么是自动化测试
  让程序代替人工去验证系统功能的过程

# 回顾自动化测试
    接口测试我们可以借助postman实现,单构建好请求后一个一个的发送,我们同时可以到处测试集和测试环境,借助
Newman工具一次性执行,并生成报告,实现自动化(postman+Newman-->工具实现的接口自动化)
    我们也可以借助自己封装的接口自动化测试框架实现接口自动化
    (Python+unittest+pymysql/CSV/JSON/HTMLTestRunner)
    但需要注意,在自动化中最终要的就是断言的实现,没有断言,就无自动化可言. 断言是使用代码代替人工判断响应
结果的手段,是实现自动化的关键. 
# 自动化解决了什么问题?
  1. 回归测试
  2. 压力测试
  3. 兼容性测试
  4. 提高测试效率,保证产品质量
  回归测试:项目在发新版本之后对项目之前的功能进行验证
  压力测试:可以理解多用户同时去操作软件,统计软件服务器处理多用户请求的能力
  兼容性测试:不同阅览器(IE、Firefox、Chrome)等等
# 自动化测试的优点
  1. 较小的时间内运行更多的测试用例
  2. 自动化脚本可重复运行
  3. 减少人为的错误
  4. 客服手工测试的局限性
# 自动化测试的误区
  1. 自动化测试可以完全代替手工测试
  2. 自动化测试一定比手工测试厉害
  3. 自动化测试可以发掘更多的BUG
  4. 自动化测试适用于所有功能
    UI,即(User Interface,简称UI,用户界面)是系统盒用户之间进行交互盒信息交换的媒介。
UI自动化:
  Web自动化测试金额移动自动化测试够属于UI自动化,UI自动化测试就是借助自动化工具对程序UI层进行自动化的测试。
#  为什么对UI采用自动化测试?
    从不同的阶段或层次来说,自动化测试可以分为单元测试、接口测试、UI测试。如果一个产品从没有做单元测试或接口测
试,只作UI层的自动化测试不科学的,很难从本质上保证产品的质量。
    如果妄图实现全面的UI层的自动化测试更是劳民伤财,投入了大量人力时间结果却不尽人意,因为越往上层,用例维护
成本越高,尤其是UI层的元素经常改变的产品。
    但不管什么样的产品,最终呈现给用户的是UI层,测试人员必须在UI层投入大量的精力,所以,我们有必要通过自动化的
方式帮助我们"部分解放"重复的劳动,在解放劳动力和维护成本之间找到一个平衡,自动化测试就会成为我们的一个利器。
# 什么项目适合做UI自动化测试?
    项目周期:首先是项目周期较长的产品,一般在一年半以上的产品
    项目需求变动不频繁:如果项目需求变动频繁,在做自动化是会导致大量的脚步需要不断的迭代维护,就失去了UI自动化
解放劳动力的目的
    项目需求回顾测试:项目需要回归测试,当测试一遍后,再次回归是可以直接通过自动化脚步回测、
# UI自动化测试介入时机
    项目需要在功能测试完毕后
# UI自动化测试所属分类  
  黑盒测试(功能测试)
  白盒测试(单元测试)
  灰盒测试(接口测试)
  注意:UI自动化测试属于黑河测试(功能测试)
Web自动化测试环境搭建
```
# 自动化测试环境搭建三要素:
    python环境
    selenium框架
    Chromedriver驱动:下载地址,注意版本的高度吻合
    Chrome阅览器阅览器

# selenium安装与Chromedriver下载匹配
# 安装selenium:
    pip install selenium
# chromedriver下载匹配:
  下载地址:https://npm.taotao.org/mirrors/chromedriver/
  查看版本  找到关于Google
  将chromedriver放到python的Scripts里
from selenium import webdriver
import time 

browser = webdriver.Chrome()
browser.get('网址')

# 通过id定位
# browser.find_element_by_id("AuserA").send_keys('123456')

# time.sleep(2)

# 通过class定位
# browser.find_element_by_class_name('telA').send_keys('123456')

# time.sleep(2)

# 通过name定位
# browser.find_element_by_name('passwordA').send_keys('123456')

# 启动超链接
# browser.find_element_by_partial_link_text('网站').click()

# 绝对路径
browser.find_element_by_xpath('/html/body/div/fieldset/form/p[2]/input').send_keys('123456')

# 相对路径
browser.find_element_by_xpath('//form/p[3]/input').send_keys('123456')

# try:
#     browser.find_element_by_xpath("//input[@name='user' and @class='login-test']").send_keys('123456')
# except Exception as e:
#     raise e
# finally:
#     time.sleep(5)
#     browser.quit()

# CSS定位
# id选择器    #id名称


# browser.find_element_by_css_selector('#userA').send_keys('123456')

time.sleep(3)

# class选择器  .class名

# browser.find_element_by_css_selector('.emailA').send_keys('asdfg')

# 元素选择器
# browser.find_element_by_css_selector('input').send_keys('asdfg')

time.sleep(3)

# 属性选择器
# browser.find_element_by_css_selector("[name='passwordA']").send_keys('123@qq.com')

time.sleep(3)

# browser.find_element_by_css_selector("[name='emailA'][class='emailA dzyxA']").send_keys('123@qq.com')

# 层级选择器

# 父子层关系选择器
# browser.find_element_by_css_selector('#pa>#userA').send_keys('admin')

# 隔代层级关系选择器
# browser.find_element_by_css_selector('.zc #userA').send_keys('admin')
posted @ 2021-07-12 19:36  欧阳物语  阅读(252)  评论(0编辑  收藏  举报