appium 自动化测试框架详读(一)
appium框架使用的过程记录,开始使用markdown来语法来编写,不知道博客园是否会支持markdown语法
***
1. appium原理
* appium启动时,创建一个http://127.0.0.1:4723/wd/hub服务端服务端和设备默认使用4724端口进行通信
* 底层调用UIautoamator工具
* 服务端给设备一个bootstrap.jar
* 启动包后会在手机上创建socket服务,暴露4723端口
* 服务端收到也就是appium收到脚本传递命令,通过电脑4724端口想设备4724端口发送指令
* bootstrap,jar收到指令后再去点击/滑动操作,完成后再给服务端一个响应,服务端收到响应后再去运行脚本
***
2. 运行appiumdesktop的时候,手机上安装的文件apk是什么
* unlock,setting,inputmanager三个apk
* Settings是用来指定appium server的工作方式。
* Settings只用来控制appium server,不能用于控制被测应用或设备
*unlock 是用来解锁设备的
*inputmanager 应该是一个输入管理
****
3. appium api有那些?
* 定位控件
* 手势操作
* 获取相关元素及设备
* 其他操作,网络/截图
***
4. 课外疑问,安卓的activity究竟是什么
* 在一个android应用中,一个Activity通常就是一个单独的屏幕
* 它上面可以显示一些控件也可以监听并处理用户的事件做出响应。
* Activity之间通过Intent进行通信。
* Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。
****
5. ui自动化框架目录
* appium框架目录:
* appPerf app运行时的性能监控,包括内存和电量cpu
* common 公共文件,获取yaml内容/报告/截图
* config 配置文件
* initdata 数据初始话
* testModule 测试用例,每一个yaml文件对应一个用例
* testResult 存放项目运行时需要的文件
* testRuner 存放项目运行时需要的文件
* utils 存放一些工具
***
6. 开始使用框架:
* 在 testModule 目录的 yaml 文件下编写脚本了
* 选择一部合适的手机,连接电脑,打开开发者选项 USB 调试模式。然后 dos 命令下输入 adb devices 验证是否连接成功,出现设备信息表示成功
* 打开 appium desktop,然后配置 host 为本地 ip 127.0.0.1 点击 start server
* 一切准备就绪后,最后我们在 testRunner 目录下运行 run_mttest_ui.py 文件,开始自动 化执行用例
# 疑问:
1. @classmethod,
* 类属性属于类,数据属性属于类的实例
* 大家看,数据属性name和类属性mode均没有在类中被定义,你要做的,只是在需要的时候使用他们即可.如何预先给属性赋值
数据属性:
```
class Test:
pass
t=Test()
t.name='notus' 数据属性:
print t.name
Test.mode='auto' 类属性
print Test.mode
@classmethod #在cal_info函数前加上@classmethon,则该函数变为类方法,该函数只能访问到类的数
据属性,不能获取实例的数据属性
def cal_info(cls): #python自动传入位置参数cls就是类本身
print('这是一个%s'%cls.cal_name) #cls.cal_name调用类自己的数据属性
```
* @staticmethod 静态方法只是名义上归属类管理,但是不能使用类变量和实例变量,是类的工具包放在函数前(该函数不传入self或者cls),所以不能访问类属性和实例属性
* @property #在cal_add函数前加上@property,使得该函数可直接调用,封装起来
2. super方法
*super() 函数是用于调用父类(超类)的一个方法。
* super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
* MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。
3. unittest.TestLoader是什么
* unittest 的 TestLoader 成员下面提供了discover()方法可以通过文件的名称来判断是否为测试用例文件,
* 如何为用例文件则自动添加到测试套件中
* 多个独立的测试用例(test case)或者多个独立的测试套件(test suite,可以理解为子套件)可以构成一个
* 测试套件,那么我们写好了一个用例之后,如果去构建一个测试套件呢。下面介绍几种构建测试套件的方法:
* 通过unittest.TestSuite()类直接构建,或者通过TestSuite实例的addTests、addTest方法构建
* 通过unittest.TestLoader类的discover、loadTestsFromTestCase、loadTestsFromModule、loadTestsFromName、loadTestsFromNames这五个方法去构建
* 通过unittest.makeSuite()、unittest.findTestCases()这两个方法去构建
appium 自动化测试框架详读(一)的更多相关文章
- Appium+python自动化(三十八) - Appium自动化测试框架综合实践 - 框架简介-助你冲击高薪,迎娶白富美(超详解)
简介 好久没有更新博客了,博友们是不是有点等不及了.不好意思啊,中秋节过后太忙了,这篇是好不容易抽点零碎时间写的.从这一篇开始小伙伴或者童鞋们,就跟随宏哥的脚步,一步步的从无到有,从0到1的搭建一个完 ...
- Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)
简介 经过一段时间的准备,完善的差不多了,继续分享有关Appium自动化测试框架综合实践.想必小伙伴们有点等不及了吧! driver配置封装 kyb_caps.yaml 配置表 参考代码 platfo ...
- Appium+python自动化(四十)-Appium自动化测试框架综合实践 - 代码实现(超详解)
1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.由于时间的关系,宏哥这里用代码给小伙伴演示两个模块:注册和登录. 2.业务模块封装 因为现在各种APP的层出不群 ...
- Appium+python自动化(四十一)-Appium自动化测试框架综合实践 - 即将落下帷幕(超详解)
1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.到今天为止,大功即将告成:框架所需要的代码实现都基本完成. 2.data数据封装 2.1使用背景 在实际项目过程 ...
- Appium+python自动化(四十二)-Appium自动化测试框架综合实践- 寿终正寝完结篇(超详解)
1.简介 按照上一篇的计划,今天给小伙伴们分享执行测试用例,生成测试报告,以及自动化平台.今天这篇分享讲解完.Appium自动化测试框架就要告一段落了. 2.执行测试用例&报告生成 测试报告, ...
- 『与善仁』Appium基础 — 8、Appium自动化测试框架介绍
目录 1.主流的移动端自动化测试框架 (1)Robotium (2)Macaca (3)Appium 2.自动化测试工具的选择 3.Appium简介 提示:我们前面说的Android环境搭建和adb命 ...
- (原创)Python 自动化测试框架详解
自己折腾了一个python的自动化测试框架,梳理了一下流程,简单分享一下. 项目背景 B/S架构,进行用户界面的自动化测试 工具选择 python开发的自动化测试框架,足够灵活,可以随时根据需求进行变 ...
- Appium 自动化测试框架:关键字驱动+数据驱动
1. 关键字驱动框架简介 2. 框架结构说明 3. 框架代码实现 action 包 page_action.py business_process 包 case_process.py data_so ...
- 基于C#的Appium自动化测试框架(Ⅰ)
因为工作原因,使用的编程语言都是C#,但是国内相应的Appium资料少得可怜,Java版本的Appium也考虑过,但是奈何自己搞不定Eclipse这个编译环境[说白了就是因为懒-- 无意中看到了外面的 ...
随机推荐
- slab分配object
在numa架构下,slab分配object: 3192static __always_inline void * 3193__do_cache_alloc(struct kmem_cache *cac ...
- [shell]上一个命令执行完成,才执行下一个操作 | shell脚本中判断上一个命令是否执行成功
shell脚本中判断上一个命令是否执行成功 shell中使用符号“$?”来显示上一条命令执行的返回值,如果为0则代表执行成功,其他表示失败.结合if-else语句实现判断上一个命令是否执行成功. 场 ...
- mysql知识点汇集
1.将两个表字段类型一致的数据合并到一个新表的命令. INSERT into new_table(user_name,password,age) SELECT user_name,password,a ...
- distinct 与group by 去重
mysql中常用去重复数据的方法是使用 distinct 或者group by ,以上2种均能实现,但2者也有不同的地方. distinct 特点: 如:select distinct nam ...
- Codeforces--C2. Good Numbers (hard version)
题目链接http://codeforces.com/contest/1249/problem/C2.这是道进制转换题,我们的目的是找到最小的一个每个位都是1的三进制数来表示一个十进制数n.做法是,先将 ...
- boost::multi_index 提供一种千人在线即时排行榜的设计思路
原文地址: http://www.limerence2017.com/2019/06/23/cpp01/ 做游戏或金融后台开发,经常会遇到设计开发排行榜的需求.比如玩家的充值排行,战力排行等等.而这种 ...
- ansible使用sudo
方式一. 1.配置资源清单inventory文件 [root@test1 ~]# cat >/etc/ansible/hosts <<EOF [k8s] 192.168.0.92 a ...
- 使用Keepalived实现Nginx高可用
Keepalived是一个路由软件,可以提供linux系统和linux系统上的组件的负载均衡和高可用,高可用基于VRRP(Virtual Router Redundancy Protocol,虚ip) ...
- input.validity
HTML5为表单提供了自带的输入规则提示 但是实际开发中,我们往往需要自定义提示消息和规则,例如限定了最大值但不要求超出时提示错误信息,这时便用到了H5提供的表单新的JS属性--validity,它是 ...
- Linux C/C++基础 文件(下)
1.fgets和fputs #include <stdio.h> int fputs(const char * str, FILE * stream); 功能:将str所指定的字符串写入到 ...