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 自动化测试框架就差下一篇就全部完成了, 聪明的你都懂了吗??? 嘿嘿! 慢慢地来吧.
下节预告
下一篇, 讲解执行测试用例, 生成测试报告, 以及自动化平台, 请关注宏哥, 敬请期待!!!
来源: https://www.cnblogs.com/du-hong/p/11496609.html