Appium+python自动化(四十一)-Appium自动化测试框架综合实践 - 即将落下帷幕(超详解)
1.简介
今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现。到今天为止,大功即将告成;框架所需要的代码实现都基本完成。
2.data数据封装
2.1使用背景
在实际项目过程中,我们的数据可能是存储在一个数据文件中,如txt,excel、csv文件类型。我们可以封装一些方法来读取文件中的数据来实现数据驱动。
2.2案例
将测试账号存储在account.csv文件,内容如下:
account.csv
hg2018 |
hg2018 |
hg2019 |
zxw2019 |
666 |
222 |
参考代码
2.3enumerate()简介
enumerate()是python的内置函数
- enumerate在字典上是枚举、列举的意思
- 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
- enumerate多用于在for循环中得到计数。
2.4enumerate()使用
如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:
参考代码
- list = ["这", "是", "一个", "测试","数据"]
- for i in range(len(list)):
- print(i,list[i])
上述方法有些累赘,利用enumerate()会更加直接和优美:
参考代码
- list1 = ["这", "是", "一个", "测试","数据"]
- for index, item in enumerate(list1):
- print(index,item)
3.数据读取方法封装
数据读取方法也属于公共方法,这里我们首先实现一下,然后将其封装到里边即可。
3.1数据读取方法实现的参考代码
- import csv
- def get_csv_data(csv_file,line):
- with open(csv_file, 'r', encoding='utf-8-sig') as file:
- reader=csv.reader(file)
- for index, row in enumerate(reader,1):
- if index == line:
- return row
- csv_file='../data/account.csv'
- data=get_csv_data(csv_file,3)
- print(data)
3.2封装
将其封装在公共方法中,在其他地方用到的时候,直接导入调用即可。
4.utf-8与utf-8-sig两种编码格式的区别
UTF-8以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序的问题,也因此它实际上并不需要BOM(“ByteOrder Mark”)。但是UTF-8 with BOM即utf-8-sig需要提供BOM。
5.config文件配置
各种配置文件都放在这个目录下。
5.1日志文件配置
主要是一些日志信息的配置。
log.config
参考代码
- [loggers]
- keys=root,infoLogger
- [logger_root]
- level=DEBUG
- handlers=consoleHandler,fileHandler
- [logger_infoLogger]
- handlers=consoleHandler,fileHandler
- qualname=infoLogger
- propagate=0
- [handlers]
- keys=consoleHandler,fileHandler
- [handler_consoleHandler]
- class=StreamHandler
- level=INFO
- formatter=form02
- args=(sys.stdout,)
- [handler_fileHandler]
- class=FileHandler
- level=INFO
- formatter=form01
- args=('../logs/runlog.log', 'a')
- [formatters]
- keys=form01,form02
- [formatter_form01]
- format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s
- [formatter_form02]
- format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s
6.测试用例封装
这里宏哥举例给小伙伴们演示:封装注册和登录两个测试用例。
6.1测试用例执行开始结束操作封装
测试用例执行开始和结束的封装,其他模块用到直接导入,调用即可。
myunit.py
参考代码
- # coding=utf-8
- # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
- # 2.注释:包括记录创建时间,创建人,项目名称。
- '''
- Created on 2019-11-20
- @author: 北京-宏哥 QQ交流群:707699217
- Project:Appium自动化测试框架综合实践 - 代码实现
- '''
- # 3.导入模块
- import unittest
- from kyb_testProject.common.desired_caps import appium_desired
- import logging
- from time import sleep
- class StartEnd(unittest.TestCase):
- def setUp(self):
- logging.info('=====setUp====')
- self.driver=appium_desired()
- def tearDown(self):
- logging.info('====tearDown====')
- sleep(5)
- self.driver.close_app()
6.2注册用例
开始注册用例代码逻辑的实现。
test_register.py
参考代码
- # coding=utf-8
- # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
- # 2.注释:包括记录创建时间,创建人,项目名称。
- '''
- Created on 2019-11-20
- @author: 北京-宏哥 QQ交流群:707699217
- Project:Appium自动化测试框架综合实践 - 代码实现
- '''
- # 3.导入模块
- from kyb_testProject.common.myunit import StartEnd
- from kyb_testProject.businessView.registerView import RegisterView
- import logging,random,unittest
- class RegisterTest(StartEnd):
- def test_user_register(self):
- logging.info('======test_user_register======')
- r=RegisterView(self.driver)
- username = 'bjhg2019' + 'fly' + str(random.randint(1000, 9000))
- password = 'bjhg2020' + str(random.randint(1000, 9000))
- email = 'bjhg' + str(random.randint(1000, 9000)) + '@163.com'
- self.assertTrue(r.register_action(username,password,email))
- if __name__ == '__main__':
- unittest.main()
6.3登录用例
开始登录用例代码逻辑的实现。
test_login.py
参考代码
- # coding=utf-8
- # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
- # 2.注释:包括记录创建时间,创建人,项目名称。
- '''
- Created on 2019-11-13
- @author: 北京-宏哥 QQ交流群:707699217
- Project:Appium自动化测试框架综合实践 - 代码实现
- '''
- # 3.导入模块
- from kyb_testProject.common.myunit import StartEnd
- from kyb_testProject.businessView.loginView import LoginView
- import unittest
- import logging
- class TestLogin(StartEnd):
- csv_file='../data/account.csv'
- @unittest.skip('test_login_zxw2018')
- def test_login_zxw2018(self):
- logging.info('======test_login_zxw2018=====')
- l=LoginView(self.driver)
- data=l.get_csv_data(self.csv_file,2)
- l.login_action(data[0],data[1])
- self.assertTrue(l.check_loginStatus())
- # @unittest.skip('skip test_login_zxw2017')
- def test_login_zxw2017(self):
- logging.info('======test_login_zxw2017=====')
- l=LoginView(self.driver)
- data = l.get_csv_data(self.csv_file, 1)
- l.login_action(data[0], data[1])
- self.assertTrue(l.check_loginStatus())
- @unittest.skip('test_login_error')
- def test_login_error(self):
- logging.info('======test_login_error=====')
- l = LoginView(self.driver)
- data = l.get_csv_data(self.csv_file, 3)
- l.login_action(data[0], data[1])
- self.assertTrue(l.check_loginStatus(),msg='login fail!')
- if __name__ == '__main__':
- unittest.main()
7.小结
到此,Appium自动化测试框架就差下一篇就全部完成了,聪明的你都懂了吗???嘿嘿!慢慢地来吧。
下节预告
下一篇,讲解执行测试用例,生成测试报告,以及自动化平台,请关注宏哥,敬请期待!!!
Appium+python自动化(四十一)-Appium自动化测试框架综合实践 - 即将落下帷幕(超详解)的更多相关文章
- Appium+python自动化(四十二)-Appium自动化测试框架综合实践- 寿终正寝完结篇(超详解)
1.简介 按照上一篇的计划,今天给小伙伴们分享执行测试用例,生成测试报告,以及自动化平台.今天这篇分享讲解完.Appium自动化测试框架就要告一段落了. 2.执行测试用例&报告生成 测试报告, ...
- Appium+python自动化(十三)- 输入中文 - 一次填坑记(超详解)
简介 无论你在哪里,在做什么都会遇到很多坑,这些坑有些事别人挖的,有些是自己挖的.别人挖的叫坑人,自己挖的叫自杀,儿子挖的叫坑爹.因此在做app自动化道路上也不会是一帆风顺的,你会踩很多坑,这些坑和你 ...
- Appium+python自动化(十三)- 与Capability完美懈垢之解读(超详解)
简介 Capability又叫Appium Desired Capabilities,前边写了那么多实例代码,小伙伴可以发现一些规律,就是有一部分代码总是重复的出现在你的视线中.这部分就是对Capab ...
- python接口自动化(四十一)- 发xml格式参数的post请求(超详解)
简介 最近在工作中,遇到一种奇葩的接口,它的参数数据是通过xml,进行传递的,不要大惊小怪的,林子大了什么鸟都有,每个人的思路想法不一样,开发的接口也是各式各样的,如果想要统一的话,必须是提前团队已经 ...
- Appium+python自动化(四十)-Appium自动化测试框架综合实践 - 代码实现(超详解)
1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.由于时间的关系,宏哥这里用代码给小伙伴演示两个模块:注册和登录. 2.业务模块封装 因为现在各种APP的层出不群 ...
- Appium+python自动化(三十八) - Appium自动化测试框架综合实践 - 框架简介-助你冲击高薪,迎娶白富美(超详解)
简介 好久没有更新博客了,博友们是不是有点等不及了.不好意思啊,中秋节过后太忙了,这篇是好不容易抽点零碎时间写的.从这一篇开始小伙伴或者童鞋们,就跟随宏哥的脚步,一步步的从无到有,从0到1的搭建一个完 ...
- Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)
简介 经过一段时间的准备,完善的差不多了,继续分享有关Appium自动化测试框架综合实践.想必小伙伴们有点等不及了吧! driver配置封装 kyb_caps.yaml 配置表 参考代码 platfo ...
- 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)
1.简介 为了方便查看和归档:(1)不同包的日志可能要放到不同的文件中,如service层和dao层的日志:(2)不同日志级别:调试.信息.警告和错误等也要分文件输出.所以宏哥今天主要介绍和分享的是: ...
- Appium+python自动化(八)- 初识琵琶女Appium(千呼万唤始出来,犹抱琵琶半遮面)- 下(超详解)
简介 通过上一篇宏哥给各位小伙伴们的引荐,大家移动对这位美女有了深刻的认识,而且她那高超的技艺和婀娜的身姿久久地浮现在你的脑海里,是不是这样呢???不要害羞直接告诉宏哥:是,就对了.宏哥要的就是这个 ...
随机推荐
- Ubuntu和开发板用网线直连ping不通的问题
我装的Ubuntu 18.04双系统,在通过网络加载内核和文件系统那一步一直连接不上,uboot里面ping我的主机IP地址,提示: ping failed; host 192.168.1.111 i ...
- 域渗透基础之Windows 2012创建域控制器
创建备份域控制器 这里就拿windows 2012 R2来当备份域控 如果一个域内有多个域控制器,可以有如下好处. 提高用户登录的效率:如果同时有多台域控制器对客户提供服务,可以分担审核用户登录身份( ...
- vc++中输入表的免杀
国外的杀毒软件一般会把特征码定位在PE文件的输入表函数(也就是源码里我们调用了的API函数)上, 我们对付这种查杀的方法就是在源码里对API函数进行动态调用,对一个函数动态调用之后,本来以输入 表函数 ...
- opencv::opencv_createsamples.exe
opencv_createsamples.exe 用来生成正样本vec的,用来准备训练用的正样本数据和测试数据.他的输出为以 *.vec 为扩展名的文件,该文件以二进制方式存储图像. Usage: o ...
- opencv::模糊图像
Smooth/Blur 是图像处理中最简单和常用的操作之一,使用该操作的原因之一就为了给图像预处理时候减低噪声 使用Smooth/Blur操作其背后是数学的卷积计算,通常这些卷积算子计算都是线性操作, ...
- HDU 3371 Connect the Cities(并查集+Kruskal)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=3371 思路: 这道题很明显是一道最小生成树的题目,有点意思的是,它事先已经让几个点联通了.正是因为它先 ...
- MFC中如何分割CString类型的数据
[才疏学浅,难免有纰漏,若有不正确的地方,欢迎指教] MFC中有一个库函数 Tokenize(); 函数原型:CStringT Tokenize( PCXSTR pszTokens , int& ...
- dubbo集成zookeeper rpc远程调用
注:下面使用dubbo依赖的是zookeeper注册中心,这里没有详细的介绍.在配置之前,请自行准备好zookeeper环境. 后续如果写zookeeper的配置会补放链接 添加Gradle依赖 co ...
- 安装实时查看日志工具 log.io
官网:http://logio.org/ 一.环境 [root@centos ~]# cat /etc/system-release CentOS release 6.5 (Final) [root@ ...
- 暑期集训20190730 取模(mod)
[题目描述] 给定一个长度为n的非负整数序列a,你需要支持以下操作: 1:给定l,r,输出a[l]+a[l+1]+…+a[r]. 2:给定l,r,x,将a[l],a[l+1],…,a[r]对x取模. ...