软件测试

祝衍军

目录

  • 1 软件测试概述
    • 1.1 软件测试概述
    • 1.2 软件缺陷(BUG)
    • 1.3 软件测试职业发展
    • 1.4 软件测试分类
    • 1.5 软件测试流程
    • 1.6 课程思政:秘书也疯狂的故事
  • 2 黑盒测试
    • 2.1 黑盒测试概述
    • 2.2 等价类划分法
    • 2.3 边界值分析法
    • 2.4 决策表法
    • 2.5 正交实验设计法
    • 2.6 场景测试法
    • 2.7 错误推测法
    • 2.8 功能需求分析
    • 2.9 测试用例设计
    • 2.10 课程思政:五笔输入法的故事
  • 3 测试执行
    • 3.1 测试计划
    • 3.2 测试执行BUG记录
  • 4 白盒测试
    • 4.1 白盒测试概述
    • 4.2 程序流程图设计
    • 4.3 白盒测试用例设计
    • 4.4 JUnit单元测试
    • 4.5 课程思政:WPS的故事
  • 5 Web应用软件自动化测试
    • 5.1 Python自动化测试基本框架
    • 5.2 登录页面测试脚本设计
    • 5.3 新增文章页面测试脚本设计
    • 5.4 基于Unitest的登录测试用例集脚本设计
    • 5.5 课程思政:大并发案例阿里云的小故事
  • 6 智能终端APP自动化测试
    • 6.1 企业案例
    • 6.2 Android智能终端设备连接
    • 6.3 Android APP应用自动化测试
    • 6.4 Monkey 压力测试
    • 6.5 课程思政:鸿蒙的故事
  • 7 JMeter性能测试
    • 7.1 性能测试需求分析
    • 7.2 文章新增脚本开发
    • 7.3 文章新增脚本完善
    • 7.4 场景设计与运行结果分析
    • 7.5 课程思政:12306网站的技术进步故事
  • 8 Postman接口测试
    • 8.1 Postman
    • 8.2 企业网站管理内容系统接口测试
  • 9 Loadrunner性能测试(1+x考证高级相关知识点)
    • 9.1 录制回放
    • 9.2 思考时间设置
    • 9.3 检查点设置
    • 9.4 参数化设置
    • 9.5 关联设置
    • 9.6 集合点设置
    • 9.7 场景设计与运行分析
  • 10 省技能大赛
    • 10.1 竞赛系统
    • 10.2 相关知识
  • 11 企业案例
    • 11.1 软件测试公司真实案例
Android APP应用自动化测试

【任务描述】:经过任务一的学习,电脑已经可以连接上Android智能终端设备,但是如何通过编程的方式来控制Android设备实现自动化测试呢 

【任务目标】:通过使用Appium工具,掌握使用Python语言操作App应用的自动化测试方法 

【任务储备】:

1、Appium

Appium是一个开源、跨平台的自动化测试框架,使用WebDriver协议驱动Android设备、iOS设备和Windows APP应用程序,允许测试人员在不同的平台(AndroidiOS等)使用同一套API来编写自动化测试脚本。在使用Appium执行自动化测试时,在Appium客户端编写测试脚本并执行该脚本,脚本后请求到Appium服务端,Appium服务端对脚本进行解析,驱动iOS设备或者Android设备执行脚本,完成自动化测试,其工作原理如下图所示。

 

1

(1) Appium客户端的测试脚本可以使用多种语言来编写自动化脚本,如PythonJavaJavaScriptObjectiveCPHP等。

(2) Appium服务端接收客户端的请求,解析请求内容,调用对应的框架响应操作,其端口默认为4723

(3) Appium服务端将请求转发给监听手机端口4724的中间件Bootstrap,并接收Appium的命令,调用UI Automator的命令执行对应的操作。

(4) Bootstrap将执行结果返回给Appium服务端。

(5)    Appium服务端再将结果返回给Appium客户端。

