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()使用

如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:

参考代码
  1. list = ["这", "是", "一个", "测试","数据"]
  2.  
  3. for i in range(len(list)):
  4.  
  5. print(i,list[i])

上述方法有些累赘,利用enumerate()会更加直接和优美:

参考代码
  1. list1 = ["这", "是", "一个", "测试","数据"]
  2.  
  3. for index, item in enumerate(list1):
  4.  
  5. print(index,item)

3.数据读取方法封装

  数据读取方法也属于公共方法,这里我们首先实现一下,然后将其封装到里边即可。

3.1数据读取方法实现的参考代码

  1. import csv
  2.  
  3. def get_csv_data(csv_file,line):
  4.  
  5. with open(csv_file, 'r', encoding='utf-8-sig') as file:
  6.  
  7. reader=csv.reader(file)
  8.  
  9. for index, row in enumerate(reader,1):
  10.  
  11. if index == line:
  12.  
  13. return row
  14.  
  15. csv_file='../data/account.csv'
  16.  
  17. data=get_csv_data(csv_file,3)
  18.  
  19. 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

参考代码
  1. [loggers]
  2. keys=root,infoLogger
  3.  
  4. [logger_root]
  5. level=DEBUG
  6. handlers=consoleHandler,fileHandler
  7.  
  8. [logger_infoLogger]
  9. handlers=consoleHandler,fileHandler
  10. qualname=infoLogger
  11. propagate=0
  12.  
  13. [handlers]
  14. keys=consoleHandler,fileHandler
  15.  
  16. [handler_consoleHandler]
  17. class=StreamHandler
  18. level=INFO
  19. formatter=form02
  20. args=(sys.stdout,)
  21.  
  22. [handler_fileHandler]
  23. class=FileHandler
  24. level=INFO
  25. formatter=form01
  26. args=('../logs/runlog.log', 'a')
  27.  
  28. [formatters]
  29. keys=form01,form02
  30.  
  31. [formatter_form01]
  32. format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s
  33.  
  34. [formatter_form02]
  35. format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s

6.测试用例封装

这里宏哥举例给小伙伴们演示:封装注册和登录两个测试用例。

6.1测试用例执行开始结束操作封装

测试用例执行开始和结束的封装,其他模块用到直接导入,调用即可。

myunit.py

参考代码
  1. # coding=utf-8
  2. # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  3.  
  4. # 2.注释:包括记录创建时间,创建人,项目名称。
  5. '''
  6. Created on 2019-11-20
  7. @author: 北京-宏哥 QQ交流群:707699217
  8. Project:Appium自动化测试框架综合实践 - 代码实现
  9. '''
  10. # 3.导入模块
  11. import unittest
  12. from kyb_testProject.common.desired_caps import appium_desired
  13. import logging
  14. from time import sleep
  15.  
  16. class StartEnd(unittest.TestCase):
  17. def setUp(self):
  18. logging.info('=====setUp====')
  19. self.driver=appium_desired()
  20.  
  21. def tearDown(self):
  22. logging.info('====tearDown====')
  23. sleep(5)
  24. self.driver.close_app()

6.2注册用例

开始注册用例代码逻辑的实现。

test_register.py

参考代码
  1. # coding=utf-8
  2. # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  3.  
  4. # 2.注释:包括记录创建时间,创建人,项目名称。
  5. '''
  6. Created on 2019-11-20
  7. @author: 北京-宏哥 QQ交流群:707699217
  8. Project:Appium自动化测试框架综合实践 - 代码实现
  9. '''
  10. # 3.导入模块
  11. from kyb_testProject.common.myunit import StartEnd
  12. from kyb_testProject.businessView.registerView import RegisterView
  13. import logging,random,unittest
  14.  
  15. class RegisterTest(StartEnd):
  16. def test_user_register(self):
  17. logging.info('======test_user_register======')
  18. r=RegisterView(self.driver)
  19.  
  20. username = 'bjhg2019' + 'fly' + str(random.randint(1000, 9000))
  21. password = 'bjhg2020' + str(random.randint(1000, 9000))
  22. email = 'bjhg' + str(random.randint(1000, 9000)) + '@163.com'
  23.  
  24. self.assertTrue(r.register_action(username,password,email))
  25.  
  26. if __name__ == '__main__':
  27. unittest.main()

