学过编程的伙伴们都知道,数据不仅可以从代码中读取,还可以从文件中读取。

今天小编就简要的介绍一下从文件中读取数据,并应用到自动化测试中方法。

先来展示下接下来将要用到的文件在项目中的结构

  • 从txt文件

首先准备一个txt文件,这个文件中存放一些关键字,中英文数字什么的随便,小编要从文件中读取这些数据并且用百度搜索这些数据

【data.txt】

selenium
追光者
5211314
www.iqiyi,com
琅琊榜之风气长林

使用百度搜索引擎自动搜索以上内容

#以utf-8的编码、只读的形式打开文件
data=open(".\data\search_key.txt","r",encoding="utf-8")
#读取每一行的数据内容
values=data.readlines()
#读取完成后关闭文件
data.close()
#遍历读取到的内容,将每次遍历的结果使用百度搜索
for value in values:
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys(value)
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()
print(value)

上述为最基础的内容,我们也可以在一行中保存多个关键字,使用特定的符号分割开来

【more_key.txt】

张三,zhangsan,123
李四,lisi,qwe
王五,wangwu,1e44te
赵六.zhaoliu,22332
白七七,baiqiqi,%^&*(%^&*

接下来小编只介绍如何读取这个文件的内容,至于如何在自动化测试中使用这种方法,请各位小伙伴参考上一份代码自行理解

data=open(".\data\more_key.txt","r",encoding="utf-8")
values=data.readlines()
data.close() for value in values:
#文件中每一个关键字之间使用“,”隔开,因此在代码中也使用“,”来区分不同的关键字
cn_name=value.split(",")[0]
print(cn_name)
en_name=value.split(",")[1]
print(en_name)
other=value.split(",")[2]
print(other)

运行结果如下:

  • 从csv文件

准备csv文件,可以使用Excel的“新建”“另存为”功能将文件保存为csv文件,但不要使用直接更改excel后缀名的方式,这种方法创建出来的不是真正的csv文件

同样的,小编只介绍读取csv文件的方法

#导入csv包
import csv #with open()打开文件,既执行了打开文件,同时在方法结束后自动关闭文件,免去了我们忘记关闭文件的错误
with open(".\data\csv_data.csv","r") as f:
#读取csv文件
values=csv.reader(f)
print("打印产品信息、测试信息")
for value in values:
print(value[0], value[3])

执行结果如下

  • 从xml文件

准备xml文件【myxml.xml】

<?xml version="1.0" encoding="utf-8"?>
<country name="China" value="">
<city name="北京">
<town>朝阳 </town>
<town>东城 </town>
<town>密云</town>
</city>
<city name="河北">
<town>石家庄 </town>
<town>保定</town>
<town>雄安</town>
</city>
<city name="陕西">
<town>西安</town>
<town>咸阳</town>
</city>
<city name="山西" weather="wind">
<town name="太原">
太原
<love>煤</love>
</town>
<town>大同</town>
</city>
<city name="unknown">UnKnown</city>
</country>

1、打开xml文件

#导入xml的包
import xml.dom.minidom
#打开xml文件
xml_file=xml.dom.minidom.parse('.\data\myxml.xml')
xml.dom.minidom用来处理xml文件,parse可以打开xml文件

2、获取根元素标签信息

每个<xx></xx>构成一个节点,每个节点都有自己的nodeName(节点名称),nodeValue(节点值,只对文本文档有效),nodeType(节点类型)

用documentElemet将xml_file对象的文档信息传递到root中,通过root来调取结点信息

#获得文档元素对象
root=xml_file.documentElement
print(root.nodeName)
print(root.nodeValue)
print(root.nodeType)

执行结果如下:

3、获得任意标签名

此处我们需要使用一个方法:getElementByTagName("tageName_xxx")

这个方法会扫描整个xml文件,将所有标签名为tageName_xxx的节点放到一个数组中,通过索引号进行调取。

citys[4]表示一组city的标签中的第5个,序号从0开始,注意数组的越界问题

#获取任意标签名
root=xml_file.documentElement
citys=root.getElementsByTagName("city")
print(citys[4].tagName)
tags=root.getElementsByTagName("town")
print(tags[2].tagName)
tags=root.getElementsByTagName("love")
print(tags[0].tagName)

4、获得标签的属性值

获取city标签的属性值name.weather

#获取标签的属性值
root=xml_file.documentElement
#获得一组city的标签
citys=root.getElementsByTagName("city")
#获取第4个城市的name、weather属性值
city_name=citys[3].getAttribute("name")
city_weather=citys[3].getAttribute("weather")
print(city_name,city_weather)

运行结果如下:

5、获得标签对之间的数据

#获取第10个towm的数据
towns=root.getElementsByTagName("town")
towm_name=towns[9].firstChild.data
print(towm_name)

firstChild选项返回的是该节点的第一个子结点,data表示该子节点的数据

运行结果如下:

经整理之后的源代码奉上,敬请指正

#导入xml的包
import xml.dom.minidom
#打开xml文件
xml_file=xml.dom.minidom.parse('.\data\myxml.xml') #获得文档元素对象
print("以下为文档根元素的信息")
root=xml_file.documentElement
print(root.nodeName)
print(root.nodeType) print("获取任意标签名")
tags=root.getElementsByTagName("city")
print(tags[4].tagName)
tags=root.getElementsByTagName("town")
print(tags[2].tagName)
tags=root.getElementsByTagName("love")
print(tags[0].tagName) print("获取标签的属性值")
#获得一组city的标签
citys=root.getElementsByTagName("city")
#获取第4个城市的name、weather属性值
city_name=citys[3].getAttribute("name")
city_weather=citys[3].getAttribute("weather")
print(city_name,city_weather) print("获取第标签之间的数据")
towns=root.getElementsByTagName("town")
towm_name=towns[9].firstChild.data
print(towm_name)

XML_data

Python自动化测试框架——数据驱动(从文件中读取)的更多相关文章

  1. Python自动化测试框架——数据驱动(从代码中读取)

    今天小编要介绍的是数据驱动最简单和最常用的一种方法,由于只是介绍方法,代码操作后的美观程度略有缺陷,介意者可以自行改动 还是以163邮箱登录为例: 设计一个存放数据的类,这个类的参数是我们需要修改的数 ...

  2. Python学习笔记之从文件中读取数据

    10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python 知识,其中每一行都以“In Python you can”打头.将这个文件命名为learnin ...

  3. python webdriver 测试框架-数据驱动json文件驱动的方式

    数据驱动json文件的方式 test_data_list.json: [ "邓肯||蒂姆", "乔丹||迈克尔", "库里||斯蒂芬", & ...

  4. 【Python】从文件中读取数据

    从文件中读取数据 1.1 读取整个文件 要读取文件,需要一个包含几行文本的文件(文件PI_DESC.txt与file_reader.py在同一目录下) PI_DESC.txt 3.1415926535 ...

  5. Python从文件中读取字符串,用正则表达式匹配中文字符的问题

    2013-07-27 21:01:37|           在Windows下,用Python从.txt文件中读取字符串,并用正则表达式匹配中文,在网上看了方法,用的时候发现中文没有被匹配.     ...

  6. 用Python的pandas框架操作Excel文件中的数据教程

    用Python的pandas框架操作Excel文件中的数据教程 本文的目的,是向您展示如何使用pandas 来执行一些常见的Excel任务.有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其 ...

  7. 【转】推荐4个不错的Python自动化测试框架

    之前,开发团队接手一个项目并开始开发时,除了项目模块的实际开发之外,他们不得不为这个项目构建一个自动化测试框架.一个测试框架应该具有最佳的测试用例.假设(assumptions).脚本和技术来运行每一 ...

  8. spring 框架的xml文件如何读取properties文件数据

    spring 框架的xml文件如何读取properties文件数据 第一步:在spring配置文件中 注意:value可以多配置几个properties文件 <bean id="pro ...

  9. Python3实现从文件中读取指定行的方法

    from:http://www.jb51.net/article/66580.htm 这篇文章主要介绍了Python3实现从文件中读取指定行的方法,涉及Python中linecache模块操作文件的使 ...

随机推荐

  1. TTM-To the moon

    传送门 查询历史版本,回到历史版本,这个题目显然是用主席树,好像就没了! 但是这里的修改是区间修改,众所周知主席树的空间复杂度是\(nlog(n)\)的,区间修改会导致主席树的开点到达一个相当恐怖的数 ...

  2. Java - Class版本号和UnsupportedClassVersionError

    问题分析 Java是向下兼容的,每一个jdk版本都有对应的class版本号(major + minor version numbers):如果用低版本的jvm去加载高版本jdk编译的类,就会报错:ja ...

  3. ie img 3px bug

    ie img 3px bug 日期:2008-11-22 分类:CSS ie img 有 3px 的缝隙也是 ie 的经典 bug 之一,相信已经不陌生了,但还是先看看效果吧(也许你并没有见过): 效 ...

  4. js中的同步和异步的个人理解(转)

    你应该知道,javascript语言是一门“单线程”的语言,不像java语言,类继承Thread再来个thread.start就可以开辟一个线程,所以,javascript就像一条流水线,仅仅是一条流 ...

  5. jmeter diff测试(调用JAR包处理)

    1.准备接口数据(对比字段,即json数据中需要提取的key对应的值进行对比) 2.配置获取EXCEL数据 3.新建线程,并建两个http请求,分别用于请求新旧接口 4.提取需要对比的内容 5.赋值变 ...

  6. Qt 2D绘图之四:绘图中的其他问题

    一.重绘事件 前面讲到的所有绘制操作都是在重绘事件处理函数paintEvent()中完成的,是QWidget类中定义的函数.一个重绘事件用来重绘一个部件的全部或者部分区域,下面几个原因中的任意一个都会 ...

  7. 使用express+mongoDB搭建多人博客 学习(5)权限控制

    修改index.js如下: var express = require('express'); var router = express.Router(); var crypto=require('c ...

  8. Bridges Gym - 100712H  无向图的边双连通分量,Tarjan缩点

    http://codeforces.com/gym/100712/attachments 题意是给定一个无向图,要求添加一条边,使得最后剩下的桥的数量最小. 注意到在环中加边是无意义的. 那么先把环都 ...

  9. python_14(js)

    第1章 图片方法 1.1 设置背景图:1.2 背景图问题:1.3 background-repeat; noa-repe 1.4 background-attachment: fixed1.5 bac ...

  10. hdu2475Box(splay树形转线性)

    链接 推荐一篇帖子 http://blog.csdn.net/lyhypacm/article/details/6734748 这题暴力不可行主要是因为这颗树可能极度不平衡,不能用并查集是不能路径压缩 ...