2、Appium 服务器初始化参数(Capability

Appium 服务器初始化参数(Capability是一些发送给 Appium 服务器的键值对集合,告诉服务器我们想要启动什么类型的自动化会话,具体参数如下表所示。

1  Appium 服务器初始化参数列表

描述

platformName

使用的设备(模拟器)操作系统

iOS, Android, 或者 FirefoxOS

platformVersion

设备(模拟器)操作系统的版本

如:7.1, 4.4

deviceName

使用的设备(模拟器)类型

iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4, 等等,如果设备为iOS操作系统,可以使用Instruments instruments -s devices 命令可返回一个有效的设备的列表,如果设备为Andorid操作系统,可以使用adb devices 命令可返回一个有效的设备的列表。为确保在连接多个设备时连接到正确的 Android设备,请使用udid功能。

app

本地绝对路径__远程 http URL 所指向的一个安装包(.ipa,.apk,.zip 文件)。Appium 将其安装到合适的设备上。请注意,如果指定了 appPackage appActivity 参数,Android 则不需要此参数了。该参数也与 browserName 不兼容。

/abs/path/to/my.apk http://myapp.com/app.ipa

browserName

做自动化测试时使用的浏览器名字。

'Safari' 对应 iOS'Chrome', 'Chromium', 'Browser' 则对应 Android

newCommandTimeout

用于客户端在退出或者结束 session 之前,Appium 等待客户端发送一条新命令所花费的时间(秒为单位)

如:60

udid

连接真机的唯一设备号。 对于Android,这是adb devices命令列出的设备名称

例如 1ae203187fc012g, emulator-5554

appPackage

运行的 Android应用的包名Android设备独有属性 )

com.android.settingscom.android.calculator2

appActivity

Activity的名字是指从appPackage包中所要启动的Android acticityAndroid设备独有属性 )

MainActivity、 .Settings.Calculator

appName

被测应用的名字,用于支持 iOS 9 以上系统的应用的自动化iOS 设备独有属性 )

UICatalog


使用Python设置Appium 服务器初始化参数,运行打开需要的APP,完整操作视频如下:

3、UI Automator

UI AutomatorAndroid 4.3版本以上官方推出的安卓应用界面自动化测试框架,能够根据文本、控件id、坐标进行点击、长按、滑动、查找等操作,实现与人一致的手动操作逻辑,既可以做UI测试也可以做功能测试。

(1)Uiautomatorviewer

Uiautomatorviewer位于Android sdk/tools目录下,为一款布局查看器工具,可以扫描、分析Android设备上当前显示的UI组件属性信息,使用这些信息可以使测试更加精确。

点击按钮,则可以获取真机或者模拟器当前应用程序界面的元素属性,点击左侧的界面元素(第1部分),则右侧则显示对应界面元素的界面结构(第2部分)和界面元素属性(第3部分),第3部分界面元素属性的具体含义如表2所示

2 Uiautomatorviewer获取的界面元素属性含义列表

属性

含义

index

父目录下的第几个元素,以0开头

text

显示在界面上的内容

resource_id

该元素的id(如果开发不规范,此id有可能会不存在或多个相同)

class

元素的类型

package

apk的包名

content-desc

描述信息

checkable

元素特征:是否可选择

checked

元素特征:当前是否已选中

clickable

元素特征:是否可点击

enabled

元素特征:元素是否可用

focusable

元素特征:元素是否可以获取焦点

focused

元素特征:元素是否获取焦点

scrollable

元素特征:元素是否可以滚动

long-clickable

元素特征:元素是否可以长按

password

元素特征:元素是否密码框

selected

元素特征:元素是否已选中

bounds边界

元素左上角和右下角的坐标(从屏幕最左侧和最上侧开始计算)

 (1)UI APIs

通过UI Automator API可以编写可靠的测试,无需了解目标应用的实现细节,常用的多个应用间捕获和操纵界面API组件有:

1UICollection:枚举容器的界面元素,目的是为了计数,或者按可见文本或内容说明属性来定位子元素。

2UIObject:表示设备上可见的界面元素。

3UIScrollable:支持搜索可滚动界面容器中的项目。

4UISelector:表示对设备上的一个或多个目标界面元素的查询。

5Configurator:可让您设置用于运行 UI Automator 测试的关键参数。

(2)UI APIs

通过UI Automator API可以编写可靠的测试,无需了解目标应用的实现细节,常用的多个应用间捕获和操纵界面API组件有:

1UICollection:枚举容器的界面元素,目的是为了计数,或者按可见文本或内容说明属性来定位子元素。

2UIObject:表示设备上可见的界面元素。

3UIScrollable:支持搜索可滚动界面容器中的项目。

4UISelector:表示对设备上的一个或多个目标界面元素的查询。

5Configurator:可让您设置用于运行 UI Automator 测试的关键参数。

4、界面元素操作

Web系统自动化测试一样,APP自动化测试也需要对APP上的界面进行定位和操作,常见的界面元素操作如下所示。

