当前位置:首页 > 技术知识 > 正文内容

软件测试进阶之自动化测试——python+appium实例

maynowei6个月前 (08-26)技术知识68

扼要:

1、了解python+appium进行APP的自动化测试实例;

2、能根据实例进行实训操作;


本课程主要讲述用python+appium对APP进行UI自动化测试的例子。appium支持Android、ios。本课程以Android为例。

学习本章节前提条件,测试人员需要有一定的python基础。

python+appium环境搭建

1、安装python,下载地址:https://www.python.org/downloads/

2、安装Appium-Python-Client库,命令:pip install Appium-Python-Client

3、安装jdk,下载地址:https://www.oracle.com/java/technologies/javase-downloads.html

4、安装Android sdk,下载地址:https://www.androiddevtools.cn/

5、安装appium,下载地址:https://appium.io/

python+appium实例操作说明

1、启动appium服务;

2、连接Android手机或者安装安卓手机模拟器并启动,也启动需要测试的APP;

3、使用adb devices命令,查看手机的驱动名称;

4、使用aapt dump badging ***.apk 命令,进行获取APP包名、activity名;

5、在Android的tools文件夹下运行uiautomatorviewer.bat,该工具可以进行APP的元素定位,同时也可以获取包名。

6、项目目录结构

文件夹结构如下图所示:

testCase--存放测试用例的文件夹

testImg--存放测试结果的截图文件

testLib--存放测试脚本需要依赖的第三方库文件

testLog--存放测试结果日志文件

testParame--存放定位元素的参数,为python文件

testReport--存放测试报告文件,为html文件

mainRun.py--入口文件

7、核心代码解说

7.1、入口文件mainRun.py

7.2、myPageIni.py文件

myPageIni.py文件是在testParame文件夹下,其主要是设置元素的定位参数。

7.3、baseIni.py文件

baseIni.py文件也是在testParame文件夹下,其主要是配置appium启动的参数。

# 定义一个空的字段变量

desired_caps = {}

# 给platformName健赋值,因为用安卓手机测试,所以值为Android

desired_caps['platformName'] = 'Android'

# 给platformVersion健赋值,值为手机的当前系统版本

desired_caps['platformVersion'] = '7.1.1'

# 给deviceName健赋值,值为手机的驱动名称,用adb devices 可以查看获得

desired_caps['deviceName'] = '4769f426'

# 给appPackage健赋值,值为app的包名,可以用adb shell dumpsys activity | findstr mFocusedActivity 查看获得

desired_caps['appPackage'] = 'com.liuqing.test'

# 给appActivity健赋值,值为app的Activity,可以用aapt dump badging liuqing.apk 查看获得,其中launchable-activity冒号后面的就是其值

desired_caps['appActivity'] = 'com.ssf.tckotlin.ui.activity.welcome.WelcomeActivity'

# appServer 是启动的服务器

appServer='http://localhost:4723/wd/hub'

7.4、myPage.py文件

myPage.py文件是在testCase文件夹下,其主要处理app的自动化测试逻辑。

7.5、HTMLTestRunner.py文件

HTMLTestRunner.py文件是在testLib文件夹下,其是外来库,是生成html的测试报告库,下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html

8、测试报告

测试脚本运行后,会自动生成html报告,格式内容如下:

Appium定位

1、常用识别元素的工具

uiautomator:Android SDK自带的一个工具,在tools目录下

monitor:Android SDK自带的一个工具,在tools目录下

Appium Inspector:Appium自带的一个功能,只有mac下可以使用该功能

2、通过id定位

例子:driver.find_element_by_id("***")

3、通过class_name定位

例子:driver.find_element_by_class_name("***")

4、通过xpath定位

例子:driver.find_element_by_xpath("***")

5、通过text定位

例子:driver.find_elements_by_android_uiautomator("***")

6、通过css_selector定位(webview)

只适用于webview的html页面,继承自webdriver,与pc版本的UI测试一致;例子:driver.find_element_by_css_selector("***")

7、通过link_text定位(webview)

只适用于webview的html页面,继承自webdriver,与pc版本的UI测试一致;例子:
driver.find_element_by_link_text(
"***")

8、通过name定位

例子:
driver.find_element_by_name("***")

难点

1、安卓7.0系统,在appium1.4版本以下不能定位到元素;

2、启动uiautomatorviewer.bat,获取页面元素时,报错;打开 uiautomatorviewer 时报错:

Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist! Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!

解决方法:

拔出usb数据线,重新连接手机;重新启动即可。

3、常出现捕捉不到元素的情况,解决方法增加一个停留时间:time.sleep(秒数字)

相关文章

单片机C语言编程,心得都在这里了

单片机写代码总踩坑,头文件被无视,老工程师的经验哪里来?前几天写8x8矩阵键盘的程序,搞了三天代码一直乱报错。后来发现自己连头文件是什么都不清楚,之前写的都是小程序,压根没碰过.h文件。看别人的程序都...

2018年度回顾:挖矿木马为什么会成为病毒木马黑产的中坚力量

一、概述根据腾讯御见威胁情报中心监测数据,2018年挖矿木马样本月产生数量在百万级别,且上半年呈现快速增长趋势,下半年上涨趋势有所减缓。由于挖矿的收益可以通过数字加密货币系统结算,使黑色产业变现链条十...

Android监听滚动视图(监听页面滚动)

Android UI Libs之Android-ObservableScrollView1. 说明Android-ObservableScrollView,顾名思义,Android上观察滚动的视图,可...

Django 官方推荐的姿势:类视图(django类视图和函数视图哪个好)

作者:HelloGitHub-追梦人物在开发网站的过程中,有一些视图函数虽然处理的对象不同,但是其大致的代码逻辑是一样的。比如一个博客和一个论坛,通常其首页都是展示一系列的文章列表或者帖子列表。对处理...

Linux C++实现多线程同步的四种方式(超级详细)

背景问题:在特定的应用场景下,多线程不进行同步会造成什么问题?通过多线程模拟多窗口售票为例:#include <iostream>#include<pthread.h>#inc...

c++ 继承简介(c++继承的概念)

24.1 — 继承简介2024 年 6 月 5 日在上一章中,我们讨论了对象组合,即从更简单的类和类型构建复杂类。对象组合非常适合构建与其部分具有“has-a”关系的新对象。但是,对象组合只是 C++...