Robot framework--内置库xml学习(一)

Robot framework--内置库xml学习(一)

学习XML内置库,我认为需要掌握以下几个知识点:

第一:内置库的概念?有哪些内置库,大概都有什么关键字?有区分版本吗?跟RF版本有关么?为什么内置库有些需要import,有些不需要import?

第二:XML内置库使用的是python的哪个标准库?对这个标准库需要有哪些基本的了解?

第三:内置库是怎么构建起来的?基本关键字是否能灵活的使用?

第四:有时候可能需要稍微修改下内置库,比如增加一些关键字等,该怎么修改?

1、内置库的概念

  内置库在官网上称为standard library,即标准库;其他比如:seleniumlibrary、androidlibrary等,官网称为external library,即外部库,第三方库。

  (1)对于标准库,这些库直接绑定在robot framework内,在python安装目录下\lib\site-packages\robot\libraries下可以看到,无需在下载。

  (2)对于外部库,需要根据个人或者公司需要,下载之后安装导入才能使用的。

  对于标准库,又分两类,类似于builtin库是robot framework自动加载到内存的,安装后按下F5就能直接使用,不需要import;而xml库需要在再次import才能正常使用。因为BuiltIn library 提供了很多常用的关键字,比如Should Be EqualConvert To Integer等,所以RF就把这个常用的库自动加载到了内存。

不同版本的RF,支持不同的内置库而且相同的内置库里的关键字可能也是不一样的,以RF3.0(使用命令robot --version查看RF版本)为例,3.0是目前最新的RF的版本,支持很多的内置库,查看python安装目录下\Lib\site-packages\robot下的py文件,可以看到:

  

  基本官网写的10个标准库都能在这里面找到相应的py文件。BuiltIn,Collections,DateTime,Dialogs,Process,OperatingSystem,Remote(没有关键字,暂时不算在内),Screenshot,String,Telnet,XML.这11个库,有些是在RF2.0的时候就已经有了的,最晚的DateTime,Process,XML是在RF2.8之后才内置的,也就是说如果当前使用的是RF2.8之前的版本,内置库是无法直接import XML就是使用的,需要下载安装才能使用,这点需要注意下,不同的RF版本,相同的标准库之间也是会细微的区别,这需要仔细的去查看保准库内每个版本的使用文档。

2、11个标准库的简介

这个表的来源是来自官网的,官网的用户手册文档已经描述的非常详细了。学习的时候可以详细的查看官网的相关文档。

3、XML内置库的学习

    从内置库的XML的源码可以看出,RF使用的是ETree来对xml进行解析的,部分源码如下:

 1 import copy
 2 import re
 3 import os
 4
 5 try:
 6     from lxml import etree as lxml_etree
 7 except ImportError:
 8     lxml_etree = None
 9
10 from robot.api import logger
11 from robot.libraries.BuiltIn import BuiltIn
12 from robot.utils import (asserts, ET, ETSource, is_string, is_truthy,
13                          plural_or_not as s)
14 from robot.version import get_version
15
16
17 should_be_equal = asserts.assert_equal
18 should_match = BuiltIn().should_match
19
20
21 class XML(object):
22  ROBOT_LIBRARY_SCOPE = ‘GLOBAL‘
23     ROBOT_LIBRARY_VERSION = get_version()
24     _xml_declaration = re.compile(‘^<\?xml .*\?>‘)
25   def __init__(self, use_lxml=False):
26     use_lxml = is_truthy(use_lxml)
27         if use_lxml and lxml_etree:
28             self.etree = lxml_etree
29             self.modern_etree = True
30             self.lxml_etree = True
31         else:
32             self.etree = ET
33             self.modern_etree = ET.VERSION >= ‘1.3‘
34             self.lxml_etree = False
35         if use_lxml and not lxml_etree:
36             logger.warn(‘XML library reverted to use standard ElementTree ‘
37                         ‘because lxml module is not installed.‘)
38
39
40   def parse_xml(self, source, keep_clark_notation=False):
41    with ETSource(source) as source:
42             tree = self.etree.parse(source)
43         if self.lxml_etree:
44             strip = (lxml_etree.Comment, lxml_etree.ProcessingInstruction)
45             lxml_etree.strip_elements(tree, *strip, **dict(with_tail=False))
46         root = tree.getroot()
47         if not is_truthy(keep_clark_notation):
48             NameSpaceStripper().strip(root)
49         return root

  python提供了几个标准库都可以对xml进行解析,之前我使用的是DOM,基于RF使用的是ETree,便开始学习了下ETree的开发文档。学习对XML文件的操作,那肯定也得对XML本身有最基本的了解,比如XML的用途,树结构,节点类型(DOM),带命名空间的xml。下面是部分的知识点的总结:

