精华内容
下载资源
问答
  • Android自动化测试初探

    千次阅读 2016-11-21 11:18:42
    本文内容:Android自动化测试框架初探 版权声明:本文为原创文章,未经允许不得转载 博客地址:http://blog.csdn.net/kevindgk 初步了解 什么是自动化测试 优点 缺点 前提条件 应用场景 基本原理 目前主流...

    本文内容:Android自动化测试框架初探

    版权声明:本文为原创文章,未经允许不得转载

    博客地址:http://blog.csdn.net/kevindgk

    初步了解

    Android自动化测试框架从2007年发展至今时今日日趋成熟,从早期官方提供的半自动化工具逐步演变到现在的全自动化框架,包括支持跨应用、WebView等,其功能越来越强大,并融合库思想、数据驱动、模块化、函数桩等先进的自动化测试思想和理念,使得测试更加方便。尤其是在使用敏捷开发的团队中,自动化测试显得尤为重要。

    Android自动化测试框架,从狭义上讲就是通常提起的自动化测试工具,比如Robotium、Appium、Selenium等,广义上除了这些自动化测试工具,还有测试管理平台,包含测试中对测试用例的管理、报告输出、数据统一存储等综合管理平台。

    注意,本文档中指的自动化测试,一般值得均是Android端的自动化测试。

    什么是自动化测试

    自动化测试是把以人为驱动的测试行为转化为机器执 行的一种过程。通常,在设计了测试用例并通过评审之后,由测 试人员根据测试用例中描述的规程一步步执行测试,得到实际结 果与期望结果的比较。在此过程中,为了节省人力、时间或硬件 资源,提高测试效率,便引入了自动化测试的概念。

    本质:编程测试,即 编写一个程序测试另一个程序。

    过程:录制脚本>修改录制脚本>回放脚本>查看报告。

    小编作为一名Android开发,更关心的是自动化测试框架能够给我们开发人员以及整个项目带来什么益处。

    优点

    • 对项目:节省了人力、物力以及时间资源,极大地提高了测试的效率;
    • 对开发人员:更加深入的了解整个项目的业务逻辑以及测试的流程,有利于开发以及减少bug的产生;
    • 对测试人员:可以了解整个项目的代码,更好的完成白盒以及黑盒测试,同时也能提高自身的编码能力。

    缺点

    • 测试脚本不稳定、回放经常出错
    • UI变化时,脚本批量Fail,需要修改大量脚本
    • 测试脚本的可复用性和可维护性以及可读性极差
    • 网络环境差时,由于等待时间问题,脚本批量Fail
    • 环境配置信息变化频繁,需要频繁修改自动化脚本
    • 无法对现有的工具进行功能扩展
    • 工具生成的测试报告不符合公司报告需求

    前提条件

    • 软件需求变动不频繁
    • 项目周期足够长
    • 自动化测试脚本可重复使用

    所以说,我们不能够为了使用自动化测试框架而强行使用,也不能由于对自动化测试的不了解而趋之若鹜。我们应该根据自己的项目情况,在合适的开发阶段,选择合适的自动化测试工具,来帮助提高整个团队的开发效率。作为一个leader,也会会比较关心在团队中引入自动化测试的优势和缺点,但是作为一个敲代码的同学来讲,应该更喜欢贴一万行代码直接将核心知识,接下来就是小编对目前了解到的Android自动化测试框架的整理。

    应用场景

    应用场景 测试内容 特点
    性能测试 流畅度、速度、流量、耗电量、内存、CPU等 模拟正常、峰值和异常情况,监控应用的性能数据。测试重复性强,指标固定,并且需要测试数据的横向和纵向对比,形成庞大的测试矩阵,非常适合使用自动化测试
    稳定性测试 ANR、Crash、闪退等 模拟用户的长时间操作,测试应用的稳定性,通常使用Monkey做测试
    功能测试 业务需求测试、回归测试等 由于目前产品快速迭代,造成了脚本实现和维护等成本大,需要不断的磨合,常常需要结合使用多种测试工具进行开发,开发难度较大
    兼容性测试 适配不同的手机 常用方法就是使用业界比较成熟的测试平台:阿里云测、腾讯优测、百度MTC、Testin等
    接口测试 重要的API测试 和PC端的接口测试思路一样,通过脚本去遍历所有重要的API,非常适合使用自动化测试去实现,脚本相对稳定而且效果明显
    安全测试 静态扫描代码、权限等发现安全隐患 目前各大平台提供的安全测试都是一些基本的检测,远远比不上专门的安全测试
    单元测试 Android Junit 开发同学自行完成,作用并不是很大,可以直接参考robotium的白盒测试
    线上监控 对线上数据监控 不属于传统的自动化测试范畴,主要是对线上的数据监控,然后利用数据分析发现问题,可以非常直接的提升产品的质量

    当逐渐深入的了解自动化测试,越发觉得自动化测试包含的内容十分庞大,涉及到前端、后台、UI等各个部分,而且需要掌握的知识点很多,需要使用的工具很多,需要学习的语言也很多,另人望而生畏。然后,随着慢慢的整理和分析,才对整个自动化测试有了一个初步的完整性的了解。

    基本原理

    通用的基础框架一般都会包含三个核心部分:

    • 动作执行:即通过坐标/ID等获取界面控件,并模拟用户端事件;
    • 结果判断:对脚本中的结果进行判断并输出测试结果;
    • 报告展示:对测试结果进行统计分析,然后输出适合项目的HTML报告。

    目前主流的测试工具简介

    下面的介绍都是截至到当前时间,在实际开发中比较常用的自动化测试工具,但是由于近几年自动化测试发展十分迅速,很有可能几个月或者几年之后,会使用了新的技术,或者下面工具的特点也会做出一些改变,所以接下来的介绍目的就是让大家有个初步的了解。各个工具的使用方式以及优缺点还需要去各自的官方网站上进行查看,小编对于新的技术或者工具的首要态度就是一切依官方为准!

    1.功能测试

    Web端:

    • Selenium: Java/Python/Ruby/C#

    Android端:

    • Robotium: Java
    • Appium: Java/Python/Ruby/C#
    • UIAutomator: Java,google官方
    • Monkeytalk: Java

    IOS:

    • UIAutomation:JS,苹果
    • Appium
    • Monkeytalk

    。。。

    2.性能测试

    Android端:

    • Monkey

    Web端:

    • HP Loadrunner: JS/C
    • Apache Jmeter: Java

    3.安全测试

    • IBM appscan
    • Fiddler

    Android端自动化测试工具对比

    1.Monkey

    Android系统自带的稳定性测试的小工具,主要通过adb命令来启动monkey测试,monkey在运行时会根据命令行参数的配置,生成伪随机的事件流,并在Android设备上执行该事件流,同时对测试系统进行检测。

    优点

    • 基本使用十分方便

    缺点

    • 往往不能满足测试需求,需要进行二次开发,但是二次开发的难度一般都比较大。

    2.UIAutomator

    Android官方支持的自动化测试框架,>=API 17,Android 4.2

    语言:Java

    优点

    • 官方支持更新:Android原生支持,测试以来环境少,创建方便
    • 层次接口明晰:框架层析结果分明,api明析,上手成本很低
    • 基于控件交互:支持通过ID获取控件进行交互(>=API 18,Android 4.3)
    • 不依赖于源码:黑盒测试
    • 事件等待优秀:在事件等待方面接口丰富,控制灵活精确,表现优秀
    • 支持跨进程测试:Rom层级的测试,棒棒哒~

    缺点

    • 仅支持Native应用,不支持Hybrid应用(混合应用,即包含WebView的H5网页的应用),希望后续官方能够支持

    3.Robotium

    基于Instrumentation

    语言:Java

    优点

    • 支持Native应用和Hybrid应用;
    • 基于Instrumentation,测试代码运行与被测应用所在的进程,控件识别与模拟UI时间都可以快速执行;
    • 支持白盒/黑盒测试;
    • 可以通过Maven、Gradle、Ant来运行测试用力,所以很好的作为持续集成的一部分。

    缺点

    • 由于基于Instrumentation的事件发送,所以无法跨应用。
    • 代码运行在被测试进程,可能影响被测进程的内存、CPU占用,对性能检测或稍有误差。

    4.Appium

    Android:

    • 版本>=4.2:官方的UIAutomator
    • 版本>=2.3:Selendroid,基于Android的Instrumentation框架

    IOS:

    • UIAutomation:ios系统自带的UI自动化测试工具

    语言:Java/Python/Ruby/C#

    优点

    • 支持多种应用程序:Native App、Hybrid App、Web App
    • 支持多种脚本
    • 支持应用之间的跳转的测试
    • 跨平台:可以使用同一个API在Android和IOS上都可以运行的脚本

    缺点

    • 必须连接电脑,遇到脱机执行的场景往往不能满足需求
    • 只能用于UI自动化测试,很多情况下测试验证只能通过界面来进行

    只有在各个工具都使用过之后,才能真正体会到他们的优缺点,基本上都是对google官方的工具进行二次封装,使得使用起来更加便捷,所以我们需要对底层的几种框架有一个基本的了解,那么再学类似的工具就十分简单了。

    云测平台

    随着性能测试、兼容性测试的需求日益增加,越来越多测厂商开始推广云测试平台,比如:

    这些云测试平台大同小异,与Google的Cloud Test Lab功能基本相同,包含:

    a.兼容性测试:通过大量真机覆盖大部分机型

    b.压力测试:通过脚本实现压力测试

    c.缺陷分析:通过代码静态扫描和测试中发生的ANR、Crash等提供应用的缺陷分析

    d.性能测试:在测试中监控应用性能等数据

    e.远程真机租用:用户可以远程访问DeviceLab中的真机,并通过远程控制的方式进行使用。

    使用云测平台在一定程度上解决了很多公司的测试问题,特别是一些付费的服务,可以进行一些”深度测试和分析”,让公司享受到更好的测试服务。例如可以帮助测试人员进行分析、录制脚本和回放等功能,对于一些初创企业来说,目前算是一种比较好的测试与优化手段。

    总结

    关键点:可持续集成

    难点:对自动化框架的搭建、工具的二次开发

    其实自动化框架只是日常测试中的一个辅助手段,说白了它就是利用自动化测试框架以及工具能理解的程序去代替人去完成测试,通过比较执行的结果来判断测试是否通过然后生成报告。它的又是很明显,无论多么复杂的操作,即使反复执行成千上万遍,只要程序没有问题,它都会快速的执行完毕,比手工要轻松的多;但劣势也很明显,最大的缺点就是工具是人工思考后的一个固话程序,它不会变通,是按照人的旨意来完成相应的任务。所以测试人员对工具的应用和改造能力显得尤为重要,通过对被测应用的深入认识和思考,转化成可以实现的测试需求,再配合这些工具和写代码的同事进行封装,就可以完成测试中各个领域的人工代替工作。

    引用

    1.《腾讯Android自动化测试实战》 丁入敏 盛娟等著 机械工业出版社

    2.《深入理解Android自动化测试》 许奔著

    3.安卓APP自动化测试(kevin公开课专辑)

    4.《Android 群英传 之 神兵利器》 徐宜生著

    联系方式

    邮箱:815852777@qq.com

    微信:

    展开全文
  • 当我第一次知道自动化测试的时候,除了知道“自动化”这三个有些高大上的称呼之外,我对自动化测试一无所知,正如谈恋爱一样,找女朋友之前要知道她是谁。 自动测试就是把以人为驱动的测试转化为机器执行的一种过程...

    一、前言

    最近有童鞋和我抱怨,说网上很难搜到那些全面又合适的自动化测试面试题,这里根据我个人的经验以及收集整理的:

    你没看错,不慌,慢慢来。

    先从什么是自动化测试开始说起哈!

    二、什么是自动化测试?

    什么是自动化测试?

    当我第一次知道自动化测试的时候,除了知道“自动化”这三个有些高大上的称呼之外,我对自动化测试一无所知,正如谈恋爱一样,找女朋友之前要知道她是谁。

    自动测试就是把以人为驱动的测试转化为机器执行的一种过程,它是一种以程序测试程序的过程。嗦嘎!那么...

    三、自动化测试需要学什么技能?

    这是我以前在CSDN写的,可以详细的了解2020年自动化测试攻城狮需要学什么技能了!

    2020年软件测试工程师需要具备的技能--需要学什么(灵魂拷问)

    https://blog.csdn.net/pengjiangchun/article/details/105292247

    四、2020年全网最全的自动化测试面试题和答案,原来干货都在这里

    1、你会封装自动化测试框架吗?

    这个问得最多,甚至有很多公司直接写在招聘要求中!

    当然可以,自动化框架主要的核心框架就是分层+PO模式:分别为:基础封装层BasePage,PO页面对象层,TestCase测试用例层。然后再加上日志处理模块,ini配置文件读取模块,unittest+ddt数据驱动模块,jenkins持续集成模式组成。

    2、如何把自动化测试在公司中实施并推广起来的?

    1.项目组调研选择自动化工具并开会演示demo案例,我们主要是演示selenium和robotframework两种。

    2.搭建自动化测试框架,在项目中逐步开展自动化。

    3.把该项目的自动化流程、框架固化成文档 

    4.推广到公司的其它项目组应用

    3、请描述一下自动化测试流程?

    1.编写自动化测试计划

    2.设计自动化测试用例

    3.编写自动化测试框架和脚本

    4.调试并维护脚本

    5.无人值守测试

    6.后期脚本维护(添加用例、开发更新版本)

    4、自动化测试用例如何编写?以下答案二选一即可:

    1.用例是自动化测试工程师自己设计的,一般刚开始已基本业务流程为主(登录--完成一个业务--退出)

    2.从系统测试用例中进行筛选或由业务工程师提供

    5、上一个项目中自动化测试的执行策略?

    上一个项目中是定时执行的,设置的执行时间是晚上12点,执行完毕后会自动发送邮件通知

    6、自动化测试发现BUG多吗?

    不多,因为之前项目组是把已经测试通过的基本功能再进行自动化脚本编写和在后续版本执行自动化测试,它主要是保证已经测试通过的功能在新版本更新后没有问题。

    7、你觉得自动化测试的价值在哪里?你们公司为什么要做自动化测试?

    引用自动化测试之后,能代替大量繁琐的回归测试工作,把业务测试人员解放出来,既而让业务测试人员把精力集中在复杂的业务功能模块上,自动化测试一般是对稳定下来的功能进行自动化,保证不会因为产品的更新导致之前稳定下来的功能出现BUG

    8、自动化测试有误报过bug吗?产生误报怎么办?

    有误报过,有时候自动化测试报告中显示发现了bug,实际去通过手工测试去确认又不存在该bug。

    误报原因一般是:

    1.元素定位不稳定,需要尽量提高脚本的稳定性;

    2.开发更新了页面但是测试没有及时更新维护!

    9、自动化测试过程中,你遇到了哪些问题,是如何解决的?

    1.频繁地变更页面,经常要修改页面对象类里面的代码

    2.自动化测试偶尔出现过误报

    3.自动化测试结果出现覆盖的情况:Jenkins根据时间建立文件夹

    4.自动化测试代码维护比较麻烦

    5.自动化测试进行数据库对比数据

    10、在上一家公司做自动化测试用的什么框架?

    可以说出以下自己擅长的一种:

    1.python+selenium+unittest+htmltestrunner

    2.python+selenium+pytest+allure

    3. robotframework+Selenium2Library

    11、你们自动化团队有自己的群吗?

    当然有:我们使用的群号是:695458161  有很多软件测试和自动化大神解决项目中的问题,还会不定时的发放免费资料。

    12、在selenium自动化测试中,你一般完成什么类型的测试?自动化覆盖率?

    主要是冒烟测试和回归测试。回归测试主要写一些功能稳定的场景,通过自动化手段去实现,节约测试时间。因为自动化测试用例也是在不断的更新和迭代,没有刻意去统计,大概在30%-40%左右!

    13、在执行脚本过程,如何实现当前元素高亮显示?

    这个其实就是利用javaScript去修改当前元素的边框样式来到达高亮显示的效果,

    14、如果一个元素无法定位,你一般会考虑哪些方面的原因?

    1.页面加载元素过慢,加等待时间

    2.页面有frame框架页,需要先跳转入frame框架再定位

    3.可能该元素是动态元素,定位方式要优化,可以使用部分元素定位或通过父节点或兄弟节点定位。

    4.可能识别了元素,但是不能操作,比如元素不可用,不可写等。需要使用js先把前置的操作完成,

    15、元素定位方法你熟悉的有哪些?

    id      name      classname       link_text      css      xpath

    16、遇到frame框架页面怎么处理?

    先用driver.switch_to.frame()跳转进去frame,

    然后再操作页面元素,

    操作完后使用driver.swith_to.default_content()跳转出来

    17、遇到alert弹出窗如何处理? 

    使用driver.switch_to.alert方法先跳转到alert弹出窗口

    然后再通过accept点击确定按钮,通过dismiss点击取消难,通过text()获得弹出窗口的文本。

    18、如何处理多窗口?

    这个多窗口之间跳转处理,我们在项目中也经常遇到。就是,当你点击一个链接,这个链接会在一个新的tab打开,然后你接下来要在新tab打开的页面查找元素,

    1.我们在点击链接前使用driver.current_window_handle获得当前窗口句柄。

    2.再点击链接。点击后通过driver.window_handles获得所有窗口的句柄,

    3.然后再循环找到新窗口的句柄,然后再通过driver.switch_to.window()方法跳转到新的窗口。

    19、怎么验证元素是enable/disabled/checked状态?

    定位元素后:分别通过isEnabled(),isSelected(),isDisplayed()三个方法进行判断。

    20、 如何处理下拉菜单?

    在Selenium中有一个叫Select的类,这个类支持对下拉菜单进行操作。使用方法如下:

    1.定位元素

    2.把定位的元素转化成Select对象。

    sel = Select(定位的元素对象)

    3.通过下标或者值或者文本选中下拉框。
    sel.select_by_index(index);
    sel.select_by_value(value);
    sel.select_by_visible_text(text);

    21、在日历这种web 表单你是如何处理的?

    首先要分析当前网页试用日历插件的前端代码,看看能不能通过元素定位,点击日期实现,如果不能,可能需要借助javascript。还有些日历控件一个文本输入框,可以直接sendKeys()方法来实现传入一个时间的数据。

    22、举例一下说明一下你遇到过那些异常

    常见的selenium异常有这些:

    NoSuchElementException:没有该元素异常
    TimeoutException : 超时异常

    ElementNotVisibleException :元素不可见异常
    NoSuchAttributeException :没有这样属性异常
    NoSuchFrameException :没有该frame异常

    23、关闭浏览器中quit和close的区别

    简单来说,两个都可以实现退出浏览器session功能,close是关闭你当前聚焦的tab页面,而quit是关闭全部浏览器tab页面,并退出浏览器session。知道这两个区别,我们就知道quit一般用在结束测试之前的操作,close用在执行用例过程中关闭某一个页面的操作。

    24、在Selenium中如何实现截图,如何实现用例执行失败才截图

    在Selenium中提供了一个get_screenshot_as_file()的方法来截图的,一般结合try/except捕获异常时使用,进行错误截图。

    25、如何实现文件上传?

    定位元素后,直接使用send_keys()方法设置就行,参数为需要上传的文件的路径。

    26、自动化中有哪三类等待?他们有什么特点?

    1.线程等待(强制等待)如time.sleep(2):线程强制休眠2秒钟,2秒过后,再执行后续的代码。建议少用。

    2.imlicitlyWait(隐式等待)会在指定的时间范围内不断的查找元素,直到找到元素或超时,特点是必须等待整个页面加载完成。

    3.WebDriverWait(显式等待)通常是我们自定义的一个函数代码,这段代码用来等待某个元素加载完成,再继续执行后续的代码

    27、你写的测试脚本能在不同浏览器上运行吗

    当然可以,我写的用例可以在在IE,火狐和谷歌这三种浏览器上运行。实现的思路是封装一个方法,分别传入一个浏览器的字符串,如果传入IE就使用IE,如果传入FireFox就使用FireFox,如果传入Chrome就使用Chrome浏览器,并且使用什么浏览器可以在总的ini配置文件中进行配置。需要注意的是每个浏览器使用的驱动不一样。

    28、什么是PO模式,为什么要使用它

    PO是Page Object 模式的简称,它是一种设计思想,意思是,把一个页面,当做一个对象,页面的元素和元素之间操作方法就是页面对象的属性和行为,PO模式一般使用三层架构,分别为:基础封装层BasePage,PO页面对象层,TestCase测试用例层。

    29、你们测试团队如何提升自己的测试技能?

    我们有自己的软件测试技术群:695458161:如果有任何软件测试方面的疑问,关于软件测试、接口测试、自动化测试、性能测试、面试经验等都可以在群里解决,群里有同行大神一起交流技术。共同进步,一起成长!

    如果大佬们觉得有哪些写得不对,欢迎留言或私信,谢谢!

    五、预祝面试成功,给您的OFFER,请收下!

    最后预祝每一位求职者都能找到自己如意的工作!马上实现升职加薪!

    如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入: Python自动化测试技术群: 953306497 群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

    在这里插入图片描述


    作者:来自
    出处:https://blog.csdn.net/ZangKang1
    原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。

    展开全文
  • 一、前言 最近有童鞋和我抱怨,说很...当我第一次知道自动化测试的时候,除了知道“自动化”这三个有些高大上的称呼之外,我对自动化测试一无所知,正如谈恋爱一样,找女朋友之前要知道她是谁。 自动测试就是把以...

    一、前言

    最近有童鞋和我抱怨,说网上很难搜到那些全面又合适的自动化测试面试题,这里根据我个人的经验以及收集整理的:

    你没看错,不慌,慢慢来。

    先从什么是自动化测试开始说起哈!

    二、什么是自动化测试?

    什么是自动化测试?

    当我第一次知道自动化测试的时候,除了知道“自动化”这三个有些高大上的称呼之外,我对自动化测试一无所知,正如谈恋爱一样,找女朋友之前要知道她是谁。

    自动测试就是把以人为驱动的测试转化为机器执行的一种过程,它是一种以程序测试程序的过程。嗦嘎!那么...

    三、自动化测试需要学什么技能?

    这是我以前在CSDN写的,可以详细的了解2020年自动化测试攻城狮需要学什么技能了!

    2020年软件测试工程师需要具备的技能--需要学什么(灵魂拷问)

    https://blog.csdn.net/pengjiangchun/article/details/105292247

    四、2020年全网最全的自动化测试面试题和答案,原来干货都在这里

    1、你会封装自动化测试框架吗?

    这个问得最多,甚至有很多公司直接写在招聘要求中!

    当然可以,自动化框架主要的核心框架就是分层+PO模式:分别为:基础封装层BasePage,PO页面对象层,TestCase测试用例层。然后再加上日志处理模块,ini配置文件读取模块,unittest+ddt数据驱动模块,jenkins持续集成模式组成。

    2、如何把自动化测试在公司中实施并推广起来的?

    1.项目组调研选择自动化工具并开会演示demo案例,我们主要是演示selenium和robotframework两种。

    2.搭建自动化测试框架,在项目中逐步开展自动化。

    3.把该项目的自动化流程、框架固化成文档 

    4.推广到公司的其它项目组应用

    3、请描述一下自动化测试流程?

    1.编写自动化测试计划

    2.设计自动化测试用例

    3.编写自动化测试框架和脚本

    4.调试并维护脚本

    5.无人值守测试

    6.后期脚本维护(添加用例、开发更新版本)

    4、自动化测试用例如何编写?以下答案二选一即可:

    1.用例是自动化测试工程师自己设计的,一般刚开始已基本业务流程为主(登录--完成一个业务--退出)

    2.从系统测试用例中进行筛选或由业务工程师提供

    5、上一个项目中自动化测试的执行策略?

    上一个项目中是定时执行的,设置的执行时间是晚上12点,执行完毕后会自动发送邮件通知

    6、自动化测试发现BUG多吗?

    不多,因为之前项目组是把已经测试通过的基本功能再进行自动化脚本编写和在后续版本执行自动化测试,它主要是保证已经测试通过的功能在新版本更新后没有问题。

    7、你觉得自动化测试的价值在哪里?你们公司为什么要做自动化测试?

    引用自动化测试之后,能代替大量繁琐的回归测试工作,把业务测试人员解放出来,既而让业务测试人员把精力集中在复杂的业务功能模块上,自动化测试一般是对稳定下来的功能进行自动化,保证不会因为产品的更新导致之前稳定下来的功能出现BUG

    8、自动化测试有误报过bug吗?产生误报怎么办?

    有误报过,有时候自动化测试报告中显示发现了bug,实际去通过手工测试去确认又不存在该bug。

    误报原因一般是:

    1.元素定位不稳定,需要尽量提高脚本的稳定性;

    2.开发更新了页面但是测试没有及时更新维护!

    9、自动化测试过程中,你遇到了哪些问题,是如何解决的?

    1.频繁地变更页面,经常要修改页面对象类里面的代码

    2.自动化测试偶尔出现过误报

    3.自动化测试结果出现覆盖的情况:Jenkins根据时间建立文件夹

    4.自动化测试代码维护比较麻烦

    5.自动化测试进行数据库对比数据

    10、在上一家公司做自动化测试用的什么框架?

    可以说出以下自己擅长的一种:

    1.python+selenium+unittest+htmltestrunner

    2.python+selenium+pytest+allure

    3. robotframework+Selenium2Library

    11、你们自动化团队有自己的群吗?

    当然有:我们使用的群号是:695458161  有很多软件测试和自动化大神解决项目中的问题,还会不定时的发放免费资料。

    12、在selenium自动化测试中,你一般完成什么类型的测试?自动化覆盖率?

    主要是冒烟测试和回归测试。回归测试主要写一些功能稳定的场景,通过自动化手段去实现,节约测试时间。因为自动化测试用例也是在不断的更新和迭代,没有刻意去统计,大概在30%-40%左右!

    13、在执行脚本过程,如何实现当前元素高亮显示?

    这个其实就是利用javaScript去修改当前元素的边框样式来到达高亮显示的效果,

    14、如果一个元素无法定位,你一般会考虑哪些方面的原因?

    1.页面加载元素过慢,加等待时间

    2.页面有frame框架页,需要先跳转入frame框架再定位

    3.可能该元素是动态元素,定位方式要优化,可以使用部分元素定位或通过父节点或兄弟节点定位。

    4.可能识别了元素,但是不能操作,比如元素不可用,不可写等。需要使用js先把前置的操作完成,

    15、元素定位方法你熟悉的有哪些?

    id      name      classname       link_text      css      xpath

    16、遇到frame框架页面怎么处理?

    先用driver.switch_to.frame()跳转进去frame,

    然后再操作页面元素,

    操作完后使用driver.swith_to.default_content()跳转出来

    17、遇到alert弹出窗如何处理? 

    使用driver.switch_to.alert方法先跳转到alert弹出窗口

    然后再通过accept点击确定按钮,通过dismiss点击取消难,通过text()获得弹出窗口的文本。

    18、如何处理多窗口?

    这个多窗口之间跳转处理,我们在项目中也经常遇到。就是,当你点击一个链接,这个链接会在一个新的tab打开,然后你接下来要在新tab打开的页面查找元素,

    1.我们在点击链接前使用driver.current_window_handle获得当前窗口句柄。

    2.再点击链接。点击后通过driver.window_handles获得所有窗口的句柄,

    3.然后再循环找到新窗口的句柄,然后再通过driver.switch_to.window()方法跳转到新的窗口。

    19、怎么验证元素是enable/disabled/checked状态?

    定位元素后:分别通过isEnabled(),isSelected(),isDisplayed()三个方法进行判断。

    20、 如何处理下拉菜单?

    在Selenium中有一个叫Select的类,这个类支持对下拉菜单进行操作。使用方法如下:

    1.定位元素

    2.把定位的元素转化成Select对象。

    sel = Select(定位的元素对象)

    3.通过下标或者值或者文本选中下拉框。
    sel.select_by_index(index);
    sel.select_by_value(value);
    sel.select_by_visible_text(text);

    21、在日历这种web 表单你是如何处理的?

    首先要分析当前网页试用日历插件的前端代码,看看能不能通过元素定位,点击日期实现,如果不能,可能需要借助javascript。还有些日历控件一个文本输入框,可以直接sendKeys()方法来实现传入一个时间的数据。

    22、举例一下说明一下你遇到过那些异常

    常见的selenium异常有这些:

    NoSuchElementException:没有该元素异常
    TimeoutException : 超时异常

    ElementNotVisibleException :元素不可见异常
    NoSuchAttributeException :没有这样属性异常
    NoSuchFrameException :没有该frame异常

    23、关闭浏览器中quit和close的区别

    简单来说,两个都可以实现退出浏览器session功能,close是关闭你当前聚焦的tab页面,而quit是关闭全部浏览器tab页面,并退出浏览器session。知道这两个区别,我们就知道quit一般用在结束测试之前的操作,close用在执行用例过程中关闭某一个页面的操作。

    24、在Selenium中如何实现截图,如何实现用例执行失败才截图

    在Selenium中提供了一个get_screenshot_as_file()的方法来截图的,一般结合try/except捕获异常时使用,进行错误截图。

    25、如何实现文件上传?

    定位元素后,直接使用send_keys()方法设置就行,参数为需要上传的文件的路径。

    26、自动化中有哪三类等待?他们有什么特点?

    1.线程等待(强制等待)如time.sleep(2):线程强制休眠2秒钟,2秒过后,再执行后续的代码。建议少用。

    2.imlicitlyWait(隐式等待)会在指定的时间范围内不断的查找元素,直到找到元素或超时,特点是必须等待整个页面加载完成。

    3.WebDriverWait(显式等待)通常是我们自定义的一个函数代码,这段代码用来等待某个元素加载完成,再继续执行后续的代码

    27、你写的测试脚本能在不同浏览器上运行吗

    当然可以,我写的用例可以在在IE,火狐和谷歌这三种浏览器上运行。实现的思路是封装一个方法,分别传入一个浏览器的字符串,如果传入IE就使用IE,如果传入FireFox就使用FireFox,如果传入Chrome就使用Chrome浏览器,并且使用什么浏览器可以在总的ini配置文件中进行配置。需要注意的是每个浏览器使用的驱动不一样。

    28、什么是PO模式,为什么要使用它

    PO是Page Object 模式的简称,它是一种设计思想,意思是,把一个页面,当做一个对象,页面的元素和元素之间操作方法就是页面对象的属性和行为,PO模式一般使用三层架构,分别为:基础封装层BasePage,PO页面对象层,TestCase测试用例层。

    29、你们测试团队如何提升自己的测试技能?

    我们有自己的软件测试技术群:695458161:如果有任何软件测试方面的疑问,关于软件测试、接口测试、自动化测试、性能测试、面试经验等都可以在群里解决,群里有同行大神一起交流技术。共同进步,一起成长!

    如果大佬们觉得有哪些写得不对,欢迎留言或私信,谢谢!

    五、预祝面试成功,给您的OFFER,请收下!

    最后预祝每一位求职者都能找到自己如意的工作!马上实现升职加薪!

    作者:诸葛
    出处:https://blog.csdn.net/pengjiangchun
    原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。

    展开全文
  • 说明:该篇博客是博主一字一码编写的,实属不易,请...自动化测试框架是由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合。 在上一篇博客中使用Selenium框架操作浏览器...

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!
    接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/103892214

    一、什么是测试框架

    • 自动化测试框架是由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合。

    • 在上一篇博客中使用Selenium框架操作浏览器编写脚本完成了webtours案例的自动化订票,但是编写的代码,不能进行复用,换句话说如果将上一篇的代码用于其他网站则需要全部重新编写,复用性极低

    二、搭建 TestNG 框架环境

    1.什么是 TestNG

    • 是一个开源自动化测试框架,TestNG 表示下一代。
    • 用于设置测试前的准备代码,测试代码,测试完毕后的处理代码。
    • 在前面的Java白盒测试用的是JUnit框架

    2.安装 testng-6.14.zip

    • 离线安装
      ✔     (先断网)帮助→安装新软件→添加,位置选择 achive,选择 zip 文件即可。

    • 网络安装
      ✔     帮 助 → 安 装 新 软 件 → 联 网 安 装 testing , Work with 下 输 入 :http://beust.com/eclipse→添加→勾选 TestNG

    • 这里博主采用离线安装,帮助——安装新软件
      在这里插入图片描述

    • 选择testng安装包
      在这里插入图片描述

    • 选择全部安装
      在这里插入图片描述

    • 接受协议,完成安装
      在这里插入图片描述

    三、使用 TestNG 中注解进行测试

    1.什么是注解

    • 表示“在某些阶段必然被调用的代码”;
    • 下面的注解一般用于修饰测试方法,测试方法名随意。

    2.常用注解

    2.1 @BeforeClass 注解

    • 在调用当前类的第一个测试方法之前运行。

    2.2 @AfterClass 注解

    • 在调用当前类的最后一个测试方法之后运行。

    2.3 @BeforeMethod 注解

    • 在每个测试方法之前运行。

    2.4 @AfterMethod 注解

    • 在每个测试方法之后运行。

    2.5 @Test(属性 1=值 1,属性 2=值 2,…)注解

    • 用于修饰测试方法,表示要对被测试类的某个或某些方法进行测试。

    • 属性
      ✔     description=“测试描述”
      ✔     priority=优先级(从 0 开始)
      ✔     enabled=false(false 表示忽略测试)
      ✔     timeOut=?ms(限时测试,一旦测试的内容运行超过了该时间长度,那么将会终止,同时标记为 failed)
      ✔     dataProvider=“Dataprovider 的名称或方法名”
      ✔     dataProviderClass=产生测试数据的类

    2.6 @DataProvider(name=“参数集名”)注解

    • 用于修饰获得参数的方法。
      ✔     此方法用于生成测试数据。
      ✔     @Listeners({TestReport.class}) //监听测试报告类

    2.7 使用注解对webtours案例代码进行拆分

    • 对webtours案例中创建驱动对象代码进行拆分,使用@BeforeClass注释提取代码中打开浏览器操作,因为该操作只进行一次并且是一开始就进行的
      在这里插入图片描述
    • 使用@AfterClass注解来关闭浏览器
      在这里插入图片描述
    • 将打开网站操作使用@Test注解封装成一个方法,将之前打开网站的代码剪切进来,博主这里对打开网站检查点结果进行了if判断
      在这里插入图片描述
    • 在每个方法执行完成后,为了防止程序运行太快,检查点无法通过,所以通过@AfterMethod注释在每个测试方法执行完后执行的方法中添加等待时长
      在这里插入图片描述
    • 拆分出登录代码,封装到@Test注解的方法中
      在这里插入图片描述
    • 拆分出订票的代码,封装到findFlights方法中,在代码中的等待时长跟@AfterMethod注解方法中的不一样,注解中的是没执行一个@Test注解的测试方法则会调用@AfterMethod注解的waitTime方法等待3秒,而代码中的等待3秒只限于三次订票中的等待
      在这里插入图片描述
      在这里插入图片描述
    • 剩下的为注销模块
      在这里插入图片描述
    • 完整代码如下
    package test;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.support.ui.Select;
    import org.testng.annotations.AfterClass;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.Test;
    
    public class TNGTest {
    	WebDriver driver;
    	
    	@BeforeClass
    	public void startChorme(){
    		// 打开谷歌浏览器
    		System.setProperty("webdriver.chrome.driver", "C:/Users/Administrator/Desktop/bro_tool/chromedriver.exe");
    		WebDriver driver=new ChromeDriver();
    	}
    	
    	@AfterClass
    	public void endChorme(){
    		// 关闭浏览器
    		driver.quit();
    	}
    	
    	@AfterMethod
    	public void waitTime() throws Exception{
    		// 等待时间
    		Thread.sleep(3000);
    	}
    	
    	@Test(description="打开网站")
    	public void openUrl(){
    		String url="http://localhost:1080/webtours/";
    		driver.get(url);
    		// 检查打开网站
    		driver.switchTo().frame("body");
    		driver.switchTo().frame("info");
    		boolean openResult = driver.findElement(By.tagName("body")).getText().contains("Welcome");
    		if(openResult)
    		System.out.println("检查打开网站成功");
    		else {
    			System.out.println("检查打开网站失败");
    		}
    	}
    	
    	@Test(description="登录")
    	public void userLogin(){
    		/* 切换到用户名密码所在的frame框架*/
    		driver.switchTo().defaultContent();
    		driver.switchTo().frame("body");
    		driver.switchTo().frame("navbar");
    		// 输入用户名密码
    		driver.findElement(By.name("username")).sendKeys("cdtaogang");
    		driver.findElement(By.name("password")).sendKeys("1");
    		// 点击登录
    		driver.findElement(By.name("login")).click();
    		// 检查登录
    		driver.switchTo().defaultContent();
    		driver.switchTo().frame("body");
    		driver.switchTo().frame("info");
    		boolean loginResult = driver.findElement(By.tagName("body")).getText().contains("Welcome, cdtaogang");
    		if(loginResult)
    			System.out.println("检查登录成功");
    			else {
    				System.out.println("检查登录失败");
    			}
    	}
    	
    	@Test(description="订票")
    	public void findFlight() throws Exception{
    		// 点击flights
    		driver.switchTo().defaultContent();
    		driver.switchTo().frame("body");
    		driver.switchTo().frame("navbar");
    		driver.findElement(By.xpath("//img[@alt='Search Flights Button']")).click();
    		// 检查航班
    		driver.switchTo().defaultContent();
    		driver.switchTo().frame("body");
    		driver.switchTo().frame("info");
    		boolean flightResult = driver.findElement(By.tagName("body")).getText().contains("Departure City");
    		if(flightResult)
    			System.out.println("检查航班成功");
    			else {
    				System.out.println("检查航班失败");
    			}
    		/*参数化*/
    		// 创建文件对象
    		File file=new File("C:/Users/Administrator/Desktop/flights.txt");
    		// 创建读取对象
    		FileReader bytes=new FileReader(file);
    		// 将byte字节数据转换成字符
    		BufferedReader chars=new BufferedReader(bytes);
    		// 遍历读取每一行数据
    		String row=null;
    		while((row=chars.readLine())!=null){
    			String cols[]=row.split("\t");
    			// 查找航班
    			driver.switchTo().defaultContent();
    			driver.switchTo().frame("body");
    			driver.switchTo().frame("info");		
    			new Select(driver.findElement(By.name("depart"))).selectByVisibleText(cols[0]);
    			new Select(driver.findElement(By.name("arrive"))).selectByVisibleText(cols[1]);
    			driver.findElement(By.name("findFlights")).click();
    			// 选择航班
    			driver.switchTo().defaultContent();
    			driver.switchTo().frame("body");
    			driver.switchTo().frame("info");
    			driver.findElements(By.name("outboundFlight")).get(2).click();
    			String flightNumber = driver.findElements(By.name("outboundFlight")).get(2).getAttribute("value").substring(0, 3);
    //					System.out.println(flightNumber);
    			driver.findElement(By.name("reserveFlights")).click();
    			// 付款明细
    			driver.findElement(By.name("buyFlights")).click();
    			// 检查发票
    			driver.switchTo().defaultContent();
    			driver.switchTo().frame("body");
    			driver.switchTo().frame("info");
    			Thread.sleep(3000);
    			boolean invoiceResult = driver.findElement(By.tagName("body")).getText().contains("Flight "+flightNumber+" leaves "+cols[0]+" for "+cols[1]+".");
    			if(invoiceResult)
    				System.out.println("检查发票成功");
    				else {
    					System.out.println("检查发票失败");
    				}
    			// 再订一张
    			driver.switchTo().defaultContent();
    			driver.switchTo().frame("body");
    			driver.switchTo().frame("info");
    			driver.findElement(By.name("Book Another")).click();
    			// 检查再订一张
    			driver.switchTo().defaultContent();
    			driver.switchTo().frame("body");
    			driver.switchTo().frame("info");
    			Thread.sleep(3000);
    			boolean bookResult = driver.findElement(By.tagName("body")).getText().contains("Departure City");
    			if(bookResult)
    				System.out.println("检查再订一张成功");
    				else {
    					System.out.println("检查再订一张失败");
    				}
    		}
    		// 关闭文件字节流
    		bytes.close();
    	}
    	
    	@Test(description="注销")
    	public void userLogout() throws Exception{
    		// 注销
    		driver.switchTo().defaultContent();
    		driver.switchTo().frame("body");
    		driver.switchTo().frame("navbar");
    		driver.findElement(By.xpath("//img[@alt='SignOff Button']")).click();
    		// 检查注销
    		driver.switchTo().defaultContent();
    		driver.switchTo().frame("body");
    		driver.switchTo().frame("info");
    		Thread.sleep(3000);
    		boolean logoutResult = driver.findElement(By.tagName("body")).getText().contains("Welcome to the Web Tours site.");
    		if(logoutResult)
    			System.out.println("检查注销成功");
    			else {
    				System.out.println("检查注销失败");
    			}
    		Thread.sleep(5000);
    		
    	}
    //	public static void main(String[] args) throws Exception {
    //	
    //	}
    
    }
    
    • 拆分出打开网站、登录、订票、注销这四个测试方法后,从上往下顺一下代码,发现在订票模块中点击flights订票的操作单独提出来,而不是和查找航班一起,以免执行代码出错
      在这里插入图片描述
    • 运行脚本,结果只是打开浏览器,之后所有的测试方法全部执行失败,原因是因为并没有按照先打开网站、登录、点击订票、订票、注销我们设定的执行顺序执行
      在这里插入图片描述
    • 查看日志,得知打开浏览器后第一次执行的测试方法为点击订票
      在这里插入图片描述
    • 解决方法很简单,则是为对@Test注解中添加priority属性,从0开始依次类推来控制测试方法执行顺序
      在这里插入图片描述
    • 运行脚本,发现除了打开网站其他测试方法全部失败,提示失败的配置
      在这里插入图片描述
    • 这个问题让博主整了很久,终于发现是博主代码上的一个小问题,那就是创建了两次浏览器对象driver
      在这里插入图片描述
    • 去掉startChorme方法中的声明即可
      在这里插入图片描述
    • 重新运行代码,5个测试方法全部测试成功包括检查点
      在这里插入图片描述

    3.断言

    • 用来断定程序中是否存在缺陷。

    3.1 Assert.assertTrue(boolean 型结果)

    • 写法类似于正则表达式,使用更方便。
      ✔     Boolean rs=driver.findElement(By.tagName(“body”)).getText().contains(“Welcome to the Web Tours site”);
      ✔     Assert.assertTrue(rs);

    3.2 Assert.assertEquals(实际结果,预期结果)

    • 用于测试期望结果的断言,即测试两个对象是否相等。
      ✔     String actual=driver.getTitle();
      ✔     String expected=“Web Tours”;
      ✔     Assert.assertEquals(actual, expected);

    3.3 使用断言替换掉webtours中的检查点代码

    • 在每个测试方法中去掉前面编写的if判断检查点,逐个添加断言
      在这里插入图片描述
    • 运行代码,全部通过,说明断言正确
      在这里插入图片描述

    4.参数化

    4.1 @DataProvider(name=“测试数据集名”)注解

    • name 项可省略,括号无所谓

    4.2 创建获取参数的方法

    在这里插入图片描述

    4.3 使用 dataProvider 访问参数

    • 通过以上创建获取指定参数的方法,在订票测试方法中通过dataProvider参数的值为以上方法名,来向findFlight测试方法提供参数,完成订票起点和终点以及检查点的参数化
      在这里插入图片描述
    • 运行代码,参数配置成,用例全部通过
      在这里插入图片描述

    4.4 不使用列表获取文件中的参数

    • 首先在demo类中测试读取文件中数据的行数
      在这里插入图片描述
    • 读取文件的内容
      在这里插入图片描述
    • 回到TNGTest代码中,删除for查看打印出来的每一个数据,直接返回data即可
      在这里插入图片描述
    • 运行代码,查看测试结果全部通过,并且通过读取文件数据进行参数化正确
      在这里插入图片描述
    • 为@DataProvider注解添加别名,那么则可以在@Test注解方法中的dataProvider属性值为此别名
      在这里插入图片描述
      在这里插入图片描述
    • 温馨提示:如果对注解不清楚,可以将鼠标放在注解上则可以看到此方法(注解其实就是方法)介绍
      在这里插入图片描述
    • 测试运行代码,没有任何问题
      在这里插入图片描述

    4.5 分离获得参数的类

    • 首先新建一个Param类,将上一步定义的getParam方法剪切到这个类中
      在这里插入图片描述
    • 紧接着需要在findFlight方法Test注解中添加dataProviderClass属性的值为上面创建的Param类即可
      在这里插入图片描述
    • 运行代码,全部通过,分离获得参数的类成功
      在这里插入图片描述

    4.6 使用列表获取文件中的参数

    4.61 数组与列表的区别

    • 在Demo类中,进行测试说明
      在这里插入图片描述
    • 把一维数组添加到二维数组中
      在这里插入图片描述
    • 把一维数组添加到列表中
      在这里插入图片描述

    4.6.2 在代码中使用列表获取文件中参数并返回

    • 在Param类中直接修改,将读取的数据存到列表中并返回
      在这里插入图片描述
    • 运行代码,没有任何问题,测试全部通过
      在这里插入图片描述
    展开全文
  • Android测试之Robotium自动化测试框架

    万次阅读 2017-06-14 00:17:07
    Robotium是一款国外的自动化测试框架,是一款免费的Android UI测试工具,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的API,能够对各种控件进行...
  • 一小时了解自动化测试

    千次阅读 2021-01-25 21:54:32
    写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够明白自动化测试并很好落地实施的团队还不是非常多,我们接来下用通俗的方式来介绍自动化测试…… 本文共有...
  • 几款Android 应用自动化测试工具

    万次阅读 多人点赞 2018-01-09 10:20:47
    本文介绍几款流行的 Android应用自动化测试工具。 Monkey测试:随机测试,压力测试,运行在模拟器或实际设备中。 MonkeyRunner测试:操作简单,可录制测试脚本,可视化操作,主要生成坐标的自动化操作,移植性不...
  • 自动化测试到底是什么

    千次阅读 2017-09-19 23:13:38
    偶然在群里有人问自动化测试到底是啥,搞不懂。qtp对象库好麻烦,jmeter怎么做测试。。。。一堆一堆的问题。其实说实话真心不知道该咋解答了,我的内心是累的~ 突然想到自己的新书里不就解释过这些吗!看来还是很...
  • 1、本文目的是介绍MThings的能力,而不是研究如何搭建自动化测试平台,所以在自动化测试方面存在诸多个人理解,并不系统、准确、完整。 2、本文面向嵌入式通信设备测试场景,而非单纯软件,主要解释在通信接口测试...
  • 自动化测试中,维护测试数据 是一项很重要的工作,为了达到用例和测试数据的分离,我们一般会把数据存储在外部文件 或 数据库,为了简化测试,测试用例编写人员想只需要维护测试数据文件,在用例里通过简单声明,...
  • 二、什么是自动化测试框架 三、非PO模式和PO模式优缺点对比 四、如何从0到1搭建PO模型 五、自动化测试框架和PO的关系 六、总结 一、什么是PO模式 全称:page object model 简称:POM/PO PO模式最核心的思想是...
  • 二、自动化进阶书籍推荐 三、总结 一、前言 有人喜欢创造世界,他们做了开发者;有的人喜欢开发者,他们做了测试员。什么是软件测试?软件测试就是一场本该在用户面前发生的灾难提前在自己面前发生了,这会让他们...
  • 自动化测试工具QTP的使用实例

    万次阅读 2015-06-17 00:23:04
    QTP功能与特点QTP是QuickTest Professional的简称,是一种自动化软件测试工具。在软件的测试过程中,QTP主要来用来通过已有的测试脚本执行重复的手动测试,用于功能测试和回归测试。使用QTP要求测试人员在测试前考虑...
  • Web自动化测试Selenium 学习笔记(一)

    万次阅读 多人点赞 2018-05-14 20:34:47
    1、Web自动化测试简介自动化基础:自动化用例编写、Selenium优势及原理、自动化环境搭建Selenium基础:常见8大元素定位(表格)、常见元素处理、下拉框元素处理、不同窗口切换、元素进阶、元素等待需求到框架 需求...
  • 魅族自动化测试架构之路

    千次阅读 2016-10-10 13:36:54
    声明:本文内容来自于魅族技术开放日第五期:构建适合你的自动化测试体系,如需转载请联系主办方魅族&msup进行授权。 嘉宾:王照辉,魅族测试部技术开发组组长,高级JAVA开发工程师,2014年加入魅族,负责...
  • python+selenium自动化测试-1概述

    千次阅读 2019-09-09 14:23:27
    用selenium自动化测试差不多两年了,有很多心得体会。在回归测试方面,selenium有很大的优势,一定程度上代替了手工测试,让我有更多时间关注项目业务和其他测试技术。 学自动化技术至少要掌握以下几个步骤:获取...
  • 解放双手——Android自动化测试

    万次阅读 多人点赞 2015-05-11 16:42:06
    人类的进步,离不开这些喜欢偷懒的人,现在,程序猿将偷懒上升到了一个新的高度——利用程序来进行自动化软件测试,将测试工程师从繁琐的测试用例中解脱出来,从此可以一边喝着咖啡,一边看着程序自动测试,不必看着...
  • iOS自动化测试的那些干货

    万次阅读 多人点赞 2017-03-09 12:08:37
    前言 如果有测试大佬发现内容不对,欢迎指正,我会...目前,大多数App还停留在人工测试阶段,人工测试投入的成本最低,能够保证核心功能的使用,而且测试人员不需要会写代码。但是,在很多测试场景下,人工测试的效率
  • Android自动化测试(AndroidUnitTest)

    千次阅读 2016-11-24 22:25:38
    广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner、...一般来说,自动化测试分为三个层级:单元测试、接口测试和UI测试,这三层成...
  • by Ruiming.Lv 1 自动化测试 ...从狭义上来讲,自动化测试就是通过工具记录或编写脚本的方式模拟手工测试的过程,通过回放或运行脚本来执行测试用例,从而代替人工对系统的功能进行验证。 1.
  • 六款Android 应用的自动化测试工具

    万次阅读 2017-06-02 14:43:31
    如今自动化测试已经应用到每天的测试中。这不足为奇,因为自动化测试在测试过程中节约了时间,还能避免包括人为因素造成的测试错误和遗漏。   自动化测试工具选择很多。一些是开源的,一些非常贵。一些自动化工具...
  • 自动化测试框架[Cypress接口测试]

    千次阅读 2021-01-13 16:17:44
    【附源码】说到自动化自然离不开的一个方向是接口自动化,Cypress同样对接口支撑的非常的好
  • Selenium自动化测试框架入门整理

    千次阅读 2018-12-18 10:47:48
    本文主要针对Selenium自动化测试框架入门整理,只涉及总体功能及框架要点介绍说明,以及使用前提技术基础要求整理说明。作为开发人员、测试人员入门参考。 本文参考:Selenium框架最新技术规范及相关资料   简介...
  • 如今自动化测试已经应用到每天的测试中。这不足为奇,因为自动化测试在测试过程中节约了时间,还能避免包括人为因素造成的测试错误和遗漏。自动化测试工具选择很多。一些是开源的,一些非常贵。一些自动化工具是几年...
  • 移动端自动化测试实战(一)

    万次阅读 2019-09-20 09:39:22
    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶移动端测试知识概览 ...三丶第二阶段移动端自动化工具简介以及安装 1.主流的移动端自动化工具 2.Appium环...
  • 如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入Python自动化测试技术群:953306497群里的免费资料都是笔者十多年测试生涯的精华。...
  • 数据驱动 相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为进行了完全的分离,这样的测试脚本设计模式叫做数据驱动。 实行数据驱动测试的步骤如下: (1)、编写测试脚本,脚本需要支持程序对象、...
  • 带有机器人框架的.NET自动化测试

    千次阅读 2014-10-16 10:41:08
    Clayton Neal在软件测试和质量保证方面有超过13年的经验,其中有八年的Windows, web,和移动应用程序...Clayton对自动化测试超迷恋,还见识了如何亲自成功实施测试自动化。 ?  测试自动化的好处我们都很清
  • RF自动化测试系列-第三篇 测试数据

    千次阅读 2018-11-17 18:01:23
    版权声明:博主原创,转载请注明原作者及出处。 Robot的测试数据可以分为三层结构:测试工程Project(或叫主目录),测试集合Test Suite,测试用例Test Case。除了这三层基本机构外, 还有用户关键字,变量文件,...
  • Go的自动化测试

    千次阅读 2018-09-22 14:28:54
    自动化测试,是在预设条件下运行系统或应用程序,评估运行结果,预先条件包括正常条件和异常条件。Go本身提供了一套轻量级的测试框架,相对低级,但不过还是有效的。它依赖一个go test测试命令,和一组按照约定方式...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 270,117
精华内容 108,046
关键字:

自动化测试的声明