6.3登录用例

开始登录用例代码逻辑的实现。

test_login.py

参考代码
  1. # coding=utf-8
  2. # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  3.  
  4. # 2.注释:包括记录创建时间,创建人,项目名称。
  5. '''
  6. Created on 2019-11-13
  7. @author: 北京-宏哥 QQ交流群:707699217
  8. Project:Appium自动化测试框架综合实践 - 代码实现
  9. '''
  10. # 3.导入模块
  11. from kyb_testProject.common.myunit import StartEnd
  12. from kyb_testProject.businessView.loginView import LoginView
  13. import unittest
  14. import logging
  15.  
  16. class TestLogin(StartEnd):
  17. csv_file='../data/account.csv'
  18.  
  19. @unittest.skip('test_login_zxw2018')
  20. def test_login_zxw2018(self):
  21. logging.info('======test_login_zxw2018=====')
  22. l=LoginView(self.driver)
  23. data=l.get_csv_data(self.csv_file,2)
  24.  
  25. l.login_action(data[0],data[1])
  26. self.assertTrue(l.check_loginStatus())
  27.  
  28. # @unittest.skip('skip test_login_zxw2017')
  29. def test_login_zxw2017(self):
  30. logging.info('======test_login_zxw2017=====')
  31. l=LoginView(self.driver)
  32. data = l.get_csv_data(self.csv_file, 1)
  33.  
  34. l.login_action(data[0], data[1])
  35. self.assertTrue(l.check_loginStatus())
  36.  
  37. @unittest.skip('test_login_error')
  38. def test_login_error(self):
  39. logging.info('======test_login_error=====')
  40. l = LoginView(self.driver)
  41. data = l.get_csv_data(self.csv_file, 3)
  42.  
  43. l.login_action(data[0], data[1])
  44. self.assertTrue(l.check_loginStatus(),msg='login fail!')
  45.  
  46. if __name__ == '__main__':
  47. unittest.main()

7.小结

到此,Appium自动化测试框架就差下一篇就全部完成了,聪明的你都懂了吗???嘿嘿!慢慢地来吧。

下节预告

下一篇,讲解执行测试用例,生成测试报告,以及自动化平台,请关注宏哥,敬请期待!!!