xml是一种可扩展的标记语言。要求标记需要成对的出现(有时候会进行简写<b/>)。一个典型的xml文档如下所示:

 1 <example>
 2   <first id="1">text</first>
 3   <second id="2">
 4     <child/>
 5   </second>
 6   <third>
 7     <child>more text</child>
 8     <second id="child"/>
 9     <child><grandchild/></child>
10   </third>
11 </example>

A. 整个xml文档是一个文档节点,属于根节点,比如上述文档的<example>节点就是一个根节点,一个xml文件只能有一个根节点,否则解析的时候胡报错的

B.每个 XML 标签是一个元素节点,比如<first> 和<second>, <third>都属于元素节点,却属于<example>的子节点。

C.attribute值:表示节点元素的属性值,比如first 有一个属性id,属性值为1;second也有id属性,属性值为2,而third没有属性。

D.Text值:表示元素中的文本内容。比如:first 的text值就为1;second没有,third也没有;

一个xml还包含其他的内容:比如处理指令和一些注释;在python的etree标准库解析的过程中,是直接把这二个给剔除掉了。有兴趣的可以根据官网给出的开发文档,把常用的一些方法都敲一遍,主要的还是使用2个类 Element Objects和ElementTree Objects。

4、xml官网学习

 1 XML
 2
 3 Library version:    3.0.2
 4 Library scope:    global
 5 Named arguments:    supported
 6 Introduction
 7
 8 Robot Framework test library for verifying and modifying XML documents.
 9 As the name implies, XML is a test library for verifying contents of XML files. In practice it is a pretty thin wrapper on top of Python‘s ElementTree XML API.
10 The library has the following main usages:
11 Parsing an XML file, or a string containing XML, into an XML element structure and finding certain elements from it for for further analysis (e.g. Parse XML and Get Element keywords).
12 Getting text or attributes of elements (e.g. Get Element Text and Get Element Attribute).
13 Directly verifying text, attributes, or whole elements (e.g Element Text Should Be and Elements Should Be Equal).
14 Modifying XML and saving it (e.g. Set Element Text, Add Element and Save XML).
15 Table of contents
16 Parsing XML
17 Using lxml
18 Example
19 Finding elements with xpath
20 Element attributes
21 Handling XML namespaces
22 Boolean arguments
23 Shortcuts
24 Keywords

  

时间: 2024-11-09 10:20:58

Robot framework--内置库xml学习(一)的相关文章

Robot Framework 内置变量

转自:https://blog.csdn.net/qq_26886929/article/details/53907755 Robot Framework 内部提供了一下直接可用的内置变量 1. 操作系统相关变量 内置的操作系统相关的变量,减少了测试数据对操作系统之间的差异性的关注 RF 中可用的操作系统相关的内置变量如下表: 变量 用途 ${CURDIR} 测试数据文件所在目录的绝对路径,该参数是大小写敏感的 ${TEMPDIR} 操作系统临时目录的绝对路径,在类 Unix 系统中,该路径通常

RF内置库-----内置库的学习过程总结

