自动化测试之Appium

文章目录

  • 问题归整
    • 1. [华为手机如何打开开发者权限](https://jingyan.baidu.com/article/49ad8bce96e1955835d8fa57.html)
    • 2. 报错,大意:编译器没有找到对应的“name”方法
    • 3. 报错:大意:由于目标计算机积极拒绝,无法连接。
    • 4. 报错,大意“不能通过定义的元素属性定位到元素”?
    • 5.报错,大意: selenium无法创建一个session(会话),已有一个会话在进行中。
    • 6.使用uiautomatorviewer 查看android某些页面元素,报错大意:获取页面层级出错
    • 7. 如何从Excel中获取脚本元素
    • 8. 如何实现,定位不到某个元素的时候代码提示?
    • 9. 如何实现识别app的tocat?
    • 10. 如何实现滑动滑块?
    • 11. 关于appium不能输入汉字的问题?
    • 12. 脚本不能识别给定元素?
  • 第一章 Apium初识
    • 第一讲 Apium 概述
      • 1 Appium简介
      • 2 特点
    • 第二讲 appiun与 Selenium
    • 第三讲 appium工作原理
      • 1. Android
      • 2. ios
    • 第四讲 环境搭建
    • 第五讲 环境软件说明
    • 第六讲 获取前置信息获取
      • 1. 获取设备名称deviceName
      • 2 获取包名appPackage、获取启动页appActivity
        • 方法一:adb命令
        • 方法二:appium
      • 3. 定位元素工具
        • 工具1:UI Automator Viewer
          • 使用方法及步骤
        • 工具2:Appium-Sever
  • 第二章 app元素的定位及操作
    • 第一讲 元素定位方法
      • 1. ID定位
      • 2. class定位
      • 3. ==**XPATH定位(重点、重点、重点)**==
        • 3.1 Class + Text(name)定位
        • 3.2 Class + Content(Content-desc)定位
        • 3.3 父节点Class + 该节点Class定位
      • 4. AccessibilityId定位
      • 5.Name定位(不建议使用)
      • 6. 坐标定位
      • 7.
    • 第二讲 元素操作
  • 第三章 Unittest单元测试框架
    • 第一讲 概念
    • 第二讲 使用
      • 1. Unittest介绍
      • 2. Unittest框架使用格式
    • 第三讲 Unittest断言
      • 第四讲 Testuite套件使用
      • 第五讲 Unittest生成测试报告
      • 第六讲 代码模块化
        • 实例说明
        • 总结及步骤:
  • 第四章 app自动化实战
    • 第一步 获取设备及包的信息

问题归整

https://www.cnblogs.com/chaoyangya/p/9774614.html

1. 华为手机如何打开开发者权限

2. 报错,大意:编译器没有找到对应的“name”方法

  • appium1.5及以下版本支持name定位,v1.6+版本,统一都不支持 by_name元素定位方法!

3. 报错:大意:由于目标计算机积极拒绝,无法连接。

  1. 手机没有通过USB连接到电脑
  2. 手机连接到电脑上要关闭各种手机助手,不要安装手机管家,不要安装手机管家,不要安装手机管家。
  3. 没有启动appium
  4. USB连接后没有选择连接方式,要将连接方式 选择为“文件传输(NTC)”
  5. 代码中手机设备名称显示错误“adb devices”
  6. 可能是由于屏幕关闭的原因的造成的,所以要保持在case运行过程中,一定要让屏幕处于点亮状态

4. 报错,大意“不能通过定义的元素属性定位到元素”?

  1. 页面还没有跳转到对应界面,解决办法:添加time,sleep()
  2. 页面拥有该属性的元素不唯一,解决办法:改变定位元素方法

5.报错,大意: selenium无法创建一个session(会话),已有一个会话在进行中。

解决办法:

  1. 每执行一次脚本暂停一次appium连接,并清楚上次运行信息
  2. 关闭手机上上次已经运行过,但未关闭的应用进程

6.使用uiautomatorviewer 查看android某些页面元素,报错大意:获取页面层级出错

解决办法:

  1. 手机需要重启
  2. appium服务异常需要重新连接
  3. 可以尝试切换USB接口
  4. 最后可以把手机开发者选项的USB调试撤销权限,在重新获取
  5. 该app不支持该页面的截屏功能所以uiautomatorviewer捕捉不到

7. 如何从Excel中获取脚本元素

https://www.cnblogs.com/linyfeng/p/7123423.html

8. 如何实现,定位不到某个元素的时候代码提示?

  • 解决办法:使用捕获异常语句进行捕获异常。当需要对全部元素进行捕获的时候,需要将所有的元素写在“try:”语句下方。常用的方法建议写成一个工具类,对某个元素进行查找

check=driver.find_element_by_id("****")


def Check_element(self,check)
    try:
        check    
    except:
        print('获取元素失败')



9. 如何实现识别app的tocat?

10. 如何实现滑动滑块?

11. 关于appium不能输入汉字的问题?

  • send_keys 本质是点击键盘, setValue本质是给控件属性value赋值。能不能输入汉字跟机器安装的输入法有关
    -解决办法
desc = {
            "deviceName": "S000960221055",
            # "deviceName": "Z2X4C15C14015116",
            "platofromVersiom": "6.0.1",
            "platformName": "Android",
            "appPackage": "com.ynh.gjia.tt",
            "appActivity": "com.ynh.gjia.tt.WelcomeActivity",
            "unicodeKeyboard" :"True",# 脚本中需要输入汉字的时候必须指明这种输入法
            "resetKeyboard":"True",# 运行完成的时候回复默认之前输入法

        }

12. 脚本不能识别给定元素?

  • 原因:
    1. 给定的元素搜索信息标识不唯一
    1. app网络原因,没有添加思考时间,页面没有跳转就进行了识别

第一章 Apium初识

第一讲 Apium 概述

1 Appium简介

Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium对IOS系统的支持得益于Dan Cuellar’s对于IOS自动化的研究。Appium也集成了Selendroid,来支持老android版本。

Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架。如果只使用Apple的UIAutomation,我们只能用javascript来编写测试用例,而且只能用Instruction来运行测试用例。同样,如果只使用Google的UIAutomation,我们就只能用java来编写测试用例。Appium实现了真正的跨平台自动化测试。

2 特点

  1. 使用自动化来测试一个app,且不需要重新编译它
  2. 写自动化case(用例),不需要学习特定的语言。
  3. appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用。
“移动原生应用”是指那些用iOS或者 Android SDK 写的应用(Application简称app)。
“移动web应用”是指使用移动浏览器访问的应用(appium支持iOS上的Safari和Android上的 Chrome)。
“混合应用”是指原生代码封装网页视图——原生代码和 web 内容交互。比如,像 Phonegap,可以帮助开发者使用网页技术开发应用,然后用原生代码封装,这些就是混合应用。
  1. appium是一个跨平台的工具:它允许测试人员在不同的平台(iOS,Android)使用同一套API来写自动化测试脚本,增加了iOS和Android测试套件间代码的复用性。

第二讲 appiun与 Selenium

  • appium与Selenium
  1. appium类库封装了标准Selenium客户端类库,为用户提供所有常见的JSON格式selenium命令以及额外的移动设备控制相关的命令,如多点触控手势和屏幕朝向。
  2. appium服务端定义了官方协议的扩展,为appium用户提供了方便的接口来执行各种设备动作,例如在测试过程中安装/卸载App。这就是为什么我们需要appium特定的客户端,而不是通用的Selenium客户端.
  3. appium客户端类库只是增加了一些功能,而实际上这些功能就是简单的扩展了Selenium客户端,所以他们仍然可以用来运行通用的Selenium会话。

第三讲 appium工作原理

1. Android

在Android端,appium基于WebDriver协议,利用Bootstrap.jar,最后通过调⽤用UiAutomator的命令,实现App的自动化测试。

UiAutomator测试框架是Android SDK自带的App UI自动化测试Java库。另外由于UiAutomator对H5的支持有限,appium引入了chromedriver以及safaridriver等来实现基于H5的自动化。

appium 在android端工作流
client端也就是我们 test script是我们的webdriver测试脚本。中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol。在这里提供它提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调⽤用对应的框架响应操作。

appium server会把请求转发给中间件Bootstrap.jar ,它是用java写的,安装在手机上.Bootstrap监听4724端口并接收appium 的命令,最终通过调⽤用UiAutomator的命令来实现。

最后Bootstrap将执行的结果返回给appium server。

appium server再将结果返回给 appium client。

2. ios

在IOS端,appium同样使⽤WebDriver的一套协议。

与Android端测试框架不同的是,appium ios封装了apple的 Instruments框架,主要用了Instrument里的UI Automation(Apple的⾃自动化测试框架),然后在设备中注⼊入bootstrap.js进⾏行监听。

appium 在ios端工作流
client端 依然是 test script是我们的webdriver测试脚本。

中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol。在这里提供它提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调⽤用对应的框架响应操作。

appium server调用instruments.js 启动⼀一个socket server,同时分出一个⼦子进程运⾏instruments.app,将bootstrap.js(一个UIAutomation脚本)注⼊入到device⽤于和外界进行交互

最后Bootstrap.js将执行的结果返回给appium server

appium server再将结果返回给 appium client。

所以我们可以看到android与ios区别在于appium 将请求转发到bootstrap.js或者bootstrap.jar.然后由bootstrap 驱动UIAutomation和UiAutomator去devices上完成具体的动作。

第四讲 环境搭建

  1. 安装nodejs
  2. 安装Appium(Appium——Sever)
  3. 安装Appium–desktop
  4. 本机安装JDK
  5. 本机安装Android SDk
  6. 本机安装Python
  7. 本机安装PYcharm
  8. 本机安装Python——appium——client(PYcharm插件安装)
  • 根据自己所选的表写脚本代码的不同,选择不同的client
  1. 本机安装selenium
  2. 手机已打开开发者模式

第五讲 环境软件说明

  1. 为什么要安装JDK?安装Android?
Android语言基于Java语言,Android开发人员在安装的时候必须也要安装JDK环境才能编写Android前段代码。
  1. 为什么安装Python?
自动化脚本使用Python语言编写,故需要代建代码编写环境
  1. 为什么安装PYcharm?
Python:Python语言的开发集成环境
作用:方便代码的编写、调试、插件的安装
注意:pycharm中安装的插件不与电脑环境系统公用,是单独的一套。
  1. 为什么安装“Python——appium——client”?

  1. 为什么要Nodejs?
作用:方便在线安装appium(appium_sever)
  1. 为什么要安装Appium–sever 或 Appium–desktop?两者有什么区别?
Appium--sever 和Appium--desktop其实是一个东西。运行脚本调试用的。
2015 年底为界限,之前叫Appium-Server(即1/2/3篇中使用的appium) ,之后叫Appium-desktop ,当然, 两个软件是区分开的。Appium-Server当前仍然是可用的。
区别:
1.Appium--sever现在官方已经停止更新了。而Appium--desktop一直在更新。
2.Appium--sever版本已停止更新,“最新”的版本最高支持Android 6.*的系统。7.0以上的有些新的特性不支持。
3.Appium--sever在脚本调试的时候需要配置手机等信息,相比之下Appium--desktop直接可以使用不需要做任何特殊配置。
4.Appium--desktop可以获取手机界面元素,方便获取对应元素标识。前者则不行。
综合建议,使用Appium--desktop便捷。
  1. 自动化脚本的执行流程?

第六讲 获取前置信息获取

1. 获取设备名称deviceName

win+R——cmd——adb devices

2 获取包名appPackage、获取启动页appActivity

方法一:adb命令

具备条件 命令 操作方法 实际结果
有apk包文件 aapt dump badging [yourapp.apk] 1.apk所在电脑路径下打开dos窗口
2.执行命令aapt dump badging [yourapp.apk]>d:log.txt
直接将信息输出到文件。
3.txt文件里分别定为"package"和"Activity"
[外链图片转存失败(img-6TJG6STX-1567141318919)(EAF596D8A0274E818F59A4BF4E507D7B)][外链图片转存失败(img-r9dQDi4i-1567141318919)(FFD6590A69154E9696DC13FC4F639680)]

方法二:appium

  • 使用方法及步骤:
  1. 打开软件Appium,不需要启动连接
  2. 设置链接,选中包之后会默认将报名、启动页
    [外链图片转存失败(img-YngLRV08-1567141318919)(CEA572B325504797B5B3478D3ED0692B)]

3. 定位元素工具

工具1:UI Automator Viewer

  • 简介:UI Automator Viewer 是SDK自带的一个页面元素定位工具
  • 位置: E:\android-sdk_r24.4.1-windows\android-sdk-windows\tools
使用方法及步骤
  1. 运行UI Automator Viewer
  2. 手机USB连接至电脑,保持界面常亮
  3. 点击启动按钮
  4. 点击对应页面元素

[外链图片转存失败(img-uBtfWWj2-1567141318920)(B61415B52084417A899993233E970B14)]
[外链图片转存失败(img-jxpW9oZ1-1567141318921)(DD6CBE0F58E247CC867A309768D4AA6E)]

[外链图片转存失败(img-NmQy1Czk-1567141318921)(1C10D5682BC046098D7268FED68FE2B0)]

工具2:Appium-Sever

  • 简介:
  • 使用方法及步骤:
  1. 打开软件Appium,不需要启动连接

  2. 设置链接
    [外链图片转存失败(img-INHlUsL9-1567141318921)(CEA572B325504797B5B3478D3ED0692B)]

  3. 确保手机链接到电脑,手机上保证没有安装这个软件。

  4. 启动appium的连接,左上角三角形的按钮,等待即可,会将APP自动装至app,并会运行app

  5. 待APP启动后,点击appium GUI界面上搜索图形按钮

  6. APP进入一个页面,点击“refresh”(刷新),会将所有按钮的元素都显示出来。按个去找即可。

  • 缺点:
  1. 每次启动一次连接,手机上都会重新安装一次应用
  2. 界面上的元素不能直接定位
  3. 运行过程中会无故报如下错误
    [外链图片转存失败(img-IETKOQcr-1567141318921)(25E986F73629412D914A90E3370A1A1E)]

第二章 app元素的定位及操作

第一讲 元素定位方法

https://www.cnblogs.com/tuxiaomeng/p/10442514.html
appium共11中定位方式,在selenium的基础上加了三种。在pycharm中输入driver.find_element_by后会自动匹配出来
附加的三种:

  1. driver.find_element_by_accessibility_id()
  2. driver.find_element_by_android_uiautomator()
  3. driver.find_element_by_ios_uiautomator()# 先不管,iOS用的

1. ID定位

[外链图片转存失败(img-tm0wco5r-1567141318921)(58BB99D9504F4BB1A1B60BD8FF9CBB23)]

  • 句式:driver.find_element_by_id(‘resource-id’)

2. class定位

[外链图片转存失败(img-KwdVPiBn-1567141318921)(EF6B44C993FE4A3587F78DD624D3C778)]

  • 句式:driver.find_element_by_class_name(‘class’)

3. XPATH定位(重点、重点、重点)

使用appium亲测可用(绝对路径)
https://blog.csdn.net/xxlovesht/article/details/82791370

  • Android:Android的Xpath定位与PC的XPATH定位大同小异,web项目使用Xpanth定位的时候可以选择“相对路径”或“绝对路径”,但是在APP中只能使用相对路径来定位,通过class和*属性来确定元素唯一性。亲测在使用绝对路径是定位不到的。
  • iOS:iOS10 以上使用XCUITest框架后,原生框架不支持XPATH,Appium进行了转换,速度很慢不建议使用。

3.1 Class + Text(name)定位

[外链图片转存失败(img-3E0sDLcp-1567141318921)(C39D49EC8D3149D98D4B7A1C4AD135C8)]

  • 例子:driver.find_element_by_xpath(u’//android.widget.TextView[contains(@text,“转入记录”)]’)

  • 句式:driver.find_element_by_xpath(u’//Class值[contains(@text,“text值”)]’)

3.2 Class + Content(Content-desc)定位

[外链图片转存失败(img-6130fFK4-1567141318921)(D133BD27A44C4B5E89772640E24361C3)]

  • 例子:driver.find_element_by_xpath(u’//android.widget.ImageButton[@content-desc=“转到上一层级”]’)

  • 句式:driver.find_element_by_xpath(u’//Class值[@content-desc=“content-desc的值”]’)

3.3 父节点Class + 该节点Class定位

[外链图片转存失败(img-V5FsXWtD-1567141318922)(64107040DB3A428C8EC8D4134E5FF71B)]

  • 例子:driver.find_element_by_xpath(’//android.support.v7.widget.RecyclerView/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.TextView[2]’)

  • 句式:driver.find_element_by_xpath(’//父节点1Class值/父节点2Class值/该节点Class值’)

  • 注意:如果定位不到,往上多写几层父节点就可以

4. AccessibilityId定位

  • Android:Android的content-desc属性对应AccessibilityId定位方式,这个content-desc属性专门为残障人士设置,如果这个属性不为空则推荐使用。
  • iOS:iOS的label和name属性都对应AccessibilityId定位方式,如果有则推荐使用。

[外链图片转存失败(img-hGdMyhyg-1567141318922)(C0B560938D3E4162AF4B32B9FB038D3B)]

  • 句式: driver.find_element_by_accessibility_id(“accessibility_id”)

5.Name定位(不建议使用)

[外链图片转存失败(img-M2cHFbSz-1567141318922)(2826BC8554B9478F863E0BE4192B356F)]
appium1.5之前版本(不包括1.5版本),name定位。

  • 句式:driver.find_element_by_name(“text(\中文\)”)

appium1.5及之后的版本废弃了name属性,如需要用name定位,则需要使用uiautomator的定位方式,使用text的内容)

  • 句式:driver.find_element_by_android_uiautomator(“text(\中文\)”)

6. 坐标定位

[外链图片转存失败(img-uby9L34G-1567141318922)(A2F9710932554DD79A04064219FE3DD8)]

  • 句式:driver.swipe(相对坐标X,相对坐标X,X,Y,1)
from appium import webdriver
# 注意是from appium import webdriver而不是from selenium import webdriver。后者没有Tap()函数
X=driver.get_window_size()['width']# 获取屏幕最大宽度
Y=driver.get_window_size()['height']# 获取屏幕最大高度
# 点击位置[610,500]
x=610/X #确定目标位置相对坐标
y=500/Y
driver.tap([(x*X,y*Y)],)# 调用点击函数"".tap"


  • 缺点:
  1. 自动化设备更换的时候需要进行重新定位,根据设备的分辨率不一样的时候需要重新获取对应坐标。
  2. 可移植性弱,不到万不得已不要用此种定位方式

7.

第二讲 元素操作

找到元素后可以对元素进行的操作,例如上面讲的进一步定位元素

操作 对应方法 实例
点击操作 .click() driver.find_element_by_id(“com.wuba.zhuanzhuan:id/ae8”).click()
清空输入框内容 clear() driver.find_element_by_id(“com.wuba.zhuanzhuan:id/ij”).clear()
输入框内输入内容 .send_keys(xx) driver.find_element_by_id(“com.wuba.zhuanzhuan:id/ij”).send_keys(“test content”)
获得元素的text内容 .text print(driver.find_element_by_xpath(“xxx”).text)
锁定屏幕 driver.lock(5)
把当前应用放到后台去 driver.background_app(5)
长按住键盘 driver.long_press_keycode(keycode)
检查应用是否已经安装 driver.is_app_installed(‘packagename‘)

6.安装应用到设备中去 driver.install_app(‘path/to/my.apk‘)

7.从设备中删除一个应用 driver.remove_app(‘com.example.android.apis‘)

8.模拟设备摇晃 driver.shake()
9.关闭应用 driver.close_app()
10.启动应用 driver.launch_app()
11.应用重置 driver.reset()
12.列出所有的可用上下文 driver.contexts
13.列出当前上下文 driver.current_context

14.将上下文切换到默认上下文 driver.switch_to.context(None)

15.截图 driver.get_screenshot_as_file(filename)

16.发送一个按键事件给设备 driver.keyevent(176)

17.Android only 得到当前 activity driver.current_activity

19.模拟用户滑动 driver.swipe(75, 500, 75, 0, 1000)

20.在 0% 到 100% 内双指缩放屏幕 driver.pinch(element=el)

21.放大屏幕 在 100% 以上放大屏幕 driver.zoom(element=el)

22.从设备中拉出文件 driver.pull_file(‘Library/AddressBook/AddressBook.sqlitedb‘)

23.推送文件到设备中去data = “some data for the file”

path = “/data/local/tmp/file.txt”

driver.push_file(path, data.encode(‘base64‘))

24.隐藏键盘 driver.hide_keyboard()
25.安装 appdriver.install_app(path)
26.卸载 appdriver.remove_app(app_id)
27.打印当前 activitydriver.current_activity
28.振动 driver.shake()
29.打开通知栏(api 18 以上)driver.open_notifications()
30.获取网络 driver.network_connection
31.获取手机屏幕分辨率 driver.get_window_size()
32.设置屏幕分辨率 driver.set_window_size(width,height)
33.获取当前坐标位置 driver.get_window_position()
34.开关定位服务 driver.toggle_location_services()
35.开关定位服务 driver.toggle_location_services()
36. 关闭 close
37.退出关闭所有连接 quit

  1. 获取当前页面源 page_source
    39.获取当前页面网页 current_url
    4.获取元素左上角坐标 location
    41 获取元素大小 size
  2. 元素是否可用 is_enabled()返回 True of False
    43.元素是否可选择 is_selected()
    44.清除 clear
    45.点击 click

46.设置经纬度 用法 driver.set_location(纬度,经度,高度)
47.返回当前输入法包名 active_ime_engine
48.关闭当前输入法 deactivate_ime_engine
49.激活输入法 activate_ime_engine
用法
driver.activate_ime_engine(“com.android.inputmethod.latin/
.LatinIME”)

  1. s_ime_active

检查设备是否有输入法服务活动。返回真/假。 安卓 用法
print(driver.is_ime_active())

第三章 Unittest单元测试框架

第一讲 概念

1.什么是单元测试?
指对软件中的最小可测试单元进行检查和验证。
2.Unittest是什么?
Unittest是Python语言中实现单元测试的框架,同Java语言的junit相同。

第二讲 使用

1. Unittest介绍

主要使用的函数:

  • def setUp(self): 每次执行一个用例(TestCase)之前必须执行的函数,一般做变量初始化使用。
  • def test_name(self):测试用例(TestCase)
  • def tearDown(self):执行用例后的善后工作
  • unittest. main():主函数,,执行所有方法名称为“test_”开头的测试用例

2. Unittest框架使用格式

  1. 必须import语句引入unittest模块
  2. 测试的类都继承于TestCase类
  3. setUp()测试前的初始化工作; tearDown()测试后的清除工作(在每个测试方法运行时被调用)
  4. 所有类中方法的入参为self,定义方法的变量也要"self.变量
  5. 定义测试用例,以"test"开头命名的方法,方法的入参为self
  6. unittest. main()方法会搜索该模块下所有以test开头的测试用例方法,并自动执行它们
  7. 自己写的py文件不能,用unittest.py命名,不然会找不到TestCase
  8. main函数放在文档最前和末尾都可以,当放在最前时候,需要Tab缩进,末尾时,和类对其即可。
  • 实例

案例一


Python是采用Unicode编码,不需要生命编码,为防止注释的汉字发生乱码,故此声明文档编码格式
import unittest
class Dome(unittest.TestCase):

    if __name__ == '__main__':
        unittest.main()
    def setUp(self):
        print('初始化值')
    def test_name(self):
        print('运行TsetCase')
    def tearDown(self):
        print('收尾工作')
    def test_name1(self):
        print('运行TsetCase2')



案例二

import unittest
class Dome(unittest.TestCase):
    def setUp(self):
        print('初始化值')
    def test_name(self):
        print('运行TsetCase')
    def tearDown(self):
        print('收尾工作')
    def test_name1(self):
        print('运行TsetCase2')
if __name__ == '__main__':
    unittest.main()


执行结果
[外链图片转存失败(img-0qdH5oII-1567141318923)(CD60AAB829C74DFEBBBFE351ABA2EF96)]

第三讲 Unittest断言

  • 实例


  • 断言使用句式:

    self.verifyString=‘aaa’
    self.assertEqual(‘test’,self.verifyString,msg=‘两个值不相等’) #msg 定义出错信息
  • 解释:字符串“test”和字符串self.verifyString的值得值比较是否相等。
  • 相等概念:联系面向对象、Java值传递、计算机存储数据方式进行理解。
序号 方法 解释 例子
1 assertEqual(a, b) 判断ab是否相等
2 assertNotEqual(a, b) 判断ab不相等
3 assertIs(a, b) 判断a是b
4 assertIsNot(a, b) 判断a不是b
5 assertIsNone(a) 判断a是不是None
6 assertIsNotNone(a) 判断a不是None
7 assertIn(a,b) 判断a在b中,此时a与b可以相等
8 assertNotIn(a, b) 判断a不在b中
9 assertIsInstance(a, b) 判断a是否属于b的实例
10 assertNotIsInstance(a, b) 判断a不属于b的实例
11 assertGreater(a, b) 判断a > b
12 assertGreaterEqual(a, b) 判断a >= b
13 assertLess(a, b) 判断a < b
14 assertLessEqual(a, b) 判断a <= b

第四讲 Testuite套件使用

第五讲 Unittest生成测试报告

第六讲 代码模块化

实例说明

  • 文件“Test2”调用“Test1”中的方法
  • 文件名1:“Test1”
import unittest                     # 导入unittest模块
class dome2(unittest.TestCase):     # 测试类都必须继承TestCase类
    def setUp(self):                # 前置函数
        pass                        # 占位语句
    def taet_name(self):            # 测试用例
        print("这是引用方法dome2.dome")# 打印输出
    def tearDown(self):             # 后置函数
        pass
    def taet_name2(self):
        print("这是引用方法dome2.dome1")
    def taet_name3(self):
        print("这是引用方name2")
  • 文件2:“Test2”
import unittest
import test1                        # 引入test1.py文件
class dome1(unittest.TestCase):
?cds;fckpasfj;ljeds ljl
if __name__ == '__main__':

   ab=unittest.TestSuite()          # Test2文件中写方法在调用Test1中方法的语句格式
   ab.addTest(a.taet_name3(self))   # Test2文件中写方法在调用Test1中方法的语句格式
   a=test2.dome2.taet_name3(self)   ### Test2文件中main函数直接调用文件Test1中的方法语句格式
   ab.addTest(test2("test_name"))   ### Test2文件中main函数直接调用文件Test1中的方法语句格式

总结及步骤:

  1. 引用和被应用函数都需要导入Unittest模块
  2. 引用文件必须引入被引用文件“import test1”,若引用文件与被引入文件不再同一文件目录下,则引入时需要声明文件路径
  3. 调用另一文件方法时,必须创建另文件类的对象。
  • 格式:文件名.类名
  • 注意:Python与Java不同,一个py文件可以存在多个主类,而一个Java文件只能存在一个主类。

第四章 app自动化实战

第一步 获取设备及包的信息

from appium import webdriver#导入appium包 #连接手机app初始化的一些信息
desc={}
desc['deviceName']='127.0.0.1:62001'#手机设备名称,adb devices
desc['platformVersion']='4.4.2'#手机版本,在手机中:设置--关于手机
desc['platformName']='Android' #手机类型,ios或android
#输入命令,获取app信息:aapt dump badging C:\Users\83473\Desktop\mobileqq_android.apk
desc['appPackage']='com.tencent.mobileqq'#包名
desc['appActivity']='com.tencent.mobileqq.activity.SplashActivity'#启动入口
desc["unicodeKeyboard"] = "True"#appium提供的一种输入法,可以传中文。测试时直接用这个输入法
desc["resetKeyboard"] = "True"#程序结束时重置原来的输入法
desc["noReset"] = "True"#不初始化手机app信息(类似不清楚缓存)
#启动服务端,再cmd窗口输入appium.如果appium没有安装好,可以打开appium-desktop.也相当于启动了服务
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desc)
#访问服务接口,并启动手机app。url参数是当appium启动后,默认访问服务地址和接口
#固定句式不变,端口、主机地址发生变化的时候需要 

重要

https://www.cnblogs.com/shuchengxiang/p/7145037.html
[外链图片转存失败(img-TDquWXb8-1567141318923)(0C127E409F274F158365EE02F37E8EC6)]
[外链图片转存失败(img-jjV6M4bv-1567141318923)(776ACD49EC8443A19673C7231F2D4B0A)]
[外链图片转存失败(img-PGkAg7iS-1567141318923)(A26E5EC6E2D64809B2848437CFB36D3F)]

滑块

如何打开定位的

坐标定位

U2方法大全

https://blog.csdn.net/xuxunxiong954/article/details/79436599

http://www.mamicode.com/info-detail-2390132.html

https://blog.csdn.net/jffhy2017/article/details/84936164

滑块函数
https://www.cnblogs.com/dsy-sun/p/6595164.html
Selenium 之 WebDriverWait
https://blog.csdn.net/duzilonglove/article/details/78455051

https://www.jianshu.com/p/209d46ce0904
U2基础知识

https://blog.csdn.net/qq_42293487/article/details/88887194
https://blog.csdn.net/ricky_yangrui/article/details/81415365
https://www.cnblogs.com/mashuqi/p/10406408.html
https://blog.csdn.net/panda62/article/details/80017021
https://blog.csdn.net/lsp84ch80/article/details/82776045

https://blog.csdn.net/sdfsdfdfa/article/details/79120665
https://www.cnblogs.com/desperado0807/p/5684472.html

识别图片中指定区域的文字
https://blog.csdn.net/qq_41616397/article/details/87980510
https://blog.csdn.net/dream_18/article/details/85137580

思路(获取tocat的值)
1.点击后截屏,
2.截屏后识别指定区域的文字,需要指定

Python+Opencv识别两张相似图片
https://blog.csdn.net/mangobar/article/details/85226531

https://segmentfault.com/a/1190000004500523?_ea=630748

你可能感兴趣的:(自动化测试)