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

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

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

  • 从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. ubuntu 安装 RPostgreSQL 库

    其实大家在Linux 的R 中安装其他库,完全可以使用R 自带的安装方式,只是这个 RPostgreSQL 库需要用到 postgresql 的lib 库与include 头文件,所以才有若干个步骤去 ...

  2. Java并发编程,互斥同步和线程之间的协作

    互斥同步和线程之间的协作 互斥同步 Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第一个是 JVM 实现的 synchronized,而另一个是 JDK 实现的 ReentrantLo ...

  3. CentOS7下使用Docker容器化.net Core 2.2

    一.使用 yum 安装(CentOS 7下) Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 una ...

  4. getpass不起作用

    #! /usr/bin/env python# -*- coding:utf-8 -*- # login 模块中登录时输入密码,想用getPass模块实现密码的不回显操作.#如下: import ge ...

  5. 转 造成ORA-01843 无效的月份的一些原因

  6. corn表达式 经典

    https://www.cnblogs.com/GarfieldTom/p/3746290.html

  7. 我的NopCommerce之旅(3): 系统代码结构分析

    一.概述 基于MVC 二.详细描述 \Libraries\Nop.Core 核心类,包括缓存.事件.帮助类.业务对象(订单.客户实体) \Libraries\Nop.Data 数据访问层,采用Enti ...

  8. BeanUtils 工具类

    一.BeanUtils 概述     BeanUtils 是阿帕奇提供的一套专门用于将一些数据封装到java对象中的工具类;          名词:javaBean:特定格式的java类称为java ...

  9. iOS组件化开发· 什么是组件化

    越来越多公司,开始了组件化,你还要等到什么时候...... 说到开发模式,我们最熟知的开发模式 MVC 或者最近比较热门的MVVM.但是我今天说的组件化的开发,其实MVC不是一类的.它其实是····· ...

  10. vue.js与react.js相比较的优势

    vue.js的简介 vue.js是一个javascript mvvm库,它是以数据驱动和组件化的思想构建的.我们平时多用js去操作dom,vue.js则是使用了数据绑定驱动来操作dom的,也就是说创建 ...