前段时间充忙的学习RF,系统学习完之后就开始动手做各种接口的测试,虽然各类的接口测试基本能跑通了,但是重复造车的问题存在太明显.RF本身内置库就已经比较丰富,比如不需要import直接就加载到内存的BuiltIn库,还有需要import的常用模块String,Collections,XML库.在前面的接口测试中,使用最多的就是这几个内置库,接口返回的数据基本都是xml格式的居多,然后自己也重复造车了,为此特地花了几天时间去学习了下内置库,主要还是学了下XML库,以下的分享都是基于XML库. 学习

Robot Framework自定义测试库的作用域的理解

robot framework中,强大的测试库api支持,用户可根据实际需求定义测试库,导入后可使用自定义库中相应的关键字. 当自定义的测试库是类库,则需要考虑一个问题:类实例.用类实现的库可以有内部状态, 这些状态可以被关键字或构造函数修改. 因为这些状态会影响到关键字实际的行为, 所以, 保证一个测试用例不会意外地影响到另一个用例显得非常重要. 这种依赖行为有可能造成非常难定位的bug.例如, 添加了新的测试用例, 而这些用例使用库的方式并不一致. Robot Framework 为了保证测

Robot Framework(Databaselibrary库操作)

1.安装 DatabaseLibrary 库 DatabaseLibrary 下载地址:https://pypi.python.org/pypi/robotframework-databaselibrary/0.6在线文档:http://franz-see.github.io/Robotframework-Database-Library/如果像安装普通的 Python 程序,可以下载 tar.gz 文件,解压并运行 setup.py 文件进行安装. 因为在上一小节中我们已经安装了 pip,所以

【Robot Framework】BuiltIn库

作为一门表格语言,为了保持简单的结构,RF没有像别的高级语言那样提供类似if else while等内置关键字来实现各种逻辑功能,而是提供给了用户BuiltIn库.如果用户想在测试用例中实现比较复杂的逻辑,那就需要对BuiltIn中的重要关键字有一些了解.BuiltIn库中还封装了很多常见方法和能够控制RF运行状态的关键字,如果想用好RF,一定要对BuiltIn库中的函数有一个比较全面的理解.下面就带着大家认识一下BuiltIn库中比较重要的关键字. Evaluate 关键字: Argument

Robot Framework自动化测试Selenium2Library库详细用法

一.浏览器驱动 通过不同的浏览器执行脚本. Open Browser Htpp://www.xxx.com chrome 浏览器对应的关键字: firefox FireFox ff internetexplorer Internet Explorer ie googlechrome Google Chrome gc chrome opera Opera phantomjs PhantomJS htmlunit HTMLUnit htmlunitwithjs HTMLUnit with Javas

星云链智能合约开发(八):智能合约中调用内置库

BigNumber BigNumber 模块构建于 bignumber.js之上,用来处理任意精度的十进制和非十进制运算.合约可以直接使用 BigNumber 来处理交易和其他转账操作中涉及到的数值计算. var value = new BigNumber(0); value.plus(1); - Storage storage 模块用来支持Nebulas上的数据持久化存储.功能上类似于传统的键值存储系统,当然存储不是免费的,需要消耗一定的 GAS.LocalContractStorage 是可

python常用的内置库

标准库: import os os.getcwd()  //返回当前工作路径 os.chdir('/server/accesslogs')   # Change current working directory dir() 函数算得上是Python比较常用也很好用的一个函数.它返回包含要查询对象的所有属性名称的列表 import shutil shutil.copyfile('data.db', 'archive.db')  //复制文件 shutil.move('/build/executa

编译调试go的内置库

编译html库 源码结构:pkg结构: 更改了源代码里的template/template.go,然后想在相关的调用代码里看到改变. 其实很简单,直接把template.a重命名或者删掉,然后更改源代码,运行调用了源代码的相关代码,系统会自动生成相关的pkg文件 重命名template.a 为 template.a1 修改template.go的源码 运行调用了template.go的相关代码,可以看到重新生成的template.a 看到console里的确输出了打印信息 原文地址:http:/