Appium+python自动化(四十一)-Appium自动化测试框架综合实践 - 即将落下帷幕(超详解)的更多相关文章

  1. Appium+python自动化(四十二)-Appium自动化测试框架综合实践- 寿终正寝完结篇(超详解)

    1.简介 按照上一篇的计划,今天给小伙伴们分享执行测试用例,生成测试报告,以及自动化平台.今天这篇分享讲解完.Appium自动化测试框架就要告一段落了. 2.执行测试用例&报告生成 测试报告, ...

  2. Appium+python自动化(十三)- 输入中文 - 一次填坑记(超详解)

    简介 无论你在哪里,在做什么都会遇到很多坑,这些坑有些事别人挖的,有些是自己挖的.别人挖的叫坑人,自己挖的叫自杀,儿子挖的叫坑爹.因此在做app自动化道路上也不会是一帆风顺的,你会踩很多坑,这些坑和你 ...

  3. Appium+python自动化(十三)- 与Capability完美懈垢之解读(超详解)

    简介 Capability又叫Appium Desired Capabilities,前边写了那么多实例代码,小伙伴可以发现一些规律,就是有一部分代码总是重复的出现在你的视线中.这部分就是对Capab ...

  4. python接口自动化(四十一)- 发xml格式参数的post请求(超详解)

    简介 最近在工作中,遇到一种奇葩的接口,它的参数数据是通过xml,进行传递的,不要大惊小怪的,林子大了什么鸟都有,每个人的思路想法不一样,开发的接口也是各式各样的,如果想要统一的话,必须是提前团队已经 ...

  5. Appium+python自动化(四十)-Appium自动化测试框架综合实践 - 代码实现(超详解)

    1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.由于时间的关系,宏哥这里用代码给小伙伴演示两个模块:注册和登录. 2.业务模块封装 因为现在各种APP的层出不群 ...

  6. Appium+python自动化(三十八) - Appium自动化测试框架综合实践 - 框架简介-助你冲击高薪,迎娶白富美(超详解)

    简介 好久没有更新博客了,博友们是不是有点等不及了.不好意思啊,中秋节过后太忙了,这篇是好不容易抽点零碎时间写的.从这一篇开始小伙伴或者童鞋们,就跟随宏哥的脚步,一步步的从无到有,从0到1的搭建一个完 ...

  7. Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)

    简介 经过一段时间的准备,完善的差不多了,继续分享有关Appium自动化测试框架综合实践.想必小伙伴们有点等不及了吧! driver配置封装 kyb_caps.yaml 配置表 参考代码 platfo ...

  8. 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)

    1.简介 为了方便查看和归档:(1)不同包的日志可能要放到不同的文件中,如service层和dao层的日志:(2)不同日志级别:调试.信息.警告和错误等也要分文件输出.所以宏哥今天主要介绍和分享的是: ...

  9. Appium+python自动化(八)- 初识琵琶女Appium(千呼万唤始出来,犹抱琵琶半遮面)- 下(超详解)

    ​简介 通过上一篇宏哥给各位小伙伴们的引荐,大家移动对这位美女有了深刻的认识,而且她那高超的技艺和婀娜的身姿久久地浮现在你的脑海里,是不是这样呢???不要害羞直接告诉宏哥:是,就对了.宏哥要的就是这个 ...

随机推荐

  1. Ubuntu和开发板用网线直连ping不通的问题

    我装的Ubuntu 18.04双系统,在通过网络加载内核和文件系统那一步一直连接不上,uboot里面ping我的主机IP地址,提示: ping failed; host 192.168.1.111 i ...

  2. 域渗透基础之Windows 2012创建域控制器

    创建备份域控制器 这里就拿windows 2012 R2来当备份域控 如果一个域内有多个域控制器,可以有如下好处. 提高用户登录的效率:如果同时有多台域控制器对客户提供服务,可以分担审核用户登录身份( ...

  3. vc++中输入表的免杀

    国外的杀毒软件一般会把特征码定位在PE文件的输入表函数(也就是源码里我们调用了的API函数)上, 我们对付这种查杀的方法就是在源码里对API函数进行动态调用,对一个函数动态调用之后,本来以输入 表函数 ...

  4. opencv::opencv_createsamples.exe

    opencv_createsamples.exe 用来生成正样本vec的,用来准备训练用的正样本数据和测试数据.他的输出为以 *.vec 为扩展名的文件,该文件以二进制方式存储图像. Usage: o ...

  5. opencv::模糊图像

    Smooth/Blur 是图像处理中最简单和常用的操作之一,使用该操作的原因之一就为了给图像预处理时候减低噪声 使用Smooth/Blur操作其背后是数学的卷积计算,通常这些卷积算子计算都是线性操作, ...

  6. HDU 3371 Connect the Cities(并查集+Kruskal)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=3371 思路: 这道题很明显是一道最小生成树的题目,有点意思的是,它事先已经让几个点联通了.正是因为它先 ...

  7. MFC中如何分割CString类型的数据

    [才疏学浅,难免有纰漏,若有不正确的地方,欢迎指教] MFC中有一个库函数 Tokenize(); 函数原型:CStringT Tokenize( PCXSTR pszTokens , int& ...

  8. dubbo集成zookeeper rpc远程调用

    注:下面使用dubbo依赖的是zookeeper注册中心,这里没有详细的介绍.在配置之前,请自行准备好zookeeper环境. 后续如果写zookeeper的配置会补放链接 添加Gradle依赖 co ...

  9. 安装实时查看日志工具 log.io

    官网:http://logio.org/ 一.环境 [root@centos ~]# cat /etc/system-release CentOS release 6.5 (Final) [root@ ...

  10. 暑期集训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取模. ...