Appium自动化测试框架综合实践案例代码之data数据封装
[i[id_903984274]_805518269]id_[id_2093062662]548409262]

本篇章接着上一篇继续分享 Appium 自动化测试框架综合实践案例的代码。框架所需的代码实现已基本完成。
data数据封装
1.使用背景
在实际项目过程里,我们的数据或许会存储于一个数据文件内,像是 txt 文件、excel 文件以及 csv 文件这类类型。我们能够封装一些方法,用以读取文件里的数据,从而达成数据驱动。
2.案例
将测试账号存储在account.csv文件,如下:
account.csv
hg2018hg2018
hg2019
zxw2019
666
222
代码:
3.enumerate()简介
enumerate()是 python 的内置函数
4.enumerate()使用
对于一个列表,当既要遍历其索引又要遍历其元素时,首先可以这样去写:
上述方法存在一定的繁琐性,而使用 enumerate() 则会更加直接且优美。
数据读取方法封装
数据读取方法属于公共方法。在此,我们先将其实现,接着便可将其封装到内部。
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)
2.封装
把它封装到公共方法里,当在其他地方需要用到时,直接进行导入并调用就行。
utf-8 与 utf-8-sig 两种编码格式的区别
然而,UTF-8 with BOM 也就是 utf-8-sig 是需要提供 BOM 的。
config 文件配置
各种配置文件都放在这个目录下。
日志文件配置 ,主要是一些日志信息的配置。
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
测试用例封装
这里举例演示一下:封装注册和登录两个测试用例。
1.测试用例执行开始结束操作封装
测试用例的执行开始和结束被封装起来了。其他模块如果需要用到,直接进行导入,然后就可以调用了。
myunit.py
参考代码:
# coding=utf-8
首先进行编码的设置,utf-8 编码能够支持中英文,就像上述那样,通常放置在文件的第一行。
# 2.注释:包括记录创建时间,创建人,项目名称。
# 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()
2.注册用例
开始注册用例代码逻辑的实现。
test_register.py
参考代码:
# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
# 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(3. 开展了“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()
3.登录用例
开始登录用例代码逻辑的实现。
test_login.py
参考代码:
# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
# 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(3. “======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())
在进行测试时,由于特定原因需要跳过对 test_login_zxw2017 的测试,所以使用了 @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()
Appium 自动化测试框架至此基本完成了。下一篇将讲到执行测试用例以及生成测试报告。如果你对更多内容、Python 自动化软件测试、面试题感兴趣,可加入 175317069 一起学习。群里会发放各项测试学习资源,还有行业深潜多年的技术人进行分析讲解。
祝你能成为一名优秀的软件测试工程师!