基于Python的Web自动化(Selenium)之读取文件
简单介绍
关于数据驱动的形式有很多,我们既可以通过定义变量的方式进行参数化,也可以通过定义数组、字典方式进行参数化,还可以通过读取文件(txt\csv\xml)的方式进行参数化。下面简单介绍下如何读取txt和csv格式,xml在测试过程中好像用的少(可能是我的测试还不够丰富,等有时间也介绍下xml的读取方式)。
实际操作
一、读取txt格式
关于txt格式文件读取,这里不再赘述,可以参考Python三种读取文件方式这篇文章。着重强调一下格式。注意,我们在存储数据的时候为了方便后续读取需要的数据就必须使用特殊的一个符号区分每个不同数据的意义。比如我们需要对“username”和“password”两个字段进行测试,我们就需要在txt文件中构造关于这两个字段的数据。
这里创建了三组测试数据,都是用“,”隔开,然后我们根据读取到的数据使用“split”方法根据“,”进行分隔数据,然后再取数据存入变量中使用。当然这个特殊符号根据自己喜好自定,当然使用一下方便好记的符号最好。
二、读取csv格式
如果现在需要测试一组数据包括用户名、年龄、性别、邮箱等信息,此时再使用txt显得有点不方便了。我们可以使用通过创建csv格式文件,读取方式使用csv模块的reader()方法读取,然后通过for循环遍历文件中的数据。
1、遍历每一行数据
代码:
# -*- coding: utf-8 -*-
'''
@author: April_Chou
@time: 2018/4/16 20:54
'''
import csv
user_file = csv.reader(open('D:/WorkSpace2/seleniumTest/4/info.csv','r'))
for line in user_file:
print(line)
结果:
['姓名', '年龄', '学号']
['Python', '3', '1']
['Java', '4', '2']
['Ruby', '5', '3']
2、获取某一列数据
代码:
# -*- coding: utf-8 -*-
'''
@author: April_Chou
@time: 2018/4/16 20:54
'''
import csv
user_file = csv.reader(open('D:/WorkSpace2/seleniumTest/4/info.csv','r'))
for line in user_file:
print(line[0])
结果:
姓名
Python
Java
Ruby
三、读取xml格式
有时候读取的数据格式是不规则的,比如在配置一个xml文件配置自动化脚本的URL、浏览器、登陆用户名和密码等,这时候就需要读取xml文件。首先导入xml的minidom模块,用来处理XML文件,使用parse()方法打开一个XML文件,documentElement用于得到XML文件的唯一根元素,getElementeByTagName()可以通过标签名称获取标签,若标签有多个,则可以通过指定数组的下标方式获取某个具体标签,使用getAttribute()方法获取元素的属性值,使用firstChild属性返回被选节点的一个子节点,使用data获取该节点的数据。
文件:
代码:
# -*- coding: utf-8 -*-
'''
@author: April_Chou
@time: 2018/4/17 7:45
'''
from xml.domimport minidom
# 打开xml文件
dom = minidom.parse('D:\\WorkSpace2\\seleniumTest\\4\\info.xml')
# 得到文档元素对象
root = dom.documentElement
logins = root.getElementsByTagName('login')
# 获取login标签的username属性值
username = logins[0].getAttribute('username')
print(username)
# 获取login标签的password属性值
password = logins[0].getAttribute('password')
print(password)
# 得到文档元素对象
provinces = root.getElementsByTagName('province')
# 获取第一个province标签对的值
p1 = provinces[0].firstChild.data
print(p1)
# 得到文档元素对象
cities = root.getElementsByTagName('city')
# 获取第一个city标签对的值
c1 = cities[0].firstChild.data
print(c1)
结果:
admin
123456
北京
深圳