(1)元素定位方法

可以通过ID定位(取resource-id的值)、className定位(取class的内容,不唯一)、xpath定位等方式定位,如点击模拟器自带的计算器上面的“7”按钮参考代码如下所示:

driver.find_element_by_id("com.android.calculator2:id/digit_7").click() #ID定位

driver.find_elements_by_class_name("android.widget.Button")[0].click() #className定位

driver.find_element_by_xpath("//android.support.v4.view.ViewPager/android.widget.LinearLayout/android.view.View[1]/android.widget.Button[1]").click() #xpath定位

(2)滑动

在的自动化测试过程中不可能只测试一个固定的有限界面,有的时候会遇到一些比较长的页面,这个时候就会用到滑动的操作,在appium中模拟用户滑动的操作需要使用Swipe方法,Swipe的使用格式如下所示:

driver.swipe(x1,y1,x2,y2,duration)

从坐标(x1,x2)滑动到坐标(x2,y2)duration非必填项,滑动时间(滑动时中间要加等待时间,不加等待时间容易出错,而且加等待时间的长短要掌握好,一般在200-1000毫秒之间应该差不多,自己调试几次感觉一下哪个时间比较稳,每个程序可能会有所差异)。注意:滑动的坐标不能超过屏幕的宽高。

(3)TouchAction

ActionChainsPC端测试程序鼠标模拟的一系列操作类似,TouchAction可以模拟智能设备端的一系列手势操作,如滑动、长按、拖动等。其原理也和ActionChains类似,将一系列的动作放在一个链条中,然后将该链条传递给服务器,服务器接受到该链条后,解析各个动作,逐个执行,其常用的操作方法如下表所示。

3 TouchAction常见方法列表

方法

描述

press(self,el=None,x=None,y=None)

按压一个元素或坐标,el为要点击的元素,x/y为坐标

long_press(self,el=None,x=None,y=None,duration=1000)

长按压一个元素或坐标,默认长按时间1000ms

tap(self,element=None,x=None,y=None,count=1)

对一个元素或控件执行点击操作

move_to(self,el=None,x=None,y=None)

将指针从上一个点移动到指定的元素或点

wait(self,ms=0)

等待时间,单位毫秒

release(self)

释放,结束屏幕上的一系列动作的命令操作

perform(self)

执行,将待执行的操作发送到服务器的命令操作

设置后的手势如下图所示。


完整操作视频如下:

(4)获取元素属性值

在自动化测试过程有个时候需要获取界面元素的各种属性值用于判断是否操作成功。如果对应元素有text属性,则可以直接使用text获取对应元素的值,也可以使用get_attribute方法获取。

5APP应用操作

appium支持对智能设备上的app进行管理和操作,其常用方法如下表所示。

7-2-4 Appium 操作APP常见方法列表

方法

描述

install_app(self,app_path,**options)

安装app,app_path为安装包路径

remove_app(self,app_id,**options)

卸载appapp_idapp包名

is_app_installed(self,bundle_id)

检查app是否有安装bundle_idapp包名

launch_app(self)

启动app,启动desiredcapabilities配置的APP

close_app(self)

关闭app,关闭desiredcapabilities配置的APP

background_app(self,seconds)

后台运行appseconds为运行时长

activate_app(self,app_id)

切换app,app_idapp包名

current_activity

获取当前活跃的activity

start_activity(self,app_package,app_activity,**opts)

在当前应用中打开一个Activity,或者启动一个新应用并打开一个Activityapp_package为要启动Activity的包名,app_activity要启动的Activity

reset(self)

重置应用,删除应用相关数据操作

【任务实施】

使用unittest框架测试模拟器自带的计算器功能,计算“2+(73)×8”表达式:

1、打开计算器;

2、在输入框里面输入2

3、点击+”按钮;

4、向左滑动,可以看到隐藏的科学计算按钮;

5、点击“(”按钮;

6、向右滑动,将科学计算按钮面板隐藏;

7、点击7”按钮;

8、点击-”按钮;

9、点击3”按钮;

10、向左滑动,可以看到隐藏的科学计算按钮

11、点击)”按钮;

12、向右滑动,将科学计算按钮面板隐藏

13、点击*”按钮;

14、点击8”按钮;

15、点击=”按钮;

16、获取输入框里面的值,使用断言判断表达式计算结果是否正确

完整操作视频如下: